4 use Test
::More tests
=> 74;
5 use List
::Util
qw( shuffle );
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({
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" );