Allow authenticating against fully loaded users
[catagits/Catalyst-Authentication-Store-DBIx-Class.git] / t / 03-authtest.t
index e5f5049..f704281 100644 (file)
-#!perl\r
-\r
-use strict;\r
-use warnings;\r
-use DBI;\r
-use File::Path;\r
-use FindBin;\r
-use Test::More;\r
-use lib "$FindBin::Bin/lib";\r
-\r
-BEGIN {\r
-    eval { require DBD::SQLite }\r
-        or plan skip_all =>\r
-        "DBD::SQLite is required for this test";\r
-\r
-    eval { require DBIx::Class }\r
-        or plan skip_all =>\r
-        "DBIx::Class is required for this test";\r
-\r
-    plan tests => 14;\r
-\r
-    $ENV{TESTAPP_DB_FILE} = "$FindBin::Bin/auth.db" unless exists($ENV{TESTAPP_DB_FILE});\r
-\r
-    $ENV{TESTAPP_CONFIG} = {\r
-        name => 'TestApp',\r
-        authentication => {\r
-            default_realm => "users",\r
-            realms => {\r
-                users => {\r
-                    credential => {\r
-                        'class' => "Password",\r
-                        'password_field' => 'password',\r
-                        'password_type' => 'clear'\r
-                    },\r
-                    store => {\r
-                        'class' => 'DBIx::Class',\r
-                        'user_class' => 'TestApp::User',\r
-                    },\r
-                },\r
-            },\r
-        },\r
-    };\r
-\r
-    $ENV{TESTAPP_PLUGINS} = [\r
-        qw/Authentication/\r
-    ];\r
-}\r
-\r
-use SetupDB;\r
-\r
-use Catalyst::Test 'TestApp';\r
-\r
-# log a user in\r
-{\r
-    ok( my $res = request('http://localhost/user_login?username=joeuser&password=hackme'), 'request ok' );\r
-    is( $res->content, 'joeuser logged in', 'user logged in ok' );\r
-}\r
-\r
-# invalid user\r
-{\r
-    ok( my $res = request('http://localhost/user_login?username=foo&password=bar'), 'request ok' );\r
-    is( $res->content, 'not logged in', 'user not logged in ok' );\r
-}\r
-\r
-# disabled user - no disable check\r
-{\r
-    ok( my $res = request('http://localhost/user_login?username=spammer&password=broken'), 'request ok' );\r
-    is( $res->content, 'spammer logged in', 'status check - disabled user logged in ok' );\r
-}\r
-\r
-# disabled user - should fail login\r
-{\r
-    ok( my $res = request('http://localhost/notdisabled_login?username=spammer&password=broken'), 'request ok' );\r
-    is( $res->content, 'not logged in', 'status check - disabled user not logged in ok' );\r
-}\r
-\r
-# log the user out\r
-{\r
-    ok( my $res = request('http://localhost/user_logout'), 'request ok' );\r
-    is( $res->content, 'logged out', 'user logged out ok' );\r
-}\r
-\r
-# searchargs test\r
-{\r
-    ok( my $res = request('http://localhost/searchargs_login?email=nada%40mucho.net&password=much'), 'request ok' );\r
-    is( $res->content, 'nuffin logged in', 'searchargs based login ok' );\r
-}\r
-\r
-# resultset test\r
-# searchargs test\r
-{\r
-    ok( my $res = request('http://localhost/resultset_login?email=j%40cpants.org&password=letmein'), 'request ok' );\r
-    is( $res->content, 'jayk logged in', 'resultset based login ok' );\r
-}\r
-\r
-\r
-# clean up\r
-unlink $ENV{TESTAPP_DB_FILE};\r
+#!perl
+
+use strict;
+use warnings;
+use DBI;
+use File::Path;
+use FindBin;
+use Test::More;
+use lib "$FindBin::Bin/lib";
+
+BEGIN {
+    eval { require DBD::SQLite }
+        or plan skip_all =>
+        "DBD::SQLite is required for this test";
+
+    eval { require DBIx::Class }
+        or plan skip_all =>
+        "DBIx::Class is required for this test";
+
+    plan tests => 19;
+
+    $ENV{TESTAPP_CONFIG} = {
+        name => 'TestApp',
+        authentication => {
+            default_realm => "users",
+            realms => {
+                users => {
+                    credential => {
+                        'class' => "Password",
+                        'password_field' => 'password',
+                        'password_type' => 'clear'
+                    },
+                    store => {
+                        'class' => 'DBIx::Class',
+                        'user_model' => 'TestApp::User',
+                    },
+                },
+            },
+        },
+    };
+
+    $ENV{TESTAPP_PLUGINS} = [
+        qw/Authentication/
+    ];
+}
+
+use Catalyst::Test 'TestApp';
+
+# log a user in
+{
+    ok( my $res = request('http://localhost/user_login?username=joeuser&password=hackme'), 'request ok' );
+    is( $res->content, 'joeuser logged in', 'user logged in ok' );
+}
+
+# invalid user
+{
+    ok( my $res = request('http://localhost/user_login?username=foo&password=bar'), 'request ok' );
+    is( $res->content, 'not logged in', 'user not logged in ok' );
+}
+
+# disabled user - no disable check
+{
+    ok( my $res = request('http://localhost/user_login?username=spammer&password=broken'), 'request ok' );
+    is( $res->content, 'spammer logged in', 'status check - disabled user logged in ok' );
+}
+
+# disabled user - should fail login
+{
+    ok( my $res = request('http://localhost/notdisabled_login?username=spammer&password=broken'), 'request ok' );
+    is( $res->content, 'not logged in', 'status check - disabled user not logged in ok' );
+}
+
+# log the user out
+{
+    ok( my $res = request('http://localhost/user_logout'), 'request ok' );
+    is( $res->content, 'logged out', 'user logged out ok' );
+}
+
+# searchargs test
+{
+    ok( my $res = request('http://localhost/searchargs_login?email=nada%40mucho.net&password=much'), 'request ok' );
+    is( $res->content, 'nuffin logged in', 'searchargs based login ok' );
+}
+
+# result test
+{
+    ok( my $res = request('http://localhost/result_login?email=j%40cpants.org&password=letmein'), 'request ok' );
+    is( $res->content, 'jayk logged in', 'resultset based login ok' );
+}
+
+# resultset test
+{
+    ok( my $res = request('http://localhost/resultset_login?email=j%40cpants.org&password=letmein'), 'request ok' );
+    is( $res->content, 'jayk logged in', 'resultset based login ok' );
+}
+
+# invalid user
+{
+    ok( my $res = request('http://localhost/bad_login?username=foo&password=bar'), 'request ok' );
+    like( $res->content, qr/only has these columns/, 'incorrect parameters to authenticate throws a useful exception' );
+}
+
+
+{
+    $ENV{TESTAPP_CONFIG}->{authentication}->{realms}->{users}->{store}->{user_model} = 'Nonexistent::Class';
+    my $res = request('http://localhost/user_login?username=joeuser&password=hackme');
+    like( $res->content, qr/\$\Qc->model('Nonexistent::Class') did not return a resultset. Did you set user_model correctly?/, 'test for wrong user_class' );
+}