Changing CanBookBeRenewed to pass back the reason a renewal cannot proceed
[koha.git] / C4 / SIP / t / 06patron_enable.t
1 #!/usr/bin/perl
2 # patron_enable: test  Patron Enable Response
3
4 use strict;
5 use warnings;
6 use Clone qw(clone);
7
8 use Sip::Constants qw(:all);
9
10 use SIPtest qw($datepat $textpat);
11
12 my $patron_enable_test_template = {
13     id => 'Patron Enable: valid patron',
14     msg => "2520060102    084238AOUWOLS|AAdjfiander|",
15     pat => qr/^26 {4}[ Y]{10}000$datepat/,
16     fields => [
17                $SIPtest::field_specs{(FID_INST_ID)},
18                $SIPtest::field_specs{(FID_SCREEN_MSG)},
19                $SIPtest::field_specs{(FID_PRINT_LINE)},
20                { field    => FID_PATRON_ID,
21                  pat      => qr/^djfiander$/,
22                  required => 1, },
23                { field    => FID_PERSONAL_NAME,
24                  pat      => qr/^David J\. Fiander$/,
25                  required => 1, },
26                { field    => FID_VALID_PATRON,
27                  pat      => qr/^Y$/,
28                  # Not required by the spec, but by the test
29                  required => 1, },
30                ], };
31
32 # We need to disable the valid patron before we can 
33 # ensure that he was properly enabled.
34 my $patron_disable_test_template = {
35     id => 'Patron Enable: block patron (prep to test enabling)',
36     msg => "01N20060102    084238AOUWOLS|ALHe's a jerk|AAdjfiander|",
37     # response to block patron is a patron status message
38     pat => qr/^24Y{4}[ Y]{10}000$datepat/,
39     fields => [
40                $SIPtest::field_specs{(FID_INST_ID)},
41                { field    => FID_PATRON_ID,
42                  pat      => qr/^djfiander$/,
43                  required => 1, },
44                { field    => FID_PERSONAL_NAME,
45                  pat      => qr/^David J\. Fiander$/,
46                  required => 1, },
47                { field    => FID_VALID_PATRON,
48                  pat      => qr/^Y$/,
49                  # Not required by the spec, but by the test
50                  required => 1, },
51                ], };
52
53 my @tests = (
54              $SIPtest::login_test,
55              $SIPtest::sc_status_test,
56              $patron_disable_test_template,
57              clone($patron_enable_test_template),
58              );
59
60 my $test;
61
62 # Valid patron, valid password
63 $test = clone($patron_enable_test_template);
64 $test->{id} = "Patron Enable: valid patron, valid password";
65 $test->{msg} .= FID_PATRON_PWD . '6789|';
66 $test->{pat} = qr/^26 {4}[ Y]{10}000$datepat/;
67 delete $test->{fields};
68 $test->{fields} = [
69                    $SIPtest::field_specs{(FID_INST_ID)},
70                    $SIPtest::field_specs{(FID_SCREEN_MSG)},
71                    $SIPtest::field_specs{(FID_PRINT_LINE)},
72                    { field    => FID_PATRON_ID,
73                      pat      => qr/^djfiander$/,
74                      required => 1, },
75                    { field    => FID_PERSONAL_NAME,
76                      pat      => qr/^David J\. Fiander$/,
77                      required => 1, },
78                    { field    => FID_VALID_PATRON,
79                      pat      => qr/^Y$/,
80                      # Not required by the spec, but by the test
81                      required => 1, },
82                    { field    => FID_VALID_PATRON_PWD,
83                      pat      => qr/^Y$/,
84                      required => 1, },
85                    ];
86
87 push @tests, $patron_disable_test_template, $test;
88
89 # Valid patron, invalid password
90 $test = clone($patron_enable_test_template);
91 $test->{id} = "Patron Enable: valid patron, invalid password";
92 $test->{msg} .= FID_PATRON_PWD . 'bad password|';
93 $test->{pat} = qr/^26[ Y]{14}000$datepat/;
94 delete $test->{fields};
95 $test->{fields} = [
96                    $SIPtest::field_specs{(FID_INST_ID)},
97                    $SIPtest::field_specs{(FID_SCREEN_MSG)},
98                    $SIPtest::field_specs{(FID_PRINT_LINE)},
99                    { field    => FID_PATRON_ID,
100                      pat      => qr/^djfiander$/,
101                      required => 1, },
102                    { field    => FID_PERSONAL_NAME,
103                      pat      => qr/^David J\. Fiander$/,
104                      required => 1, },
105                    { field    => FID_VALID_PATRON,
106                      pat      => qr/^Y$/,
107                      # Not required by the spec, but by the test
108                      required => 1, },
109                    { field    => FID_VALID_PATRON_PWD,
110                      pat      => qr/^N$/,
111                      required => 1, },
112                    ];
113
114 push @tests, $patron_disable_test_template, $test;
115 # After this test, the patron is left disabled, so re-enable
116 push @tests, $patron_enable_test_template;
117
118 # Invalid patron
119 $test = clone($patron_enable_test_template);
120 $test->{id} =~ s/valid/invalid/;
121 $test->{msg} =~ s/AAdjfiander\|/AAberick|/;
122 $test->{pat} =  qr/^26Y{4}[ Y]{10}000$datepat/;
123 delete $test->{fields};
124 $test->{fields} = [
125                    $SIPtest::field_specs{(FID_INST_ID)},
126                    $SIPtest::field_specs{(FID_SCREEN_MSG)},
127                    $SIPtest::field_specs{(FID_PRINT_LINE)},
128                    { field    => FID_PATRON_ID,
129                      pat      => qr/^berick$/,
130                      required => 1, },
131                    { field    => FID_PERSONAL_NAME,
132                      pat      => qr/^$/,
133                      required => 1, },
134                    { field    => FID_VALID_PATRON,
135                      pat      => qr/^N$/,
136                      # Not required by the spec, but by the test
137                      required => 1, },
138                    ];
139
140 push @tests, $test;
141
142 SIPtest::run_sip_tests(@tests);
143
144 1;