Convert to using loop_context_vars for rows instead of highlight/toggle/whatever.
[koha.git] / C4 / SIP / koha_test / 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($datepat $textpat $instid $currency $user_barcode 
11                $item_barcode $item_title);
12
13 my $checkout_template = {
14                          id => 'Renew: prep: check out item',
15                          msg => "11YN20060329    203000                  AO$instid|AA$user_barcode|AB$item_barcode|AC|",
16                          pat => qr/^121NNY$datepat/,
17                          fields => [],
18                         };
19
20 my $checkin_template = {
21                         id => 'Renew: prep: check in item',
22                         msg => "09N20060102    08423620060113    084235APUnder the bed|AO$instid|AB$item_barcode|ACterminal password|",
23                         pat => qr/^101YNN$datepat/,
24                         fields => [],
25                        };
26
27 #my $hold_template = {
28 #                    id => 'Renew: prep: place hold on item',
29 #                    msg =>"15+20060415    110158BW20060815    110158|BSTaylor|BY2|AO$instid|AAmiker|AB$item_barcode|",
30 #                    pat => qr/^161N$datepat/,
31 #                    fields => [],
32 #                   };
33 #
34 #my $cancel_hold_template = {
35 #                    id => 'Renew: cleanup: cancel hold on item',
36 #                    msg =>"15-20060415    110158BW20060815    110158|BSTaylor|BY2|AO$instid|AAmiker|AB$item_barcode|",
37 #                    pat => qr/^161[NY]$datepat/,
38 #                    fields => [],
39 #                   };
40 #
41
42 my $renew_test_template = {
43                            id => 'Renew: item id checked out to patron, renewal permitted, no 3rd party, no fees',
44                            msg => "29NN20060102    084236                  AO$instid|AA$user_barcode|AB$item_barcode|",
45                            pat => qr/^301YNN$datepat/,
46                            fields => [
47                                       $SIPtest::field_specs{(FID_INST_ID)},
48                                       $SIPtest::field_specs{(FID_SCREEN_MSG)},
49                                       $SIPtest::field_specs{(FID_PRINT_LINE)},
50                                       { field    => FID_PATRON_ID,
51                                         pat      => qr/^$user_barcode$/,
52                                         required => 1, },
53                                       { field    => FID_ITEM_ID,
54                                         pat      => qr/^$item_barcode$/,
55                                         required => 1, },
56                                       { field    => FID_TITLE_ID,
57                                         pat      => qr/^$item_title\s*$/,
58                                         required => 1, },
59                                       { field    => FID_DUE_DATE,
60                                         pat      => qr/^$datepat$/,
61                                         required => 1, },
62                                       { field    => FID_SECURITY_INHIBIT,
63                                         pat      => qr/^[YN]$/,
64                                         required => 0, },
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 $test = clone($renew_test_template);
98 $test->{id} = 'Renew: item not checked out at all';
99 $test->{pat} = qr/^300NUN$datepat/;
100 foreach my $field (@{$test->{fields}}) {
101     if ($field->{field} eq FID_DUE_DATE) {
102         $field->{pat} = qr/^$/;
103     } elsif ($field->{field} eq FID_TITLE_ID) {
104         $field->{pat} = qr/^($item_title\s*|)$/;
105     }
106 }
107
108 push @tests, $checkin_template, $test;
109
110 $test = clone($renew_test_template);
111 $test->{id} = 'Renew: Invalid item';
112 $test->{msg} =~ s/AB[^|]+/ABbad-item/;
113 $test->{pat} = qr/^300NUN$datepat/;
114 foreach my $field (@{$test->{fields}}) {
115     if ($field->{field} eq FID_TITLE_ID || $field->{field} eq FID_DUE_DATE) {
116         $field->{pat} = qr/^$/;
117     } elsif ($field->{field} eq FID_ITEM_ID) {
118         $field->{pat} = qr/^bad-item$/;
119     }
120 }
121
122 push @tests, $test;
123
124 $test = clone($renew_test_template);
125 $test->{id} = 'Renew: Invalid user';
126 $test->{msg} =~ s/AA$user_barcode/AAberick/;
127 $test->{pat} = qr/^300NUN$datepat/;
128 foreach my $field (@{$test->{fields}}) {
129     if ($field->{field} eq FID_DUE_DATE) {
130         $field->{pat} = qr/^$/;
131     } elsif ($field->{field} eq FID_PATRON_ID) {
132         $field->{pat} = qr/^berick$/;
133     } elsif ($field->{field} eq FID_TITLE_ID) {
134         $field->{pat} = qr/^($item_title\s*|)$/;
135     }
136 }
137
138 push @tests, $test;
139
140 # Still need tests for
141 #     - renewing a for-fee item
142 #     - patrons that are not permitted to renew
143 #     - renewing item that has reached limit on number of renewals
144
145 SIPtest::run_sip_tests(@tests);
146
147 1;