Bug 25791: Remove win.print()
[koha.git] / t / db_dependent / ShelfBrowser.t
blobbf5906fa1951246d7914c85f8aeb332caf6087b4
1 #!/usr/bin/perl
3 use Modern::Perl;
4 use Test::More tests => 74;
5 use List::Util qw( shuffle );
6 use MARC::Field;
7 use MARC::Record;
9 use C4::Context;
10 use C4::Items;
11 use C4::Biblio;
12 use Koha::Database;
14 use t::lib::TestBuilder;
16 use_ok('C4::ShelfBrowser');
18 my $schema = Koha::Database->schema;
19 $schema->storage->txn_begin;
20 my $builder = t::lib::TestBuilder->new;
21 my $dbh = C4::Context->dbh;
23 $dbh->do(q|DELETE FROM reserves|);
24 $dbh->do(q|DELETE FROM issues|);
25 $dbh->do(q|DELETE FROM items|);
27 my $library = $builder->build({
28 source => 'Branch',
29 });
31 my $cn;
33 # 100.100 150.100 200.100 210.100 300.000 320.000 400.100 410.100 500.100 510.100 520.100 600.000 610.000 700.100 710.100 720.100 730.100 740.100 750.100
34 my @callnumbers = qw(
35 100.100
36 150.100
37 200.100
38 210.100
39 300.000
40 320.000
41 400.100
42 410.100
43 500.100
44 510.100
45 520.100
46 600.000
47 610.000
48 700.100
49 710.100
50 720.100
51 730.100
52 740.100
53 750.100
56 my $record = MARC::Record->new();
57 $record->append_fields(
58 MARC::Field->new('100', ' ', ' ', a => 'Donald E. Knuth.'),
59 MARC::Field->new('245', ' ', ' ', a => 'The art of computer programming'),
61 my ( $biblionumber ) = C4::Biblio::AddBiblio($record, '');
63 for my $callnumber ( shuffle @callnumbers ) {
64 my $itemnumber = $builder->build_sample_item(
66 biblionumber => $biblionumber,
67 library => $library->{branchcode},
68 itemcallnumber => $callnumber,
70 )->itemnumber;
71 $cn->{$callnumber} = {
72 biblionumber => $biblionumber,
73 itemnumber => $itemnumber,
74 itemcallnumber => $callnumber,
78 my $nearby;
80 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'500.100'}{itemnumber} );
81 # We have
82 # < 320.000 400.100 410.100 500.100 510.100 520.100 600.000 >
83 # 6 7 8 [9] 10 11 12
84 # Clicking on previous, we want a link to 150.100
85 is( $nearby->{prev_item}{itemcallnumber}, '150.100', "Simple case: previous link 1/2" );
86 is( $nearby->{prev_item}{itemnumber}, $cn->{'150.100'}{itemnumber}, "Simple case: previous link 2/2" );
87 # Clicking on next, we want a link to 730.100
88 is( $nearby->{next_item}{itemcallnumber}, '720.100', "Simple case: next link 1/2" );
89 is( $nearby->{next_item}{itemnumber}, $cn->{'720.100'}{itemnumber}, "Simple case: next link 2/2" );
91 is( $nearby->{items}[0]{itemcallnumber}, '320.000', "Simple case: item 1");
92 is( $nearby->{items}[1]{itemcallnumber}, '400.100', "Simple case: item 2");
93 is( $nearby->{items}[2]{itemcallnumber}, '410.100', "Simple case: item 3");
94 is( $nearby->{items}[3]{itemcallnumber}, '500.100', "Simple case: item 4");
95 is( $nearby->{items}[4]{itemcallnumber}, '510.100', "Simple case: item 5");
96 is( $nearby->{items}[5]{itemcallnumber}, '520.100', "Simple case: item 6");
97 is( $nearby->{items}[6]{itemcallnumber}, '600.000', "Simple case: item 7");
99 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'500.100'}{itemnumber}, 2, 3 );
100 # We have
101 # < 400.100 410.100 500.100 510.100 520.100 >
102 # 7 8 [9] 10 11
103 # Clicking on previous, we want a link to 320.000
104 is( $nearby->{prev_item}{itemcallnumber}, '320.000', "Test gap: previous link 1/2" );
105 is( $nearby->{prev_item}{itemnumber}, $cn->{'320.000'}{itemnumber}, "Test gap: previous link 2/2" );
106 # Clicking on next, we want a link to 600.000
107 is( $nearby->{next_item}{itemcallnumber}, '600.000', "Test gap: next link 1/2" );
108 is( $nearby->{next_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test gap: next link 2/2" );
110 is( scalar( @{$nearby->{items}} ), 5, "Test gap: got 5 items" );
111 is( $nearby->{items}[0]{itemcallnumber}, '400.100', "Test gap: item 1");
112 is( $nearby->{items}[1]{itemcallnumber}, '410.100', "Test gap: item 2");
113 is( $nearby->{items}[2]{itemcallnumber}, '500.100', "Test gap: item 3");
114 is( $nearby->{items}[3]{itemcallnumber}, '510.100', "Test gap: item 4");
115 is( $nearby->{items}[4]{itemcallnumber}, '520.100', "Test gap: item 5");
117 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'300.000'}{itemnumber} );
118 # We have
119 # < 150.100 200.100 210.100 300.000 320.000 400.100 410.100 >
120 # 2 3 4 [5] 6 7 8
121 # Clicking on previous, we want a link to 100.100
122 is( $nearby->{prev_item}{itemcallnumber}, '100.100', "Test start shelf: previous link 1/2" );
123 is( $nearby->{prev_item}{itemnumber}, $cn->{'100.100'}{itemnumber}, "Test start shelf: previous link 2/2" );
124 # Clicking on next, we want a link to 600.000
125 is( $nearby->{next_item}{itemcallnumber}, '600.000', "Test start shelf: next link 1/2" );
126 is( $nearby->{next_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test start shelf: next link 2/2" );
128 is( $nearby->{items}[0]{itemcallnumber}, '150.100', "Test start shelf: item 1");
129 is( $nearby->{items}[1]{itemcallnumber}, '200.100', "Test start shelf: item 2");
130 is( $nearby->{items}[2]{itemcallnumber}, '210.100', "Test start shelf: item 3");
131 is( $nearby->{items}[3]{itemcallnumber}, '300.000', "Test start shelf: item 4");
132 is( $nearby->{items}[4]{itemcallnumber}, '320.000', "Test start shelf: item 5");
133 is( $nearby->{items}[5]{itemcallnumber}, '400.100', "Test start shelf: item 6");
134 is( $nearby->{items}[6]{itemcallnumber}, '410.100', "Test start shelf: item 7");
138 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'100.100'}{itemnumber} );
139 # We have
140 # 100.100 150.100 200.100 210.100 >
141 # [1] 2 3 4
142 # There is no previous link
143 is( $nearby->{prev_item}, undef, "Test first item on a shelf: no previous link" );
144 # Clicking on next, we want a link to 410.100
145 is( $nearby->{next_item}{itemcallnumber}, '410.100', "Test first item on a shelf: next link 1/2" );
146 is( $nearby->{next_item}{itemnumber}, $cn->{'410.100'}{itemnumber}, "Test first item on a shelf: next link 2/2" );
148 is( scalar( @{$nearby->{items}} ), 4, "Test first item on a shelf: There are 4 items displayed" );
149 is( $nearby->{items}[0]{itemcallnumber}, '100.100', "Test first item on a shelf: item 1");
150 is( $nearby->{items}[1]{itemcallnumber}, '150.100', "Test first item on a shelf: item 2");
151 is( $nearby->{items}[2]{itemcallnumber}, '200.100', "Test first item on a shelf: item 3");
152 is( $nearby->{items}[3]{itemcallnumber}, '210.100', "Test first item on a shelf: item 4");
155 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'150.100'}{itemnumber} );
156 # We have
157 # 100.100 150.100 200.100 210.100 300.000 >
158 # 1 [2] 3 4 5
159 # There is no previous link
160 is( $nearby->{prev_item}, undef, "Test second item on a shelf: no previous link" );
161 # Clicking on next, we want a link to 500.100
162 is( $nearby->{next_item}{itemcallnumber}, '500.100', "Test second item on a shelf: next link 1/2" );
163 is( $nearby->{next_item}{itemnumber}, $cn->{'500.100'}{itemnumber}, "Test second item on a shelf: next link 2/2" );
165 is( scalar( @{$nearby->{items}} ), 5, "Test second item on a shelf: got 5 items" );
166 is( $nearby->{items}[0]{itemcallnumber}, '100.100', "Test second item on a shelf: item 1");
167 is( $nearby->{items}[1]{itemcallnumber}, '150.100', "Test second item on a shelf: item 2");
168 is( $nearby->{items}[2]{itemcallnumber}, '200.100', "Test second item on a shelf: item 3");
169 is( $nearby->{items}[3]{itemcallnumber}, '210.100', "Test second item on a shelf: item 4");
170 is( $nearby->{items}[4]{itemcallnumber}, '300.000', "Test second item on a shelf: item 5");
173 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'710.100'}{itemnumber} );
174 # We have
175 # < 600.000 610.000 700.100 710.100 720.100 730.100 740.100 >
176 # 12 13 14 [15] 16 17 18
177 # Clicking on previous, we want a link to 410.100
178 is( $nearby->{prev_item}{itemcallnumber}, '410.100', "Test end shelf: previous link 1/2" );
179 is( $nearby->{prev_item}{itemnumber}, $cn->{'410.100'}{itemnumber}, "Test end shelf: previous link 2/2" );
180 # Clicking on next, we want a link to 730.100
181 is( $nearby->{next_item}{itemcallnumber}, '750.100', "Test end shelf: next link is a link to the last item 1/2" );
182 is( $nearby->{next_item}{itemnumber}, $cn->{'750.100'}{itemnumber}, "Test end shelf: next link is a link to the last item 2/2" );
184 is( $nearby->{items}[0]{itemcallnumber}, '600.000', "Test end shelf: item 1");
185 is( $nearby->{items}[1]{itemcallnumber}, '610.000', "Test end shelf: item 2");
186 is( $nearby->{items}[2]{itemcallnumber}, '700.100', "Test end shelf: item 3");
187 is( $nearby->{items}[3]{itemcallnumber}, '710.100', "Test end shelf: item 4");
188 is( $nearby->{items}[4]{itemcallnumber}, '720.100', "Test end shelf: item 5");
189 is( $nearby->{items}[5]{itemcallnumber}, '730.100', "Test end shelf: item 6");
190 is( $nearby->{items}[6]{itemcallnumber}, '740.100', "Test end shelf: item 7");
193 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'740.100'}{itemnumber} );
194 # We have
195 # < 710.100 720.100 730.100 740.100 750.100
196 # 15 16 17 [18] 19
197 # Clicking on previous, we want a link to
198 is( $nearby->{prev_item}{itemcallnumber}, '520.100', "Test end of the shelf: previous link 1/2" );
199 is( $nearby->{prev_item}{itemnumber}, $cn->{'520.100'}{itemnumber}, "Test end of the shelf: previous link 2/2" );
200 # No next link
201 is( $nearby->{next_item}, undef, "Test end of the shelf: no next link" );
203 is( scalar( @{$nearby->{items}} ), 5, "Test end of the shelf: got 5 items" );
204 is( $nearby->{items}[0]{itemcallnumber}, '710.100', "Test end of the shelf: item 1");
205 is( $nearby->{items}[1]{itemcallnumber}, '720.100', "Test end of the shelf: item 2");
206 is( $nearby->{items}[2]{itemcallnumber}, '730.100', "Test end of the shelf: item 3");
207 is( $nearby->{items}[3]{itemcallnumber}, '740.100', "Test end of the shelf: item 4");
208 is( $nearby->{items}[4]{itemcallnumber}, '750.100', "Test end of the shelf: item 5");
210 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'750.100'}{itemnumber} );
211 # We have
212 # < 720.100 730.100 740.100 750.100
213 # 16 17 18 [19]
214 # Clicking on previous, we want a link to
215 is( $nearby->{prev_item}{itemcallnumber}, '600.000', "Test last item of the shelf: previous link 1/2" );
216 is( $nearby->{prev_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test last item of the shelf: previous link 2/2" );
217 # No next link
218 is( $nearby->{next_item}, undef, "Test end of the shelf: no next link" );
220 is( scalar( @{$nearby->{items}} ), 4, "Test last item of the shelf: got 4 items" );