Commit | Line | Data |
fbb4eba9 |
1 | use warnings; |
2 | use strict; |
3 | |
4 | use FindBin; |
5 | use lib ("$FindBin::Bin/lib"); |
6 | |
7 | use stemmaweb::Test::Common; |
8 | |
9 | use stemmaweb; |
10 | use LWP::Protocol::PSGI; |
11 | use Test::WWW::Mechanize; |
12 | |
13 | use Test::More; |
14 | use HTML::TreeBuilder; |
15 | use Data::Dumper; |
16 | |
17 | use stemmaweb::Test::DB; |
18 | |
19 | my $dir = stemmaweb::Test::DB->new_db; |
20 | |
21 | # NOTE: this test uses Text::Tradition::Directory |
22 | # to check user accounts really have been created. |
23 | # It'll need to be changed once that is replaced... |
24 | |
fbb4eba9 |
25 | LWP::Protocol::PSGI->register(stemmaweb->psgi_app); |
26 | |
27 | my $ua = Test::WWW::Mechanize->new; |
28 | |
26c264fd |
29 | { |
30 | my $scope = $dir->new_scope; |
31 | |
32 | $ua->get_ok('http://localhost/login'); |
33 | |
34 | local *Catalyst::Authentication::Credential::OpenID::authenticate = sub { |
35 | my ( $self, $c, $realm, $authinfo ) = @_; |
36 | |
37 | return $realm->find_user({ url => 'https://www.google.com/accounts/o8/id' }, $c); |
38 | }; |
39 | |
40 | ok !$dir->find_user({ url => 'https://www.google.com/accounts/o8/id' }), 'No such user, yet.'; |
41 | |
42 | $ua->submit_form( |
43 | form_number => 2, |
44 | fields => { |
45 | openid_identifier => 'https://www.google.com/accounts/o8/id', |
46 | }, |
47 | ); |
48 | |
49 | $ua->content_contains('You have logged in.', 'Openid login works'); |
50 | |
51 | $ua->get('/'); |
52 | |
53 | $ua->content_contains('Hello! https://www.google.com/accounts/o8/id!', 'We are logged in.'); |
54 | |
55 | ok $dir->find_user({ url => 'https://www.google.com/accounts/o8/id' }), 'The user is now there.'; |
56 | $ua->get('/logout'); |
57 | |
58 | # Converting to Google ID. |
59 | |
60 | local *stemmaweb::Authentication::Credential::Google::authenticate = sub { |
61 | my ( $self, $c, $realm, $authinfo ) = @_; |
62 | |
63 | return $realm->find_user({ |
64 | openid_id => 'https://www.google.com/accounts/o8/id', |
65 | sub => 42, |
66 | }, $c); |
67 | }; |
68 | $ua->get_ok('http://localhost/login'); |
69 | |
70 | $ua->submit_form( |
71 | form_number => 1, |
72 | fields => { |
73 | id_token => 'something', |
74 | email => 'email@example.org', |
75 | }, |
76 | ); |
77 | |
78 | $ua->content_contains('You have logged in.', 'G+ login works'); |
79 | |
80 | $ua->get('/'); |
81 | |
82 | $ua->content_contains('Hello! 42!', 'We are logged in.'); |
83 | } |
84 | |
85 | { |
86 | my $scope = $dir->new_scope; |
87 | |
88 | ok !$dir->find_user({ url => 'https://www.google.com/accounts/o8/id' }), 'Old google-openid is gone.'; |
fbb4eba9 |
89 | |
26c264fd |
90 | ok $dir->find_user({ sub => 42, openid_id => 'https://www.google.com/accounts/o8/id' }), 'The G+ user is there.'; |
fbb4eba9 |
91 | |
26c264fd |
92 | $ua->get('/logout'); |
fbb4eba9 |
93 | |
26c264fd |
94 | $ua->get_ok('http://localhost/login'); |
fbb4eba9 |
95 | |
26c264fd |
96 | local *stemmaweb::Authentication::Credential::Google::authenticate = sub { |
97 | my ( $self, $c, $realm, $authinfo ) = @_; |
fbb4eba9 |
98 | |
26c264fd |
99 | return $realm->find_user({ |
100 | openid_id => 'https://www.google.com/accounts/o8/id', |
101 | sub => 42, |
102 | }, $c); |
103 | }; |
fbb4eba9 |
104 | |
26c264fd |
105 | $ua->submit_form( |
106 | form_number => 1, |
107 | fields => { |
108 | id_token => 'something', |
109 | email => 'email@example.org', |
110 | }, |
111 | ); |
fbb4eba9 |
112 | |
26c264fd |
113 | $ua->content_contains('You have logged in.', 'We can now log in to our created user'); |
fbb4eba9 |
114 | |
26c264fd |
115 | $ua->get('/'); |
fbb4eba9 |
116 | |
26c264fd |
117 | $ua->content_contains('Hello! 42!', 'We are logged in.'); |
118 | } |
fbb4eba9 |
119 | |
26c264fd |
120 | # Brand new user just from open id. |
fbb4eba9 |
121 | |
26c264fd |
122 | { |
123 | my $scope = $dir->new_scope; |
fbb4eba9 |
124 | |
fbb4eba9 |
125 | |
26c264fd |
126 | ok !$dir->find_user({ sub => 2, openid_id => 'https://www.google.com/accounts/o8/id2' }), 'The G+ user is not yet there.'; |
fbb4eba9 |
127 | |
26c264fd |
128 | $ua->get('/logout'); |
fbb4eba9 |
129 | |
26c264fd |
130 | $ua->get_ok('http://localhost/login'); |
fbb4eba9 |
131 | |
26c264fd |
132 | local *stemmaweb::Authentication::Credential::Google::authenticate = sub { |
133 | my ( $self, $c, $realm, $authinfo ) = @_; |
fbb4eba9 |
134 | |
26c264fd |
135 | return $realm->find_user({ |
136 | openid_id => 'https://www.google.com/accounts/o8/id2', |
137 | sub => 2, |
138 | }, $c); |
139 | }; |
fbb4eba9 |
140 | |
26c264fd |
141 | $ua->submit_form( |
142 | form_number => 1, |
143 | fields => { |
144 | id_token => 'something', |
145 | email => 'email@example.org', |
146 | }, |
147 | ); |
fbb4eba9 |
148 | |
26c264fd |
149 | $ua->content_contains('You have logged in.', 'We can now log in to our created user'); |
fbb4eba9 |
150 | |
26c264fd |
151 | $ua->get('/'); |
fbb4eba9 |
152 | |
26c264fd |
153 | $ua->content_contains('Hello! 2!', 'We are logged in.'); |
fbb4eba9 |
154 | |
26c264fd |
155 | ok $dir->find_user({ sub => 2, openid_id => 'https://www.google.com/accounts/o8/id2' }), 'The G+ user is there.'; |
fbb4eba9 |
156 | |
26c264fd |
157 | $ua->get('/logout'); |
fbb4eba9 |
158 | |
26c264fd |
159 | $ua->get_ok('http://localhost/login'); |
fbb4eba9 |
160 | |
26c264fd |
161 | $ua->submit_form( |
162 | form_number => 1, |
163 | fields => { |
164 | id_token => 'something', |
165 | email => 'email@example.org', |
166 | }, |
167 | ); |
fbb4eba9 |
168 | |
26c264fd |
169 | $ua->content_contains('You have logged in.', 'We can login again'); |
fbb4eba9 |
170 | |
26c264fd |
171 | $ua->get('/'); |
fbb4eba9 |
172 | |
26c264fd |
173 | $ua->content_contains('Hello! 2!', 'We are logged in.'); |
174 | } |
fbb4eba9 |
175 | |
176 | done_testing; |