Skip to content

Commit 3e3db53

Browse files
committed
Test openid login end to end
use UserAgent role to follow redirects back and forth.
1 parent c4fbadf commit 3e3db53

File tree

1 file changed

+74
-9
lines changed

1 file changed

+74
-9
lines changed

t/server/controller/login/openid.t

Lines changed: 74 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,96 @@
11
use strict;
22
use warnings;
33
use utf8;
4+
use lib 't/lib';
5+
6+
package # Test::Routine's run_me (in main) doesn't mix well with Test::Aggregate.
7+
t::server::controller::login::openid;
48

59
use JSON qw( decode_json );
610
use MetaCPAN::Server::Test;
711
use Test::More;
812
use Test::OpenID::Server;
13+
use Test::Routine;
14+
use Test::Routine::Util;
15+
16+
with qw(
17+
MetaCPAN::Tests::UserAgent
18+
);
919

1020
my $openid_server = Test::OpenID::Server->new;
1121
my $url = $openid_server->started_ok('start server');
1222

23+
test authorization => sub {
24+
my $self = shift;
25+
26+
# Set client_id to get cookie.
27+
my %params = (
28+
openid_identifier => "$url/test",
29+
client_id => 'metacpan.dev',
30+
);
31+
my $uri_params = URI->new;
32+
$uri_params->query_form(%params);
33+
34+
ok( $self->request( GET '/login/openid?' . $uri_params->query ),
35+
'login with test URL' );
36+
37+
like $self->redirect_uri,
38+
qr{\Q$url\E/openid.server}, 'get correct OpenID server url';
39+
40+
$self->follow_redirect;
41+
42+
like $self->redirect_uri,
43+
qr{/login/openid .+ openid\.mode}x,
44+
'returns to openid controller';
45+
46+
$self->follow_redirect;
47+
48+
my $authed_uri = $self->redirect_uri;
49+
my %authed_params = $authed_uri->query_form;
50+
51+
is $authed_params{$_}, $params{$_}, "preserved $_ param"
52+
for sort keys %params;
53+
54+
is $authed_uri->path, '/oauth2/authorize',
55+
'redirect to internal oauth provider';
56+
57+
$self->follow_redirect;
58+
59+
my $final_url = $self->redirect_uri;
60+
61+
is $final_url->host_port, 'localhost:5001',
62+
'final redirect goes to web ui';
63+
is $final_url->path, '/login', 'login to ui';
64+
ok { $final_url->query_form }->{code}, 'request has code param';
65+
};
66+
67+
test unknown_provider => sub {
68+
my $self = shift;
69+
my $res;
70+
71+
ok(
72+
$res
73+
= $self->cb->(
74+
GET "/login/openid?openid_identifier=$url/unknown" ),
75+
'get unknown ID page'
76+
);
77+
my $body = decode_json( $res->content );
78+
like( $body->{error}, qr/no_identity_server/,
79+
'get descriptive error for unknown ID' );
80+
};
81+
1382
test_psgi app, sub {
1483
my $cb = shift;
1584
require MetaCPAN::Server::Controller::Login::OpenID;
1685

1786
MetaCPAN::Server::Controller::Login::OpenID->_ua->resolver
1887
->whitelisted_hosts( [ 'localhost', '127.0.0.1' ] );
1988

20-
ok( my $res = $cb->( GET "/login/openid?openid_identifier=$url/test" ),
21-
'login with test URL' );
22-
like( $res->header('location'),
23-
qr/openid.server/, 'get correct OpenID server url' );
24-
ok( $res = $cb->( GET "/login/openid?openid_identifier=$url/unknown" ),
25-
'get unknown ID page' );
26-
my $body = decode_json( $res->content );
27-
like( $body->{error}, qr/no_identity_server/,
28-
'get descriptive error for unknown ID' );
89+
run_me(
90+
{
91+
cb => $cb,
92+
}
93+
);
2994
};
3095

3196
done_testing();

0 commit comments

Comments
 (0)