529e32fae70cf1bcd078b934ab9c350ce84356a3
[catagits/Catalyst-Plugin-Authentication.git] / t / lib / AuthTestApp.pm
1 package AuthTestApp;
2 use Catalyst qw/
3         Authentication
4         Authentication::Store::Minimal
5         Authentication::Credential::Password
6 /;
7
8 use Test::More;
9 use Test::Exception;
10
11 use Digest::MD5 qw/md5/;
12 use Digest::SHA1 qw/sha1_base64/;
13
14 our $users;
15
16 sub number_of_elements { return scalar @_ }
17
18 sub moose : Local {
19         my ( $self, $c ) = @_;
20
21         is(number_of_elements($c->user), 1, "Array undef");
22         is($c->user, undef, "no user, returns undef");
23         ok(!$c->user, "no user");
24         ok($c->login( "foo", "s3cr3t" ), "can login with clear");
25         is( $c->user, $users->{foo}, "user object is in proper place");
26
27         ok( !$c->user->roles, "no roles for foo" );
28         my @new = qw/foo bar gorch/;
29         $c->user->roles( @new );
30         is_deeply( [ $c->user->roles ], \@new, "roles set as array");
31
32         $c->logout;
33         ok(!$c->user, "no more user, after logout");
34
35         ok($c->login( "bar", "s3cr3t" ), "can login with crypted");
36         is( $c->user, $users->{bar}, "user object is in proper place");
37         $c->logout;
38
39         ok($c->login("gorch", "s3cr3t"), "can login with hashed");
40         is( $c->user, $users->{gorch}, "user object is in proper place");
41         $c->logout;
42
43         ok($c->login("shabaz", "s3cr3t"), "can login with base64 hashed");
44         is( $c->user, $users->{shabaz}, "user object is in proper place");
45         $c->logout;
46
47         ok($c->login("sadeek", "s3cr3t"), "can login with padded base64 hashed");
48         is( $c->user, $users->{sadeek}, "user object is in proper place");
49         $c->logout;
50
51         ok(!$c->login( "bar", "bad pass" ), "can't login with bad password");
52         ok(!$c->user, "no user");
53
54         throws_ok { $c->login( "baz", "foo" ) } qr/support.*mechanism/, "can't login without any supported mech";
55
56         $c->res->body( "ok" );
57 }
58
59 __PACKAGE__->config->{'Plugin::Authentication'}{users} = $users = {
60         foo => {
61                 password => "s3cr3t",
62         },
63         bar => {
64                 crypted_password => crypt("s3cr3t", "x8"),
65         },
66         gorch => {
67                 hashed_password => md5("s3cr3t"),
68                 hash_algorithm => "MD5",
69         },
70         shabaz => {
71                 hashed_password => sha1_base64("s3cr3t"),
72                 hash_algorithm => "SHA-1"
73         },
74         sadeek => {
75                 hashed_password => sha1_base64("s3cr3t").'=',
76                 hash_algorithm => "SHA-1"
77         },
78         baz => {},
79 };
80
81 __PACKAGE__->setup;