Line 0
Link Here
|
0 |
- |
1 |
#!/usr/bin/perl |
|
|
2 |
|
3 |
use Modern::Perl; |
4 |
use Test::More tests => 74; |
5 |
use List::Util qw( shuffle ); |
6 |
use MARC::Field; |
7 |
use MARC::Record; |
8 |
|
9 |
use C4::Biblio; |
10 |
use C4::Context; |
11 |
use C4::Items; |
12 |
|
13 |
use_ok('C4::ShelfBrowser'); |
14 |
|
15 |
my $dbh = C4::Context->dbh; |
16 |
$dbh->{AutoCommit} = 0; |
17 |
$dbh->{RaiseError} = 1; |
18 |
|
19 |
$dbh->do(q|DELETE FROM reserves|); |
20 |
$dbh->do(q|DELETE FROM issues|); |
21 |
$dbh->do(q|DELETE FROM items|); |
22 |
|
23 |
my $cn; |
24 |
|
25 |
# 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 |
26 |
my @callnumbers = qw( |
27 |
100.100 |
28 |
150.100 |
29 |
200.100 |
30 |
210.100 |
31 |
300.000 |
32 |
320.000 |
33 |
400.100 |
34 |
410.100 |
35 |
500.100 |
36 |
510.100 |
37 |
520.100 |
38 |
600.000 |
39 |
610.000 |
40 |
700.100 |
41 |
710.100 |
42 |
720.100 |
43 |
730.100 |
44 |
740.100 |
45 |
750.100 |
46 |
); |
47 |
|
48 |
my $record = MARC::Record->new(); |
49 |
$record->append_fields( |
50 |
MARC::Field->new('100', ' ', ' ', a => 'Donald E. Knuth.'), |
51 |
MARC::Field->new('245', ' ', ' ', a => 'The art of computer programming'), |
52 |
); |
53 |
my ( $biblionumber, undef, undef ) = C4::Biblio::AddBiblio($record, ''); |
54 |
|
55 |
for my $callnumber ( shuffle @callnumbers ) { |
56 |
my ( $biblionumber, undef, $itemnumber ) = C4::Items::AddItem({ |
57 |
homebranch => 'CPL', |
58 |
holdingbranch => 'CPL', |
59 |
itemcallnumber => $callnumber, |
60 |
}, $biblionumber); |
61 |
$cn->{$callnumber} = { |
62 |
biblionumber => $biblionumber, |
63 |
itemnumber => $itemnumber, |
64 |
itemcallnumber => $callnumber, |
65 |
} |
66 |
} |
67 |
|
68 |
my $nearby; |
69 |
|
70 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'500.100'}{itemnumber} ); |
71 |
# We have |
72 |
# < 320.000 400.100 410.100 500.100 510.100 520.100 600.000 > |
73 |
# 6 7 8 [9] 10 11 12 |
74 |
# Clicking on previous, we want a link to 150.100 |
75 |
is( $nearby->{prev_item}{itemcallnumber}, '150.100', "Simple case: previous link 1/2" ); |
76 |
is( $nearby->{prev_item}{itemnumber}, $cn->{'150.100'}{itemnumber}, "Simple case: previous link 2/2" ); |
77 |
# Clicking on next, we want a link to 730.100 |
78 |
is( $nearby->{next_item}{itemcallnumber}, '720.100', "Simple case: next link 1/2" ); |
79 |
is( $nearby->{next_item}{itemnumber}, $cn->{'720.100'}{itemnumber}, "Simple case: next link 2/2" ); |
80 |
|
81 |
is( $nearby->{items}[0]{itemcallnumber}, '320.000', "Simple case: item 1"); |
82 |
is( $nearby->{items}[1]{itemcallnumber}, '400.100', "Simple case: item 2"); |
83 |
is( $nearby->{items}[2]{itemcallnumber}, '410.100', "Simple case: item 3"); |
84 |
is( $nearby->{items}[3]{itemcallnumber}, '500.100', "Simple case: item 4"); |
85 |
is( $nearby->{items}[4]{itemcallnumber}, '510.100', "Simple case: item 5"); |
86 |
is( $nearby->{items}[5]{itemcallnumber}, '520.100', "Simple case: item 6"); |
87 |
is( $nearby->{items}[6]{itemcallnumber}, '600.000', "Simple case: item 7"); |
88 |
|
89 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'500.100'}{itemnumber}, 2, 3 ); |
90 |
# We have |
91 |
# < 400.100 410.100 500.100 510.100 520.100 > |
92 |
# 7 8 [9] 10 11 |
93 |
# Clicking on previous, we want a link to 320.000 |
94 |
is( $nearby->{prev_item}{itemcallnumber}, '320.000', "Test gap: previous link 1/2" ); |
95 |
is( $nearby->{prev_item}{itemnumber}, $cn->{'320.000'}{itemnumber}, "Test gap: previous link 2/2" ); |
96 |
# Clicking on next, we want a link to 600.000 |
97 |
is( $nearby->{next_item}{itemcallnumber}, '600.000', "Test gap: next link 1/2" ); |
98 |
is( $nearby->{next_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test gap: next link 2/2" ); |
99 |
|
100 |
is( scalar( @{$nearby->{items}} ), 5, "Test gap: got 5 items" ); |
101 |
is( $nearby->{items}[0]{itemcallnumber}, '400.100', "Test gap: item 1"); |
102 |
is( $nearby->{items}[1]{itemcallnumber}, '410.100', "Test gap: item 2"); |
103 |
is( $nearby->{items}[2]{itemcallnumber}, '500.100', "Test gap: item 3"); |
104 |
is( $nearby->{items}[3]{itemcallnumber}, '510.100', "Test gap: item 4"); |
105 |
is( $nearby->{items}[4]{itemcallnumber}, '520.100', "Test gap: item 5"); |
106 |
|
107 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'300.000'}{itemnumber} ); |
108 |
# We have |
109 |
# < 150.100 200.100 210.100 300.000 320.000 400.100 410.100 > |
110 |
# 2 3 4 [5] 6 7 8 |
111 |
# Clicking on previous, we want a link to 100.100 |
112 |
is( $nearby->{prev_item}{itemcallnumber}, '100.100', "Test start shelf: previous link 1/2" ); |
113 |
is( $nearby->{prev_item}{itemnumber}, $cn->{'100.100'}{itemnumber}, "Test start shelf: previous link 2/2" ); |
114 |
# Clicking on next, we want a link to 600.000 |
115 |
is( $nearby->{next_item}{itemcallnumber}, '600.000', "Test start shelf: next link 1/2" ); |
116 |
is( $nearby->{next_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test start shelf: next link 2/2" ); |
117 |
|
118 |
is( $nearby->{items}[0]{itemcallnumber}, '150.100', "Test start shelf: item 1"); |
119 |
is( $nearby->{items}[1]{itemcallnumber}, '200.100', "Test start shelf: item 2"); |
120 |
is( $nearby->{items}[2]{itemcallnumber}, '210.100', "Test start shelf: item 3"); |
121 |
is( $nearby->{items}[3]{itemcallnumber}, '300.000', "Test start shelf: item 4"); |
122 |
is( $nearby->{items}[4]{itemcallnumber}, '320.000', "Test start shelf: item 5"); |
123 |
is( $nearby->{items}[5]{itemcallnumber}, '400.100', "Test start shelf: item 6"); |
124 |
is( $nearby->{items}[6]{itemcallnumber}, '410.100', "Test start shelf: item 7"); |
125 |
|
126 |
|
127 |
|
128 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'100.100'}{itemnumber} ); |
129 |
# We have |
130 |
# 100.100 150.100 200.100 210.100 > |
131 |
# [1] 2 3 4 |
132 |
# There is no previous link |
133 |
is( $nearby->{prev_item}, undef, "Test first item on a shelf: no previous link" ); |
134 |
# Clicking on next, we want a link to 410.100 |
135 |
is( $nearby->{next_item}{itemcallnumber}, '410.100', "Test first item on a shelf: next link 1/2" ); |
136 |
is( $nearby->{next_item}{itemnumber}, $cn->{'410.100'}{itemnumber}, "Test first item on a shelf: next link 2/2" ); |
137 |
|
138 |
is( scalar( @{$nearby->{items}} ), 4, "Test first item on a shelf: There are 4 items displayed" ); |
139 |
is( $nearby->{items}[0]{itemcallnumber}, '100.100', "Test first item on a shelf: item 1"); |
140 |
is( $nearby->{items}[1]{itemcallnumber}, '150.100', "Test first item on a shelf: item 2"); |
141 |
is( $nearby->{items}[2]{itemcallnumber}, '200.100', "Test first item on a shelf: item 3"); |
142 |
is( $nearby->{items}[3]{itemcallnumber}, '210.100', "Test first item on a shelf: item 4"); |
143 |
|
144 |
|
145 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'150.100'}{itemnumber} ); |
146 |
# We have |
147 |
# 100.100 150.100 200.100 210.100 300.000 > |
148 |
# 1 [2] 3 4 5 |
149 |
# There is no previous link |
150 |
is( $nearby->{prev_item}, undef, "Test second item on a shelf: no previous link" ); |
151 |
# Clicking on next, we want a link to 500.100 |
152 |
is( $nearby->{next_item}{itemcallnumber}, '500.100', "Test second item on a shelf: next link 1/2" ); |
153 |
is( $nearby->{next_item}{itemnumber}, $cn->{'500.100'}{itemnumber}, "Test second item on a shelf: next link 2/2" ); |
154 |
|
155 |
is( scalar( @{$nearby->{items}} ), 5, "Test second item on a shelf: got 5 items" ); |
156 |
is( $nearby->{items}[0]{itemcallnumber}, '100.100', "Test second item on a shelf: item 1"); |
157 |
is( $nearby->{items}[1]{itemcallnumber}, '150.100', "Test second item on a shelf: item 2"); |
158 |
is( $nearby->{items}[2]{itemcallnumber}, '200.100', "Test second item on a shelf: item 3"); |
159 |
is( $nearby->{items}[3]{itemcallnumber}, '210.100', "Test second item on a shelf: item 4"); |
160 |
is( $nearby->{items}[4]{itemcallnumber}, '300.000', "Test second item on a shelf: item 5"); |
161 |
|
162 |
|
163 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'710.100'}{itemnumber} ); |
164 |
# We have |
165 |
# < 600.000 610.000 700.100 710.100 720.100 730.100 740.100 > |
166 |
# 12 13 14 [15] 16 17 18 |
167 |
# Clicking on previous, we want a link to 410.100 |
168 |
is( $nearby->{prev_item}{itemcallnumber}, '410.100', "Test end shelf: previous link 1/2" ); |
169 |
is( $nearby->{prev_item}{itemnumber}, $cn->{'410.100'}{itemnumber}, "Test end shelf: previous link 2/2" ); |
170 |
# Clicking on next, we want a link to 730.100 |
171 |
is( $nearby->{next_item}{itemcallnumber}, '750.100', "Test end shelf: next link is a link to the last item 1/2" ); |
172 |
is( $nearby->{next_item}{itemnumber}, $cn->{'750.100'}{itemnumber}, "Test end shelf: next link is a link to the last item 2/2" ); |
173 |
|
174 |
is( $nearby->{items}[0]{itemcallnumber}, '600.000', "Test end shelf: item 1"); |
175 |
is( $nearby->{items}[1]{itemcallnumber}, '610.000', "Test end shelf: item 2"); |
176 |
is( $nearby->{items}[2]{itemcallnumber}, '700.100', "Test end shelf: item 3"); |
177 |
is( $nearby->{items}[3]{itemcallnumber}, '710.100', "Test end shelf: item 4"); |
178 |
is( $nearby->{items}[4]{itemcallnumber}, '720.100', "Test end shelf: item 5"); |
179 |
is( $nearby->{items}[5]{itemcallnumber}, '730.100', "Test end shelf: item 6"); |
180 |
is( $nearby->{items}[6]{itemcallnumber}, '740.100', "Test end shelf: item 7"); |
181 |
|
182 |
|
183 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'740.100'}{itemnumber} ); |
184 |
# We have |
185 |
# < 710.100 720.100 730.100 740.100 750.100 |
186 |
# 15 16 17 [18] 19 |
187 |
# Clicking on previous, we want a link to |
188 |
is( $nearby->{prev_item}{itemcallnumber}, '520.100', "Test end of the shelf: previous link 1/2" ); |
189 |
is( $nearby->{prev_item}{itemnumber}, $cn->{'520.100'}{itemnumber}, "Test end of the shelf: previous link 2/2" ); |
190 |
# No next link |
191 |
is( $nearby->{next_item}, undef, "Test end of the shelf: no next link" ); |
192 |
|
193 |
is( scalar( @{$nearby->{items}} ), 5, "Test end of the shelf: got 5 items" ); |
194 |
is( $nearby->{items}[0]{itemcallnumber}, '710.100', "Test end of the shelf: item 1"); |
195 |
is( $nearby->{items}[1]{itemcallnumber}, '720.100', "Test end of the shelf: item 2"); |
196 |
is( $nearby->{items}[2]{itemcallnumber}, '730.100', "Test end of the shelf: item 3"); |
197 |
is( $nearby->{items}[3]{itemcallnumber}, '740.100', "Test end of the shelf: item 4"); |
198 |
is( $nearby->{items}[4]{itemcallnumber}, '750.100', "Test end of the shelf: item 5"); |
199 |
|
200 |
$nearby = C4::ShelfBrowser::GetNearbyItems( $cn->{'750.100'}{itemnumber} ); |
201 |
# We have |
202 |
# < 720.100 730.100 740.100 750.100 |
203 |
# 16 17 18 [19] |
204 |
# Clicking on previous, we want a link to |
205 |
is( $nearby->{prev_item}{itemcallnumber}, '600.000', "Test last item of the shelf: previous link 1/2" ); |
206 |
is( $nearby->{prev_item}{itemnumber}, $cn->{'600.000'}{itemnumber}, "Test last item of the shelf: previous link 2/2" ); |
207 |
# No next link |
208 |
is( $nearby->{next_item}, undef, "Test end of the shelf: no next link" ); |
209 |
|
210 |
is( scalar( @{$nearby->{items}} ), 4, "Test last item of the shelf: got 4 items" ); |
211 |
|
212 |
$dbh->rollback; |