Factor test applications out to separate files due to change in Catalyst::Test in...
[catagits/Catalyst-Plugin-Authentication.git] / t / lib / AuthTestApp.pm
diff --git a/t/lib/AuthTestApp.pm b/t/lib/AuthTestApp.pm
new file mode 100644 (file)
index 0000000..c8a92e8
--- /dev/null
@@ -0,0 +1,77 @@
+package AuthTestApp;
+use Catalyst qw/
+       Authentication
+       Authentication::Store::Minimal
+       Authentication::Credential::Password
+/;
+
+use Test::More;
+use Test::Exception;
+
+use Digest::MD5 qw/md5/;
+use Digest::SHA1 qw/sha1_base64/;
+
+our $users;
+
+sub moose : Local {
+       my ( $self, $c ) = @_;
+
+       ok(!$c->user, "no user");
+       ok($c->login( "foo", "s3cr3t" ), "can login with clear");
+       is( $c->user, $users->{foo}, "user object is in proper place");
+
+       ok( !$c->user->roles, "no roles for foo" );
+       my @new = qw/foo bar gorch/;
+       $c->user->roles( @new );
+       is_deeply( [ $c->user->roles ], \@new, "roles set as array");
+
+       $c->logout;
+       ok(!$c->user, "no more user, after logout");
+
+       ok($c->login( "bar", "s3cr3t" ), "can login with crypted");
+       is( $c->user, $users->{bar}, "user object is in proper place");
+       $c->logout;
+
+       ok($c->login("gorch", "s3cr3t"), "can login with hashed");
+       is( $c->user, $users->{gorch}, "user object is in proper place");
+       $c->logout;
+
+       ok($c->login("shabaz", "s3cr3t"), "can login with base64 hashed");
+       is( $c->user, $users->{shabaz}, "user object is in proper place");
+       $c->logout;
+
+       ok($c->login("sadeek", "s3cr3t"), "can login with padded base64 hashed");
+       is( $c->user, $users->{sadeek}, "user object is in proper place");
+       $c->logout;
+
+       ok(!$c->login( "bar", "bad pass" ), "can't login with bad password");
+       ok(!$c->user, "no user");
+
+       throws_ok { $c->login( "baz", "foo" ) } qr/support.*mechanism/, "can't login without any supported mech";
+
+       $c->res->body( "ok" );
+}
+
+__PACKAGE__->config->{authentication}{users} = $users = {
+       foo => {
+               password => "s3cr3t",
+       },
+       bar => {
+               crypted_password => crypt("s3cr3t", "x8"),
+       },
+       gorch => {
+               hashed_password => md5("s3cr3t"),
+               hash_algorithm => "MD5",
+       },
+       shabaz => {
+               hashed_password => sha1_base64("s3cr3t"),
+               hash_algorithm => "SHA-1"
+       },
+       sadeek => {
+               hashed_password => sha1_base64("s3cr3t").'=',
+               hash_algorithm => "SHA-1"
+       },
+       baz => {},
+};
+
+__PACKAGE__->setup;