Bug 13264: Follow up: in opac_utf8.t insert also delete of biblio
[koha.git] / t / db_dependent / RotatingCollections.t
1 #!/usr/bin/perl
2
3 # This file is part of Koha.
4 #
5 # Koha is free software; you can redistribute it and/or modify it
6 # under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Koha is distributed in the hope that it will be useful, but
11 # WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18 use Modern::Perl;
19
20 use Test::More tests => 52;
21 use C4::Context;
22 use C4::Branch;
23 use C4::Biblio;
24
25 BEGIN {
26     use_ok('C4::RotatingCollections');
27 }
28
29 can_ok(
30     'C4::RotatingCollections',
31     qw(
32       AddItemToCollection
33       CreateCollection
34       DeleteCollection
35       GetCollection
36       GetCollectionItemBranches
37       GetCollections
38       GetItemsInCollection
39       RemoveItemFromCollection
40       TransferCollection
41       UpdateCollection
42       isItemInAnyCollection
43       isItemInThisCollection
44       )
45 );
46
47 #Start transaction
48 my $dbh = C4::Context->dbh;
49 $dbh->{RaiseError} = 1;
50 $dbh->{AutoCommit} = 0;
51
52 #Start Tests
53 $dbh->do(q|DELETE FROM issues |);
54 $dbh->do(q|DELETE FROM borrowers |);
55 $dbh->do(q|DELETE FROM items |);
56 $dbh->do(q|DELETE FROM collections_tracking |);
57 $dbh->do(q|DELETE FROM collections |);
58 $dbh->do(q|DELETE FROM branches |);
59 $dbh->do(q|DELETE FROM categories|);
60 $dbh->do(q|DELETE FROM branchcategories|);
61
62 #Test CreateCollection
63 my $collections     = GetCollections();
64 my $countcollection = scalar(@$collections);
65
66 my ($success,$errorCode,$errorMessage);
67
68 ($success,$errorCode,$errorMessage) = CreateCollection( 'Collection1', 'Description1' );
69 is( $success, 1, "All parameters have been given - Collection 1 added" );
70 ok( !defined $errorCode && !defined $errorMessage,
71     "Collection added, no error code or message");
72 my $collection_id1 = $dbh->last_insert_id( undef, undef, 'collections', undef );
73
74 ($success,$errorCode,$errorMessage) = CreateCollection( 'Collection2', 'Description2' );
75 is( $success, 1, "All parameters have been given - Collection 2 added" );
76 ok( !defined $errorCode && !defined $errorMessage,
77     "Collection added, no error code or message");
78 my $collection_id2 = $dbh->last_insert_id( undef, undef, 'collections', undef );
79
80 $collections = GetCollections();
81 is( scalar(@$collections), $countcollection + 2,
82     "Collection1 and Collection2 have been added" );
83
84 ($success,$errorCode,$errorMessage) = CreateCollection('Collection3');
85 is( $success, 1, "Collections can be created without description" );
86 ok( !defined $errorCode && !defined $errorMessage,
87     "Collection added, no error code or message");
88 my $collection_id3 = $dbh->last_insert_id( undef, undef, 'collections', undef );
89
90 ($success,$errorCode,$errorMessage) = CreateCollection();
91 is( $success, 0, "Title missing, fails to create collection" );
92 is( $errorCode, 1, "Title missing, error code is 1" );
93 is( $errorMessage, 'NO_TITLE', "Title missing, error message is NO_TITLE" );
94
95 $collections = GetCollections();
96 is( scalar(@$collections), $countcollection + 3, "Only one collection added" );
97
98 #FIXME, as the id is auto incremented, two similar Collections (same title /same description) can be created
99 #$collection1 = CreateCollection('Collection1','Description1');
100
101 #Test GetCollections
102 my $collection = GetCollections();
103 is_deeply(
104     $collections,
105     [
106         {
107             colId         => $collection_id1,
108             colTitle      => 'Collection1',
109             colDesc       => 'Description1',
110             colBranchcode => undef
111         },
112         {
113             colId         => $collection_id2,
114             colTitle      => 'Collection2',
115             colDesc       => 'Description2',
116             colBranchcode => undef
117         },
118         {
119             colId         => $collection_id3,
120             colTitle      => 'Collection3',
121             colDesc       => '',
122             colBranchcode => undef
123         }
124
125     ],
126     'All Collections'
127 );
128
129 #Test UpdateCollection
130 ($success,$errorCode,$errorMessage) =
131     UpdateCollection( $collection_id2, 'Collection2bis', undef );
132 is( $success, 1, "UpdateCollection succeeds without description");
133
134 ($success,$errorCode,$errorMessage) =
135     UpdateCollection( $collection_id2, 'Collection2 modified', 'Description2 modified' );
136 is( $success, 1, "Collection2 has been modified" );
137 ok( !defined $errorCode && !defined $errorMessage,
138     "Collection2 modified, no error code or message");
139
140 ($success,$errorCode,$errorMessage) =
141     UpdateCollection( $collection_id2, undef, 'Description' ),
142 ok( !$success, "UpdateCollection fails without title" );
143 is( $errorCode, 2, "Title missing, error code is 2");
144 is( $errorMessage, 'NO_TITLE', "Title missing, error message is NO_TITLE");
145
146 is( UpdateCollection(), 'NO_ID', "UpdateCollection without params" );
147
148 #Test GetCollection
149 my @collection1 = GetCollection($collection_id1);
150 is_deeply(
151     \@collection1,
152     [ $collection_id1, 'Collection1', 'Description1', undef ],
153     "Collection1's informations"
154 );
155 my @collection2 = GetCollection($collection_id2);
156 is_deeply(
157     \@collection2,
158     [ $collection_id2, 'Collection2 modified', 'Description2 modified', undef ],
159     "Collection2's informations"
160 );
161 my @undef_collection = GetCollection();
162 is_deeply(
163     \@undef_collection,
164     [ undef, undef, undef, undef ],
165     "GetCollection without id given"
166 );
167 @undef_collection = GetCollection(-1);
168 is_deeply(
169     \@undef_collection,
170     [ undef, undef, undef, undef ],
171     "GetCollection with a wrong id"
172 );
173
174 #Test TransferCollection
175 my $samplebranch = {
176     add            => 1,
177     branchcode     => 'SAB',
178     branchname     => 'Sample Branch',
179     branchaddress1 => 'sample adr1',
180     branchaddress2 => 'sample adr2',
181     branchaddress3 => 'sample adr3',
182     branchzip      => 'sample zip',
183     branchcity     => 'sample city',
184     branchstate    => 'sample state',
185     branchcountry  => 'sample country',
186     branchphone    => 'sample phone',
187     branchfax      => 'sample fax',
188     branchemail    => 'sample email',
189     branchurl      => 'sample url',
190     branchip       => 'sample ip',
191     branchprinter  => undef,
192     branchnotes    => 'sample note',
193     opac_info      => 'sample opac',
194 };
195 ModBranch($samplebranch);
196 is( TransferCollection( $collection_id1, $samplebranch->{branchcode} ),
197     1, "Collection1 has been transfered in the branch SAB" );
198 @collection1 = GetCollection($collection_id1);
199 is_deeply(
200     \@collection1,
201     [
202         $collection_id1, 'Collection1',
203         'Description1',  $samplebranch->{branchcode}
204     ],
205     "Collection1 belongs to the sample branch (SAB)"
206 );
207 is( TransferCollection, "NO_ID", "TransferCollection without ID" );
208 is(
209     TransferCollection($collection_id1),
210     'NO_BRANCHCODE',
211     "TransferCollection without branchcode"
212 );
213
214 #Test AddItemToCollection
215 my $record = MARC::Record->new();
216 $record->append_fields(
217     MARC::Field->new(
218         '952', '0', '0',
219         a => $samplebranch->{branchcode},
220         b => $samplebranch->{branchcode}
221     )
222 );
223 my ( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio( $record, '', );
224 my @sampleitem1 = C4::Items::AddItem(
225     {
226         barcode        => 1,
227         itemcallnumber => 'callnumber1',
228         homebranch     => $samplebranch->{branchcode},
229         holdingbranch  => $samplebranch->{branchcode}
230     },
231     $biblionumber
232 );
233 my $item_id1    = $sampleitem1[2];
234 my @sampleitem2 = C4::Items::AddItem(
235     {
236         barcode        => 2,
237         itemcallnumber => 'callnumber2',
238         homebranch     => $samplebranch->{branchcode},
239         holdingbranch  => $samplebranch->{branchcode}
240     },
241     $biblionumber
242 );
243 my $item_id2 = $sampleitem2[2];
244 is( AddItemToCollection( $collection_id1, $item_id1 ),
245     1, "Sampleitem1 has been added to Collection1" );
246 is( AddItemToCollection( $collection_id1, $item_id2 ),
247     1, "Sampleitem2 has been added to Collection1" );
248
249 #Test GetItemsInCollection
250 my $itemsincollection1;
251 ($itemsincollection1,$success,$errorCode,$errorMessage) = GetItemsInCollection($collection_id1);
252 is( scalar @$itemsincollection1, 2, "Collection1 has 2 items" );
253 is_deeply(
254     $itemsincollection1,
255     [
256         {
257             title          => undef,
258             itemcallnumber => 'callnumber1',
259             biblionumber   => $biblionumber,
260             barcode        => 1
261         },
262         {
263             title          => undef,
264             itemcallnumber => 'callnumber2',
265             biblionumber   => $biblionumber,
266             barcode        => 2
267         }
268     ],
269     "Collection1 has Item1 and Item2"
270 );
271 ($itemsincollection1,$success,$errorCode,$errorMessage) = GetItemsInCollection();
272 ok( !$success, "GetItemsInCollection fails without a collection ID" );
273 is( $errorCode, 1, "Title missing, error code is 2");
274 is( $errorMessage, 'NO_ID', "Collection ID missing, error message is NO_ID");
275
276 #Test RemoveItemFromCollection
277 is( RemoveItemFromCollection( $collection_id1, $item_id2 ),
278     1, "Item2 has been removed from collection 1" );
279 $itemsincollection1 = GetItemsInCollection($collection_id1);
280 is( scalar @$itemsincollection1, 1, "Collection1 has 1 items" );
281
282 #Test isItemInAnyCollection
283 is( C4::RotatingCollections::isItemInAnyCollection($item_id1),
284     1, "Item1 is in a collection" );
285 is( C4::RotatingCollections::isItemInAnyCollection($item_id2),
286     0, "Item2 is not in a collection" );
287 is( C4::RotatingCollections::isItemInAnyCollection(),
288     0, "isItemInAnyCollection returns 0 if no itemid given " );
289 is( C4::RotatingCollections::isItemInAnyCollection(-1),
290     0, "isItemInAnyCollection returns 0 if a wrong id is given" );
291
292 #Test isItemInThisCollection
293 is(
294     C4::RotatingCollections::isItemInThisCollection(
295         $item_id1, $collection_id1
296     ),
297     1,
298     "Item1 is in the Collection1"
299 );
300 is(
301     C4::RotatingCollections::isItemInThisCollection(
302         $item_id1, $collection_id2
303     ),
304     0,
305     "Item1 is not in the Collection2"
306 );
307 is(
308     C4::RotatingCollections::isItemInThisCollection(
309         $item_id2, $collection_id2
310     ),
311     0,
312     "Item2 is not in the Collection2"
313 );
314 is( C4::RotatingCollections::isItemInThisCollection($collection_id1),
315     0, "isItemInThisCollection returns 0 is ItemId is missing" );
316 is( C4::RotatingCollections::isItemInThisCollection($item_id1),
317     0, "isItemInThisCollection returns 0 is Collectionid if missing" );
318 is( C4::RotatingCollections::isItemInThisCollection(),
319     0, "isItemInThisCollection returns 0 if no params given" );
320
321 #Test DeleteCollection
322 is( DeleteCollection($collection_id2), 1, "Collection2 deleted" );
323 is( DeleteCollection($collection_id1), 1, "Collection1 deleted" );
324 is(
325     DeleteCollection(),
326     'NO_ID',
327     "DeleteCollection without id"
328 );
329 $collections = GetCollections();
330 is(
331     scalar(@$collections),
332     $countcollection + 1,
333     "Two Collections have been deleted"
334 );
335
336 #End transaction
337 $dbh->rollback;
338
339 1;