Branch Coverage

blib/lib/Dancer2/Plugin/Auth/Extensible/Test.pm
Criterion Covered Total %
branch 109 210 51.9


line true false branch
97 0 2 unless $res->is_success
102 0 2 unless ref $ret eq 'ARRAY'
111 4 22 unless $dependencies{$test}
112 11 25 unless grep {$_ eq $dep;} @provider_can
115 7 19 if @missing
207 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'before_authenticate_user{"password":"badpwd","realm":null,"username":"dave"}'}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config2/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config3/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config1/)}, {'formatted', ignore(), 'level', 'debug', 'message', 'after_authenticate_user{"errors":[],"password":"badpwd","realm":null,"success":0,"username":"dave"}'}), '... and we see expected hook output in logs and realms checked.')
248 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'before_authenticate_user{"password":"beer","realm":"config2","username":"dave"}'}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config2/)}, {'formatted', ignore(), 'level', 'debug', 'message', 'after_authenticate_user{"errors":[],"password":"beer","realm":null,"success":0,"username":"dave"}'}), '... and we see expected hook output in logs and realm config2 checked')
269 0 2 unless cmp_deeply($logs, noneof({'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config1/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config3/)}), '... and the other realms were not checked.')
295 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'before_authenticate_user{"password":"beer","realm":"config1","username":"dave"}'}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config1/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/config1 accepted user dave/)}, {'formatted', ignore(), 'level', 'debug', 'message', 'after_authenticate_user{"errors":[],"password":"beer","realm":"config1","success":1,"username":"dave"}'}), '... and we see expected hook output in logs and only one realm checked')
321 0 2 unless cmp_deeply($logs, noneof({'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config2/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config3/)}), '... and the other realms were not checked.')
347 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'before_authenticate_user{"password":"beer","realm":null,"username":"dave"}'}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config2/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config3/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+dave.+realm config1/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/config1 accepted user dave/)}, {'formatted', ignore(), 'level', 'debug', 'message', 'after_authenticate_user{"errors":[],"password":"beer","realm":"config1","success":1,"username":"dave"}'}), '... and we see expected hook output in logs and 3 realms checked.')
393 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'before_authenticate_user{"password":"whatever","realm":null,"username":"bananarepublic"}'}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+bananarepublic.+realm config2/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+bananarepublic.+realm config3/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/config3 accepted user bananarepublic/)}, {'formatted', ignore(), 'level', 'debug', 'message', 'after_authenticate_user{"errors":[],"password":"whatever","realm":"config3","success":1,"username":"bananarepublic"}'}), '... and we see expected hook output in logs and 2 realms checked')
424 0 2 unless cmp_deeply($logs, noneof({'formatted', ignore(), 'level', 'debug', 'message', re(qr/Attempting.+bananarepublic.+realm config1/)}), q[... and we don't see realm config1 checked.])
494 0 2 unless &ok(scalar $res->is_success, "/create_user newuser in realm $realm is success")
517 0 2 unless &ok(scalar $res->is_success, "/create_user newuser *again* in realm $realm is success")
523 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', qq[before_create_user{"password":"pish_$realm","realm":"$realm","username":"newuser"}]}, {'formatted', ignore(), 'level', 'error', 'message', re(qr/$realm provider threw error/)}, {'formatted', ignore(), 'level', 'debug', 'message', re(qr/after_create_user,newuser,0,yes/)}), '... and we see expected before/after hook logs.')
550 0 2 unless &is(scalar $res->code, 302, 'Login with newly created user succeeds')
554 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', "$realm accepted user newuser"}), '... and we see expected message in logs.')
584 0 1 unless &is(scalar $res->code, 200, '/create_user with welcome_send=>1 response is 200')
617 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'Attempting to find user NoSuchUser in realm config2'}, {'formatted', ignore(), 'level', 'debug', 'message', 'Attempting to find user NoSuchUser in realm config3'}, {'formatted', ignore(), 'level', 'debug', 'message', 'Attempting to find user NoSuchUser in realm config1'}), '... and we see logs we expect.')
646 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'Attempting to find user dave in realm config2'}), '... and we see logs we expect')
654 0 2 unless cmp_deeply($logs, noneof({'formatted', ignore(), 'level', 'debug', 'message', 'Attempting to find user dave in realm config3'}, {'formatted', ignore(), 'level', 'debug', 'message', 'Attempting to find user dave in realm config1'}), q[... and none of the ones we don't expect.])
706 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'error', 'message', re(qr/auth_provider needs realm or/)}), '... and correct error message is seen in logs.')
719 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'error', 'message', re(qr/Invalid realm NoSuchRealm/)}), '... and correct error message is seen in logs.')
729 0 2 unless &ok(scalar $res->is_success, 'auth_provider with good realm lives')
736 0 2 unless &is(scalar $res->code, 404, q['/foo/login' URL not matched by login route regex.])
765 1 1 if (grep {$_ eq 'get_user_by_code';} @provider_can) { }
820 0 2 unless &ok(scalar $res->is_redirect, 'GET /login whilst logged in is redirected.')
836 0 2 unless &ok(scalar $res->is_success, 'auth_provider with *no* realm lives')
842 0 2 unless &ok(scalar $res->is_redirect, 'GET /logout is_redirect')
868 0 2 unless &is($data->{'logged_in_user'}, 'dave', '... and session logged_in_user is set to dave')
876 0 2 unless &ok(scalar $res->is_redirect, 'POST /logout with return_url /foo/bar is_redirect')
904 0 2 unless &is(scalar $res->code, 302, 'Login as user with hashed password succeeds')
929 0 2 unless &is(scalar $res->code, 200, 'Can access /loggedin now we are logged in again')
950 0 2 unless &is(scalar $res->code, 302, 'Status code for login with return_url')
958 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'debug', 'message', 'config1 accepted user dave'}), '... and we see expected message in logs.')
978 0 2 unless &is(scalar $res->code, 302, 'Logging out returns 302')
1010 0 2 unless &is($data, 'none', '... and there is no logged_in_user.')
1027 0 2 unless &is($data, 'none', '... and there is no logged_in_user.')
1042 0 2 unless &is($data->{'name'}, 'David Precious', q[... and we see dave's name is David Precious.])
1050 0 2 unless &is($data->{'name'}, 'David Precious', q[... and we see dave's name is David Precious.])
1056 0 2 unless &ok(scalar $res->is_redirect, 'GET /logout is_redirect')
1065 0 2 unless &is($data, 'none', '... and there is no logged_in_user.')
1132 0 1 unless &is(scalar $res->content, 'not set', '... and logged_in_user_lastlogin returns undef')
1161 0 1 unless &ok(defined $session->{'logged_in_user_lastlogin'}, '... and logged_in_user_lastlogin is still not set in the session.')
1241 0 1 unless &ok(scalar $res->is_success, 'POST /login with password reset request is_success')
1244 0 1 unless &like(scalar $res->content, qr/A password reset request has been sent/, '... and we see "A password reset request has been sent" in page')
1248 0 1 unless &ok(!defined($Dancer2::Plugin::Auth::Extensible::Test::App::data), '... and password_reset_send_email was not called.')
1256 0 1 unless &ok(scalar $res->is_success, 'GET /login/<code> with bad code is_success')
1270 0 1 unless &ok(scalar $res->is_success, 'POST /login with password reset request is_success')
1273 0 1 unless &like(scalar $res->content, qr/A password reset request has been sent/, '... and we see "A password reset request has been sent" in page')
1292 0 1 unless &ok(scalar $res->is_success, 'GET /login/<code> with good code is_success')
1306 0 1 unless &ok(scalar $res->is_success, 'POST /login/<code> with bad code is_success')
1316 0 1 unless &ok(scalar $res->is_success, 'POST /login/<code> with good code is_success')
1318 0 1 unless &like(scalar $res->content, qr/Your new password is \w{8}\</, '... and we are given a new password.')
1387 0 2 unless &is(scalar @$logs, 1, 'One message in the logs')
1396 0 2 unless &is(scalar @$logs, 1, 'One message in the logs')
1418 0 2 unless &is(scalar $res->code, 302, '[GET /loggedin] Correct code')
1434 0 2 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'error', 'message', re(qr/user_roles needs a username or a logged in user/)}), 'got error: user_roles needs a username or a logged in user')
1454 0 2 unless &is(scalar $res->code, 302, '[GET /beer] Correct code')
1471 0 2 unless &is(scalar $res->code, 302, 'Login with real details succeeds')
1485 0 2 unless &is(scalar $res->code, 200, 'get /roles is 200')
1499 0 2 unless &is(scalar $res->code, 200, 'get /roles/bob is 200')
1513 0 2 unless &is(scalar $res->code, 200, 'We can request a route (/beer) requiring a role we have...')
1526 0 2 unless &is(scalar $res->code, 200, 'We can request a multi-role route requiring with any one role')
1536 0 2 unless &is(scalar $res->code, 200, 'We can request a multi-role route with all roles required')
1546 0 2 unless &is(scalar $res->code, 403, '/not_allroles response code 403')
1557 0 2 unless &is(scalar $res->code, 200, 'We can request a route requiring a regex role we have')
1569 0 2 unless &is(scalar $res->code, 403, q[route requiring a role we don't have gets response code 403])
1582 0 2 unless &is(scalar $res->code, 200, '/does_dave_drink_beer response is 200')
1590 0 2 unless &is(scalar $res->code, 200, '/does_dave_drink_cider response is 200')
1598 0 2 unless &is(scalar $res->code, 200, '/does_undef_drink_beer response is 200')
1610 0 2 unless &is(scalar $res->code, 302, 'Logging out returns 302')
1625 0 2 unless &is(scalar $res->code, 302, 'Status code on accessing /loggedin after logout')
1640 0 2 unless &is(scalar $res->code, 302, 'Status code on accessing /beer after logout')
1658 0 2 unless &is(scalar $res->code, 302, 'Login as user from second realm succeeds')
1683 0 2 unless &is(scalar $res->code, 200, 'Can access /loggedin now we are logged in again')
1692 0 2 unless &is(scalar $res->code, 200, 'Status code on /roles/bob/config1 route.')
1706 0 2 unless &is(scalar $res->code, 302, 'Logging out returns 302')
1728 0 1 unless &ok(scalar $res->is_success, 'get /update_current_user is_success')
1779 0 2 unless &is(scalar $res->code, 200, 'get /update_current_user is 200')
1786 0 2 unless &is(scalar $res->code, 200, "get /get_user_mark/$realm is 200")
1815 0 1 unless cmp_deeply($logs, superbagof({'formatted', ignore(), 'level', 'error', 'message', re(qr/Realm must be specified when more than one realm configured/)}), 'got log: Realm must be specified when more than one realm configured.')
1838 0 2 unless &is(scalar $res->code, 200, "get /get_user_mark/$realm is 200")
1854 0 2 unless &is(scalar $res->code, 200, "get /update_user_name/$realm is 200")
1861 0 2 unless &is(scalar $res->code, 200, "get /get_user_mark/$realm is 200")
1879 0 2 unless &like(scalar $res->content, qr/David Precious/, q[... and we see dave's details.])
1892 0 2 unless &ok(scalar $res->is_success, q[change mark's name is success])
1899 0 2 unless &ok(scalar $res->is_success, "get /get_user_mark/$realm is_success")
1908 0 2 unless &like(scalar $res->content, qr/David Precious/, q[... and we see still see dave's details.])
1930 0 1 unless &ok(scalar $res->is_success, '/user_password with valid username and password returns is_success')
1941 0 1 unless &ok(scalar $res->is_success, '/user_password with valid username and password returns is_success')
1952 0 1 unless &ok(scalar $res->is_success, '/user_password with valid username, password and realm is_success')
1964 0 1 unless &ok(scalar $res->is_success, '/user_password with valid username, password but bad realm is_success')
1974 0 1 unless &is(scalar $res->code, 302, 'Login with real details succeeds')
1984 0 1 unless &ok(scalar $res->is_success, 'user_password password=beer is_success')
1992 0 1 unless &ok(scalar $res->is_success, 'user_password password=cider is_success')
2008 0 1 unless &ok(scalar $res->is_success, 'user_password with code no user has is_success')
2024 0 1 unless &ok(scalar $res->is_success, 'user_password with code no user has is_success')
2035 0 1 unless &is(scalar $res->content, 'dave', '... and it returns the username.')
2043 0 1 unless &ok(scalar $res->is_success, 'Login with old password fails with 200 OK code')
2054 0 1 unless &is(scalar $res->code, 302, 'Login with real details succeeds')
2074 0 1 unless &ok(!$res->content, '... and it returns false.')
2090 0 1 unless &ok(scalar $res->is_success, 'Login with old password fails with 200 OK code')
2101 0 1 unless &is(scalar $res->code, 302, 'Login with real details succeeds')