blob: 1db8ac98ec4b2ea77f73f37591334f1254868cea [file] [log] [blame]
use Mojo::Base -strict;
use Test::More;
use Test::Mojo;
use Mojo::File qw/path/;
use Data::Dumper;
#####################
# Start Fake server #
#####################
my $mount_point = '/realapi/';
$ENV{KALAMAR_API} = $mount_point;
my $t = Test::Mojo->new('Kalamar' => {
Kalamar => {
plugins => ['Auth'],
proxy_inactivity_timeout => 99,
proxy_connect_timeout => 66,
},
'Kalamar-Auth' => {
client_id => 2,
client_secret => 'k414m4r-s3cr3t',
oauth2 => 1
}
});
# Mount fake backend
# Get the fixture path
my $fixtures_path = path(Mojo::File->new(__FILE__)->dirname, 'server');
my $fake_backend = $t->app->plugin(
Mount => {
$mount_point =>
$fixtures_path->child('mock.pl')
}
);
# Configure fake backend
my $fake_app = $fake_backend->pattern->defaults->{app};
$fake_app->log($t->app->log);
# Globally set server
$t->app->ua->server->app($t->app);
my $rendered = 0;
$t->app->hook(
after_render => sub {
$rendered++;
}
);
$t->get_ok('/doc')
->status_is(200)
->text_like('title', qr!KorAP!)
;
is($rendered, 1);
$t->get_ok('/realapi/v1.0')
->status_is(200)
->content_is('Fake server available')
;
is($rendered, 1);
$t->get_ok('/api/v1.0/')
->status_is(200)
->header_is('X-Proxy', 'Kalamar')
->header_is('X-Robots', 'noindex')
->header_is('Connection', 'close')
->header_is('Access-Control-Allow-Origin', '*')
->header_is('Access-Control-Allow-Methods', 'GET, OPTIONS')
->content_is('Fake server available')
;
# Proxy renders
is($rendered, 2);
$t->get_ok('/api/v1.0/search?ql=cosmas3')
->status_is(400)
->header_is('Access-Control-Allow-Origin', '*')
->header_is('Access-Control-Allow-Methods', 'GET, OPTIONS')
->json_is('/errors/0/0','307')
->header_is('connection', 'close')
;
# Proxy renders
is($rendered, 3);
$t->post_ok('/api/v1.0/oauth2/token' => {} => form => {
username => 'test',
password => 'pass'
})
->status_is(400)
->json_is('/errors/0/1','Grant Type unknown')
;
$t->post_ok('/api/v1.0/oauth2/token' => {} => form => {
grant_type => 'password',
client_id => 2,
client_secret => 'k414m4r-s3cr3t',
username => 'test',
password => 'pass'
})
->status_is(200)
->json_is('/token_type', 'Bearer')
;
# Create long-running route
$fake_app->routes->get('/v1.0/longwait')->to(
cb => sub {
my $c = shift;
$c->render_later;
Mojo::IOLoop->timer(
5 => sub {
return $c->render(text => 'okay');
}
);
});
# Set proxy timeout
is($t->app->ua->inactivity_timeout, 99);
is($t->app->ua->connect_timeout, 66);
# Set proxy timeout
$t->app->ua->inactivity_timeout(1);
$t->get_ok('/api/v1.0/longwait')
->status_is(400)
->content_is('Proxy error: Inactivity timeout')
;
$t->get_ok('/api/v1.0/redirect-target-a')
->status_is(200)
->header_is('Access-Control-Allow-Origin', '*')
->header_is('Access-Control-Allow-Methods', 'GET, OPTIONS')
->content_is('Redirect Target!')
;
$t->get_ok('/api/v1.0/redirect')
->status_is(308)
->content_is('')
;
$t->ua->max_redirects(2);
$t->get_ok('/api/v1.0/redirect')
->status_is(200)
->header_is('Access-Control-Allow-Origin', '*')
->content_is('Redirect Target!')
;
# Check CORS
$t->options_ok('/api/v1.0/search?ql=cosmas3')
->status_is(204)
->content_is('')
->header_is('Access-Control-Allow-Origin', '*')
->header_is('Access-Control-Allow-Methods', 'GET, OPTIONS')
->header_is('Access-Control-Max-Age', '86400')
;
done_testing;
__END__