Bug 15295: Koha::Libraries - Remove CheckCategoryUnique
[koha.git] / t / db_dependent / Branch.t
1 #!/usr/bin/perl
2
3 # Copyright 2013 Equinox Software, Inc.
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 3 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, see <http://www.gnu.org/licenses>.
18
19 use Modern::Perl;
20
21 use C4::Context;
22 use Data::Dumper;
23
24 use Test::More tests => 34;
25
26 use C4::Branch;
27 use Koha::Libraries;
28 use Koha::LibraryCategories;
29
30 BEGIN {
31     use FindBin;
32     use lib $FindBin::Bin;
33     use_ok('C4::Branch');
34 }
35 can_ok(
36     'C4::Branch', qw(
37       GetBranchCategory
38       GetBranchName
39       GetBranch
40       GetBranches
41       GetBranchesLoop
42       GetBranchDetail
43       get_branchinfos_of
44       ModBranch
45       CheckBranchCategorycode
46       GetBranchInfo
47       GetCategoryTypes
48       GetBranchCategories
49       GetBranchesInCategory
50       ModBranchCategoryInfo
51       mybranch
52       GetBranchesCount)
53 );
54
55
56 # Start transaction
57 my $dbh = C4::Context->dbh;
58 $dbh->{AutoCommit} = 0;
59 $dbh->{RaiseError} = 1;
60
61 # clear the slate
62 $dbh->do('DELETE FROM branchcategories');
63
64 # Start test
65
66 my $count = GetBranchesCount();
67 like( $count, '/^\d+$/', "the count is a number" );
68
69 #add 2 branches
70 my $b1 = {
71     add            => 1,
72     branchcode     => 'BRA',
73     branchname     => 'BranchA',
74     branchaddress1 => 'adr1A',
75     branchaddress2 => 'adr2A',
76     branchaddress3 => 'adr3A',
77     branchzip      => 'zipA',
78     branchcity     => 'cityA',
79     branchstate    => 'stateA',
80     branchcountry  => 'countryA',
81     branchphone    => 'phoneA',
82     branchfax      => 'faxA',
83     branchemail    => 'emailA',
84     branchreplyto  => 'emailreply',
85     branchreturnpath => 'branchreturn',
86     branchurl      => 'urlA',
87     branchip       => 'ipA',
88     branchprinter  => undef,
89     branchnotes    => 'noteA',
90     opac_info      => 'opacA'
91 };
92 my $b2 = {
93     branchcode     => 'BRB',
94     branchname     => 'BranchB',
95     branchaddress1 => 'adr1B',
96     branchaddress2 => 'adr2B',
97     branchaddress3 => 'adr3B',
98     branchzip      => 'zipB',
99     branchcity     => 'cityB',
100     branchstate    => 'stateB',
101     branchcountry  => 'countryB',
102     branchphone    => 'phoneB',
103     branchfax      => 'faxB',
104     branchemail    => 'emailB',
105     branchreplyto  => 'emailreply',
106     branchreturnpath => 'branchreturn',
107     branchurl      => 'urlB',
108     branchip       => 'ipB',
109     branchprinter  => undef,
110     branchnotes    => 'noteB',
111     opac_info      => 'opacB',
112 };
113 ModBranch($b1);
114 is( ModBranch($b2), undef, 'the field add is missing' );
115
116 $b2->{add} = 1;
117 ModBranch($b2);
118 is( GetBranchesCount(), $count + 2, "two branches added" );
119
120 is( Koha::Libraries->find( $b2->{branchcode} )->delete, 1,          "One row affected" );
121 is( GetBranchesCount(),             $count + 1, "branch BRB deleted" );
122
123 #Test GetBranchName
124 is( GetBranchName( $b1->{branchcode} ),
125     $b1->{branchname}, "GetBranchName returns the right name" );
126
127 #Test GetBranchDetail
128 my $branchdetail = GetBranchDetail( $b1->{branchcode} );
129 $branchdetail->{add} = 1;
130 $b1->{issuing}       = undef;    # Not used in DB
131 is_deeply( $branchdetail, $b1, 'branchdetail is right' );
132
133 #Test Getbranches
134 my $branches = GetBranches();
135 is( scalar( keys %$branches ),
136     GetBranchesCount(), "GetBranches returns the right number of branches" );
137
138 #Test ModBranch
139
140 $b1 = {
141     branchcode     => 'BRA',
142     branchname     => 'BranchA modified',
143     branchaddress1 => 'adr1A modified',
144     branchaddress2 => 'adr2A modified',
145     branchaddress3 => 'adr3A modified',
146     branchzip      => 'zipA modified',
147     branchcity     => 'cityA modified',
148     branchstate    => 'stateA modified',
149     branchcountry  => 'countryA modified',
150     branchphone    => 'phoneA modified',
151     branchfax      => 'faxA modified',
152     branchemail    => 'emailA modified',
153     branchreplyto  => 'emailreply modified',
154     branchreturnpath => 'branchreturn modified',
155     branchurl      => 'urlA modified',
156     branchip       => 'ipA modified',
157     branchprinter  => undef,
158     branchnotes    => 'notesA modified',
159     opac_info      => 'opacA modified'
160 };
161
162 ModBranch($b1);
163 is( GetBranchesCount(), $count + 1,
164     "A branch has been modified, no new branch added" );
165 $branchdetail = GetBranchDetail( $b1->{branchcode} );
166 $b1->{issuing} = undef;
167 is_deeply( $branchdetail, $b1 , "GetBranchDetail gives the details of BRA");
168
169 #Test categories
170 my $categories = GetBranchCategories();
171 my $count_cat  = scalar( @$categories );
172
173 my $cat1 = {
174     add              => 1,
175     categorycode     => 'CAT1',
176     categoryname     => 'catname1',
177     codedescription  => 'catdesc1',
178     categorytype     => 'cattype1',
179     show_in_pulldown => 1
180 };
181 my $cat2 = {
182     add              => 1,
183     categorycode     => 'CAT2',
184     categoryname     => 'catname2',
185     categorytype     => 'catype2',
186     codedescription  => 'catdesc2',
187     show_in_pulldown => 1
188 };
189
190 my %new_category = (
191     categorycode     => 'LIBCATCODE',
192     categoryname     => 'library category name',
193     codedescription  => 'library category code description',
194     categorytype     => 'searchdomain',
195     show_in_pulldown => 1,
196 );
197
198 ModBranchCategoryInfo({
199     add => 1,
200     %new_category,
201 });
202
203 ModBranchCategoryInfo($cat1);
204 ModBranchCategoryInfo($cat2);
205
206 $categories = GetBranchCategories();
207 is( scalar( @$categories ), $count_cat + 3, "Two categories added" );
208 delete $cat1->{add};
209 delete $cat2->{add};
210 delete $new_category{add};
211 is_deeply($categories, [ $cat1,$cat2,\%new_category ], 'retrieve all expected library categories (bug 10515)');
212
213 #test GetBranchCategory
214 my $cat1detail = GetBranchCategory( $cat1->{categorycode} );
215 delete $cat1->{add};
216 is_deeply( $cat1detail, $cat1, 'CAT1 details are right' );
217 my $category = GetBranchCategory('LIBCATCODE');
218 is_deeply($category, \%new_category, 'fetched newly added library category');
219
220 my $del = Koha::LibraryCategories->find( $cat2->{categorycode} )->delete;
221 is( $del, 1, 'One row affected' );
222
223 $categories = GetBranchCategories();
224 is( scalar( @$categories ), $count_cat + 2, "Category  CAT2 deleted" );
225
226 my $cat2detail = GetBranchCategory( $cat2->{categorycode} );
227 is( $cat2detail, undef, 'CAT2 doesnt exist' );
228
229 $category = GetBranchCategory();
230 is($category, undef, 'retrieve library category only if code is supplied (bug 10515)');
231
232 #Test CheckBranchCategoryCode
233 my $check1 = CheckBranchCategorycode( $cat1->{categorycode} );
234 my $check2 = CheckBranchCategorycode( $cat2->{categorycode} );
235 like( $check1, '/^\d+$/', "CheckBranchCategorycode returns a number" );
236
237 $b2->{CAT1} = 1;
238 ModBranch($b2);
239 is( GetBranchesCount(), $count + 2, 'BRB added' );
240 is(
241     CheckBranchCategorycode( $cat1->{categorycode} ),
242     $check1 + 1,
243     'BRB added to CAT1'
244 );
245
246 #Test GetBranchInfo
247 my $b1info = GetBranchInfo( $b1->{branchcode} );
248 $b1->{categories} = [];
249 is_deeply( @$b1info[0], $b1, 'BRA has no categories' );
250
251 my $b2info = GetBranchInfo( $b2->{branchcode} );
252 my @cat    = ( $cat1->{categorycode} );
253 delete $b2->{add};
254 delete $b2->{CAT1};
255 $b2->{issuing}    = undef;
256 $b2->{categories} = \@cat;
257 is_deeply( @$b2info[0], $b2, 'BRB has the category CAT1' );
258
259 ModBranchCategoryInfo({add => 1,%$cat2});
260 $categories = GetBranchCategories();
261 is( scalar( @$categories ), $count_cat + 3, "Two categories added" );
262 $b2 = {
263     branchcode     => 'BRB',
264     branchname     => 'BranchB',
265     branchaddress1 => 'adr1B',
266     branchaddress2 => 'adr2B',
267     branchaddress3 => 'adr3B',
268     branchzip      => 'zipB',
269     branchcity     => 'cityB',
270     branchstate    => 'stateB',
271     branchcountry  => 'countryB',
272     branchphone    => 'phoneB',
273     branchfax      => 'faxB',
274     branchemail    => 'emailB',
275     branchreplyto  => 'emailreply',
276     branchreturnpath => 'branchreturn',
277     branchurl      => 'urlB',
278     branchip       => 'ipB',
279     branchprinter  => undef,
280     branchnotes    => 'noteB',
281     opac_info      => 'opacB',
282     CAT1           => 1,
283     CAT2           => 1
284 };
285 ModBranch($b2);
286 $b2info = GetBranchInfo( $b2->{branchcode} );
287 is(
288     CheckBranchCategorycode( $cat2->{categorycode} ),
289     $check2 + 1,
290     'BRB added to CAT2'
291 );
292 push( @cat, $cat2->{categorycode} );
293 delete $b2->{CAT1};
294 delete $b2->{CAT2};
295 $b2->{issuing}    = undef;
296 $b2->{categories} = \@cat;
297 is_deeply( @$b2info[0], $b2, 'BRB has the category CAT1 and CAT2' );
298
299 #Test GetBranchesInCategory
300 my $brCat1 = GetBranchesInCategory( $cat1->{categorycode} );
301 my @b      = ( $b2->{branchcode} );
302 is_deeply( $brCat1, \@b, 'CAT1 has branch BRB' );
303
304 my $b3 = {
305     add            => 1,
306     branchcode     => 'BRC',
307     branchname     => 'BranchC',
308     branchaddress1 => 'adr1C',
309     branchaddress2 => 'adr2C',
310     branchaddress3 => 'adr3C',
311     branchzip      => 'zipC',
312     branchcity     => 'cityC',
313     branchstate    => 'stateC',
314     branchcountry  => 'countryC',
315     branchphone    => 'phoneC',
316     branchfax      => 'faxC',
317     branchemail    => 'emailC',
318     branchurl      => 'urlC',
319     branchip       => 'ipC',
320     branchprinter  => undef,
321     branchnotes    => 'noteC',
322     opac_info      => 'opacC',
323     CAT1           => 1,
324     CAT2           => 1
325 };
326 ModBranch($b3);
327 $brCat1 = GetBranchesInCategory( $cat1->{categorycode} );
328 push( @b, $b3->{branchcode} );
329 is_deeply( $brCat1, \@b, 'CAT1 has branch BRB and BRC' );
330 is(
331     CheckBranchCategorycode( $cat1->{categorycode} ),
332     $check1 + 2,
333     'BRC has been added to CAT1'
334 );
335
336 #Test GetCategoryTypes
337 my @category_types = GetCategoryTypes();
338 is_deeply(\@category_types, [ 'searchdomain', 'properties' ], 'received expected library category types');
339
340 $categories = GetBranchCategories(undef, undef, 'LIBCATCODE');
341 is_deeply($categories, [ {%$cat1}, {%$cat2},{ %new_category, selected => 1 } ], 'retrieve expected, eselected library category (bug 10515)');
342
343 #TODO later: test mybranchine and onlymine
344 # Actually we cannot mock C4::Context->userenv in unit tests
345
346 #Test GetBranchesLoop
347 my $loop = GetBranchesLoop;
348 is( scalar(@$loop), GetBranchesCount(), 'There is the right number of branches' );
349
350 # End transaction
351 $dbh->rollback;
352