Fix RT#82944
[catagits/Catalyst-Authentication-Store-DBIx-Class.git] / t / 03-authtest.t
CommitLineData
d1710b0f 1#!perl
2
3use strict;
4use warnings;
5use DBI;
6use File::Path;
7use FindBin;
8use Test::More;
9use lib "$FindBin::Bin/lib";
10
11BEGIN {
12 eval { require DBD::SQLite }
13 or plan skip_all =>
14 "DBD::SQLite is required for this test";
15
16 eval { require DBIx::Class }
17 or plan skip_all =>
18 "DBIx::Class is required for this test";
19
6bd97524 20 plan tests => 19;
d1710b0f 21
b4319877 22 use TestApp;
23 TestApp->config( {
d1710b0f 24 name => 'TestApp',
25 authentication => {
26 default_realm => "users",
27 realms => {
28 users => {
29 credential => {
30 'class' => "Password",
31 'password_field' => 'password',
32 'password_type' => 'clear'
33 },
34 store => {
35 'class' => 'DBIx::Class',
f55cb81e 36 'user_model' => 'TestApp::User',
d1710b0f 37 },
38 },
39 },
40 },
b4319877 41 } );
d1710b0f 42
b4319877 43 TestApp->setup(
d1710b0f 44 qw/Authentication/
b4319877 45 );
d1710b0f 46}
47
d1710b0f 48use Catalyst::Test 'TestApp';
49
50# log a user in
51{
52 ok( my $res = request('http://localhost/user_login?username=joeuser&password=hackme'), 'request ok' );
53 is( $res->content, 'joeuser logged in', 'user logged in ok' );
54}
55
56# invalid user
57{
58 ok( my $res = request('http://localhost/user_login?username=foo&password=bar'), 'request ok' );
59 is( $res->content, 'not logged in', 'user not logged in ok' );
60}
61
62# disabled user - no disable check
63{
64 ok( my $res = request('http://localhost/user_login?username=spammer&password=broken'), 'request ok' );
65 is( $res->content, 'spammer logged in', 'status check - disabled user logged in ok' );
66}
67
68# disabled user - should fail login
69{
70 ok( my $res = request('http://localhost/notdisabled_login?username=spammer&password=broken'), 'request ok' );
71 is( $res->content, 'not logged in', 'status check - disabled user not logged in ok' );
72}
73
74# log the user out
75{
76 ok( my $res = request('http://localhost/user_logout'), 'request ok' );
77 is( $res->content, 'logged out', 'user logged out ok' );
78}
79
80# searchargs test
81{
82 ok( my $res = request('http://localhost/searchargs_login?email=nada%40mucho.net&password=much'), 'request ok' );
83 is( $res->content, 'nuffin logged in', 'searchargs based login ok' );
84}
85
6bd97524 86# result test
87{
88 ok( my $res = request('http://localhost/result_login?email=j%40cpants.org&password=letmein'), 'request ok' );
89 is( $res->content, 'jayk logged in', 'resultset based login ok' );
90}
91
d1710b0f 92# resultset test
d1710b0f 93{
94 ok( my $res = request('http://localhost/resultset_login?email=j%40cpants.org&password=letmein'), 'request ok' );
95 is( $res->content, 'jayk logged in', 'resultset based login ok' );
96}
97
c388ac9d 98# invalid user
99{
100 ok( my $res = request('http://localhost/bad_login?username=foo&password=bar'), 'request ok' );
101 like( $res->content, qr/only has these columns/, 'incorrect parameters to authenticate throws a useful exception' );
102}
103
104
d1710b0f 105{
b4319877 106 TestApp->config->{authentication}->{realms}->{users}->{store}->{user_model} = 'Nonexistent::Class';
d1710b0f 107 my $res = request('http://localhost/user_login?username=joeuser&password=hackme');
f55cb81e 108 like( $res->content, qr/\$\Qc->model('Nonexistent::Class') did not return a resultset. Did you set user_model correctly?/, 'test for wrong user_class' );
d1710b0f 109}