Real Life Example
file: code/validad/login.t
1: use 5.010;
2: use strict;
3: use warnings;
4: use lib 't/';
5: use utf8;
6:
7: use Winxle::Run;
8: use Test::Most;
9:
10: use testlib::Web;
11: use testlib::Fixtures::User;
12:
13: my $t = testlib::Web->new;
14: my ($controller, $dbic) = $t->init_dbic_txn('User');
15: my $user = testlib::Fixtures::User->new(dbic=>$dbic)->bart;
16:
17: subtest 'successful_login' => sub {
18: my $req = $t->request({
19: params=> {
20: email=>$user->email,
21: password=>'12345',
22: }
23: });
24: my $res = $t->call_plack_res($req, $controller, 'login');
25:
26: is($req->session->{user_id},$user->id,'user id in session');
27: is($res->status,302,'status: redirect');
28: is($res->location,'/','redirect to /');
29: };
30:
31: subtest 'login_form' => sub {
32: my $req = $t->request;
33: my $res = $t->call($req, $controller, 'login');
34:
35: is($req->session->{user_id},undef,'no user in session');
36: is($res->[0],'user/login.tt','correct template');
37: };
38:
39: subtest 'no_password' => sub {
40: my $req = $t->request({
41: params=> {
42: email=>$user->email,
43: }
44: });
45: my $res = $t->call($req, $controller, 'login');
46:
47: is($req->session->{user_id},undef,'user id in session');
48: my $form = $res->[1]->{form};
49: is($form->num_errors,1,'one error in form');
50: ok($form->field('password')->errors->[0],'password missing');
51: };
52:
53: subtest 'bad credentials' => sub {
54: my $req = $t->request({
55: params=> {
56: email=>$user->email,
57: password=>'hase',
58: }
59: });
60: my $res = $t->call($req, $controller, 'login');
61:
62: is($req->session->{user_id},undef,'user id in session');
63: # TODO handle errors
64: };
65:
66: done_testing();
67: $ENV{NO_CLEANUP} ? $dbic->txn_commit : $dbic->txn_rollback;
68: