SIP/t - test files adapted, supplemented, expanded. Note: requires matching data...
[koha.git] / C4 / SIP / t / 09renew.t
1 #!/usr/bin/perl
2 # renew: test Renew 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(:basic :user1 :item1);
11
12 my $checkout_template = {
13         id => "Renew: prep: check out item ($item_barcode) to patron ($user_barcode)",
14         msg => "11YN20060329    203000                  AO$instid|AA$user_barcode|AB$item_barcode|AC|",
15         pat => qr/^121NNY$datepat/,
16         fields => [],
17 };
18
19 my $checkin_template = {
20         id => "Renew: prep: check in item ($item_barcode)",
21         msg => "09N20060102    08423620060113    084235APUnder the bed|AO$instid|AB$item_barcode|AC$password|",
22         pat => qr/^101YNN$datepat/,
23         fields => [],
24 };
25
26 # my $hold_template = {
27 # id => 'Renew: prep: place hold on item',
28 # msg =>"15+20060415    110158BW20060815    110158|BSTaylor|BY2|AO$instid|AAmiker|AB$item_barcode|",
29 # pat => qr/^161N$datepat/,
30 # fields => [],
31 # };
32 #
33 # my $cancel_hold_template = {
34 # id => 'Renew: cleanup: cancel hold on item',
35 # msg =>"15-20060415    110158BW20060815    110158|BSTaylor|BY2|AO$instid|AAmiker|AB$item_barcode|",
36 # pat => qr/^161[NY]$datepat/,
37 # fields => [],
38 # };
39 #
40
41 my $renew_test_template = {
42         id => "Renew: item ($item_barcode) to patron ($user_barcode), renewal OK, no 3rd party, no fees",
43         msg => "29NN20060102    084236                  AO$instid|AA$user_barcode|AB$item_barcode|",
44         pat => qr/^301YNN$datepat/,
45         fields => [
46               $SIPtest::field_specs{(FID_INST_ID)},
47               $SIPtest::field_specs{(FID_SCREEN_MSG)},
48               $SIPtest::field_specs{(FID_PRINT_LINE)},
49               { field    => FID_PATRON_ID,
50                         pat      => qr/^$user_barcode$/,
51                         required => 1, },
52               { field    => FID_ITEM_ID,
53                         pat      => qr/^$item_barcode$/,
54                         required => 1, },
55               { field    => FID_TITLE_ID,
56                         pat      => qr/^$item_title\s*$/,
57                         required => 1, },
58               { field    => FID_DUE_DATE,
59                         pat      => qr/^$datepat$/,
60                         required => 1, },
61               { field    => FID_SECURITY_INHIBIT,
62                         pat      => qr/^[YN]$/,
63                         required => 0, },
64         ],
65 };
66
67 my @tests = (
68         $SIPtest::login_test,
69         $SIPtest::sc_status_test,
70         $checkout_template,
71         $renew_test_template,
72 );
73
74 my $test;
75
76 # Renew: item checked out, identify by title
77 #$test = clone($renew_test_template);
78 #$test->{id} = 'Renew: identify item by title';
79 #$test->{msg} =~ s/AB$item_barcode\|/AJ$item_title|/;
80 ## Everything else should be the same
81 #push @tests, $test;
82 #
83 ## Renew: Item checked out, but another patron has placed a hold
84 #$test = clone($renew_test_template);
85 #$test->{id} = 'Renew: Item has outstanding hold';
86 #$test->{pat} = qr/^300NUN$datepat/;
87 #foreach my $field (@{$test->{fields}}) {
88 #    if ($field->{field} eq FID_DUE_DATE || $field->{field} eq FID_TITLE_ID) {
89 #       $field->{pat} = qr/^$/;
90 #    }
91 #}
92 #
93 #push @tests, $hold_template, $test, $cancel_hold_template;
94 #
95 # Renew: item not checked out.  Basically the same, except
96 # for the leader test.
97
98 $test = clone($renew_test_template);
99 $test->{id} = 'Renew: item not checked out at all';
100 $test->{pat} = qr/^300NUN$datepat/;
101 foreach my $field (@{$test->{fields}}) {
102         if ($field->{field} eq FID_DUE_DATE) {
103                 $field->{pat} = qr/^$/;
104         } elsif ($field->{field} eq FID_TITLE_ID) {
105                 $field->{pat} = qr/^($item_title\s*|)$/;
106         }
107 }
108
109 push @tests, $checkin_template, $test;
110
111 $test = clone($renew_test_template);
112 $test->{id} = 'Renew: Invalid item (bad-item)';
113 $test->{msg} =~ s/AB[^|]+/ABbad-item/;
114 $test->{pat} = qr/^300NUN$datepat/;
115 foreach my $field (@{$test->{fields}}) {
116         if ($field->{field} eq FID_TITLE_ID || $field->{field} eq FID_DUE_DATE) {
117                 $field->{pat} = qr/^$/;
118         } elsif ($field->{field} eq FID_ITEM_ID) {
119                 $field->{pat} = qr/^bad-item$/;
120         }
121 }
122
123 push @tests, $test;
124
125 $test = clone($renew_test_template);
126 $test->{id} = 'Renew: Invalid user (bad_barcode)';
127 $test->{msg} =~ s/AA$user_barcode/AAbad_barcode/;
128 $test->{pat} = qr/^300NUN$datepat/;
129 foreach my $field (@{$test->{fields}}) {
130         if ($field->{field} eq FID_DUE_DATE) {
131                 $field->{pat} = qr/^$/;
132         } elsif ($field->{field} eq FID_PATRON_ID) {
133                 $field->{pat} = qr/^bad_barcode$/;
134         } elsif ($field->{field} eq FID_TITLE_ID) {
135                 $field->{pat} = qr/^($item_title\s*|)$/;
136         }
137 }
138
139 push @tests, $test;
140
141 # Still need tests for
142 #     - renewing a for-fee item
143 #     - patrons that are not permitted to renew
144 #     - renewing item that has reached limit on number of renewals
145
146 SIPtest::run_sip_tests(@tests);
147
148 1;