4 use Test::More tests => 74;
5 use List::Util qw( shuffle );
11 use C4::Biblio qw( AddBiblio );
14 use t::lib::TestBuilder;
16 use_ok('C4::ShelfBrowser', qw( GetNearbyItems ));
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({
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
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,
71 $cn->{$callnumber} = {
72 biblionumber => $biblionumber,
73 itemnumber => $itemnumber,
74 itemcallnumber => $callnumber,
80 $nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'500.100'}{itemnumber} );
82 # < 320.000 400.100 410.100 500.100 510.100 520.100 600.000 >
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 );
101 # < 400.100 410.100 500.100 510.100 520.100 >
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} );
119 # < 150.100 200.100 210.100 300.000 320.000 400.100 410.100 >
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} );
140 # 100.100 150.100 200.100 210.100 >
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} );
157 # 100.100 150.100 200.100 210.100 300.000 >
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} );
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} );
195 # < 710.100 720.100 730.100 740.100 750.100
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" );
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} );
212 # < 720.100 730.100 740.100 750.100
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" );
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" );