View | Details | Raw Unified | Return to bug 10895
Collapse All | Expand All

(-)a/t/db_dependent/GetHiddenItems_PatronCategory.t (-1 / +281 lines)
Line 0 Link Here
0
- 
1
#!/usr/bin/perl
2
3
# This file is part of Koha.
4
#
5
# Copyright (C) 2013  Mark Tompsett
6
#
7
# This Koha test module is intended for Patron Category
8
# tweaks to the OpacHiddenItems system preference.
9
# Related to Bug 10859
10
#
11
# Koha is free software; you can redistribute it and/or modify it
12
# under the terms of the GNU General Public License as published by
13
# the Free Software Foundation; either version 3 of the License, or
14
# (at your option) any later version.
15
#
16
# Koha is distributed in the hope that it will be useful, but
17
# WITHOUT ANY WARRANTY; without even the implied warranty of
18
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
# GNU General Public License for more details.
20
#
21
# You should have received a copy of the GNU General Public License
22
# along with Koha; if not, see <http://www.gnu.org/licenses>.
23
#
24
25
use Modern::Perl;
26
use MARC::Record;
27
use Carp;
28
use C4::Biblio;
29
use C4::Context;
30
use C4::Members;
31
use Data::Dumper;
32
use YAML qw/Load/; # due to bug 10872 not being in master yet.
33
use Test::More tests => 22;
34
35
BEGIN {
36
    use_ok('C4::Items');
37
}
38
39
my $dbh = C4::Context->dbh;
40
# Start transaction
41
$dbh->{AutoCommit} = 0;
42
$dbh->{RaiseError} = 1;
43
44
# Helper biblio.
45
my ($bibnum, $bibitemnum) = get_biblio();
46
47
# Add dummy branches.
48
$dbh->do('INSERT INTO branches (branchcode,branchname) VALUES ("LIB1","LIB1");');
49
$dbh->do('INSERT INTO branches (branchcode,branchname) VALUES ("LIB2","LIB2");');
50
51
# Add dummy patron categories
52
my $sql = "SELECT categorycode FROM categories WHERE categorycode='PT';";
53
my $sth = $dbh->prepare($sql);
54
$sth->execute();
55
my $categorycode = $sth->fetchrow;
56
if (!$categorycode) {
57
    $dbh->do("INSERT INTO categories (categorycode, description) VALUES ('PT','Generic Patron Code');");
58
}
59
60
$sql = "SELECT categorycode FROM categories WHERE categorycode='SS';";
61
$sth = $dbh->prepare($sql);
62
$sth->execute();
63
$categorycode = $sth->fetchrow;
64
if (!$categorycode) {
65
    $dbh->do("INSERT INTO categories (categorycode, description) VALUES ('SS','Sample Staff Code');");
66
}
67
68
$sql = "SELECT categorycode FROM categories WHERE categorycode='SPT';";
69
$sth = $dbh->prepare($sql);
70
$sth->execute();
71
$categorycode = $sth->fetchrow;
72
if (!$categorycode) {
73
    $dbh->do("INSERT INTO categories (categorycode, description) VALUES ('SPT','Sample Patron Code');");
74
}
75
76
# Add same item for two branches.
77
my ($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'LIB1', holdingbranch => 'LIB1' } , $bibnum);
78
cmp_ok($item_bibnum, '==', $bibnum, "LIB1 Item linked to correct biblionumber.");
79
cmp_ok($item_bibitemnum, '==', $bibitemnum, "LIB1 Item linked to correct biblioitemnumber.");
80
($item_bibnum, $item_bibitemnum, $itemnumber) = AddItem({ homebranch => 'LIB2', holdingbranch => 'LIB2' } , $bibnum);
81
cmp_ok($item_bibnum, '==', $bibnum, "LIB2 Item linked to correct biblionumber.");
82
cmp_ok($item_bibitemnum, '==', $bibitemnum, "LIB2 Item linked to correct biblioitemnumber.");
83
84
# Add dummy patron.
85
C4::Context->set_preference('PatronSelfRegistrationDefaultCategory','PT');
86
my %borrower;
87
$borrower{'surname'} = 'Borrower';
88
$borrower{'firstname'} = 'Sample';
89
$borrower{'address'} = '123 Bogus Street';
90
$borrower{'city'} = 'Bogusville';
91
$borrower{'branchcode'} = 'LIB1';
92
$borrower{'categorycode'} = 'PT';
93
$borrower{'zipcode'} = 'H0H 0H0';
94
$borrower{'userid'} = 'Sample.Borrower';
95
$borrower{'email'} = 'santa@northpole.com';
96
$borrower{'phone'} = '967-1111';
97
print Dumper(\%borrower) . "\n";
98
my ( $borrowernumber, $password ) = C4::Members::AddMember_Opac(%borrower) or
99
                                    croak "AddMember_Opac failed.\n";
100
diag("Sample Borrower added.\n");
101
print STDERR "CHECK: $borrowernumber\n$password\n";
102
103
# Get the member's card number.
104
$sql = "SELECT cardnumber FROM borrowers WHERE borrowernumber=?;";
105
$sth = $dbh->prepare($sql);
106
$sth->execute($borrowernumber);
107
my $cardnumber = $sth->fetchrow;
108
109
# Get an array of hashes of Item information.
110
my @all_items = C4::Items::GetItemsInfo($bibnum);
111
diag($all_items[0]->{'itemnumber'} . " - " . $all_items[0]->{'homebranch'});
112
diag($all_items[1]->{'itemnumber'} . " - " . $all_items[1]->{'homebranch'});
113
114
# Hide everything for this record.
115
C4::Context->set_preference('OpacHiddenItems',"homebranch: [LIB1,LIB2]\n");
116
117
# Check what's hidden when a user isn't logged in.
118
my @items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
119
cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly.");
120
diag(join(',',@items2hide));
121
122
diag("Borrower number: $borrowernumber");
123
# Set up dummy patron as if logged in.
124
my @USERENV = (
125
    $borrowernumber,
126
    'Sample.Borrower',
127
    $cardnumber,
128
    'Sample',
129
    'Borrower',
130
    'LIB1',
131
    'LIB1',
132
    0,
133
);
134
C4::Context->_new_userenv('DUMMY_SESSION_ID');
135
C4::Context->set_userenv( @USERENV );
136
diag("Sample Borrower environment variables set up.\n");
137
138
# 4 blocks of 4 cases: 'SPT','SS','','SS|SPT'
139
C4::Context->set_preference('PatronSingleBranch','SPT');
140
C4::Context->set_preference('PatronEveryBranch','SPT');
141
$sql = "UPDATE borrowers SET categorycode='SPT' WHERE borrowernumber=?;";
142
$sth = $dbh->prepare($sql);
143
$sth->execute($borrowernumber);
144
145
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
146
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
147
diag("PatronSingleBranch: SPT\nPatronEveryBranch: SPT\n");
148
diag(join(',',@items2hide));
149
150
# PatronSingleBranch toggle
151
C4::Context->set_preference('PatronSingleBranch','SPT');
152
C4::Context->set_preference('PatronEveryBranch','SS');
153
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
154
cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly.");
155
diag("PatronSingleBranch: SPT\nPatronEveryBranch: SS\n");
156
diag(join(',',@items2hide));
157
158
# PatronSingleBranch toggle
159
C4::Context->set_preference('PatronSingleBranch','SPT');
160
C4::Context->set_preference('PatronEveryBranch','');
161
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
162
cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly.");
163
diag("PatronSingleBranch: SPT\nPatronEveryBranch: ''\n");
164
diag(join(',',@items2hide));
165
166
# PatronSingleBranch toggle
167
C4::Context->set_preference('PatronSingleBranch','SPT');
168
C4::Context->set_preference('PatronEveryBranch','SS|SPT');
169
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
170
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
171
diag("PatronSingleBranch: SPT\nPatronEveryBranch: SS|SPT\n");
172
diag(join(',',@items2hide));
173
174
# PatronSingleBranch toggle
175
C4::Context->set_preference('PatronSingleBranch','SS');
176
C4::Context->set_preference('PatronEveryBranch','SPT');
177
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
178
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
179
diag("PatronSingleBranch: SS\nPatronEveryBranch: SPT\n");
180
diag(join(',',@items2hide));
181
182
# PatronSingleBranch toggle
183
C4::Context->set_preference('PatronSingleBranch','SS');
184
C4::Context->set_preference('PatronEveryBranch','SS');
185
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
186
cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly.");
187
diag("PatronSingleBranch: SS\nPatronEveryBranch: SS\n");
188
diag(join(',',@items2hide));
189
190
# PatronSingleBranch toggle
191
C4::Context->set_preference('PatronSingleBranch','SS');
192
C4::Context->set_preference('PatronEveryBranch','');
193
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
194
cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly.");
195
diag("PatronSingleBranch: SS\nPatronEveryBranch: ''\n");
196
diag(join(',',@items2hide));
197
198
# PatronSingleBranch toggle
199
C4::Context->set_preference('PatronSingleBranch','SS');
200
C4::Context->set_preference('PatronEveryBranch','SS|SPT');
201
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
202
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
203
diag("PatronSingleBranch: SS\nPatronEveryBranch: SS|SPT\n");
204
diag(join(',',@items2hide));
205
206
# PatronSingleBranch toggle
207
C4::Context->set_preference('PatronSingleBranch','');
208
C4::Context->set_preference('PatronEveryBranch','SPT');
209
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
210
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
211
diag("PatronSingleBranch: ''\nPatronEveryBranch: SPT\n");
212
diag(join(',',@items2hide));
213
214
# PatronSingleBranch toggle
215
C4::Context->set_preference('PatronSingleBranch','');
216
C4::Context->set_preference('PatronEveryBranch','SS');
217
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
218
cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly.");
219
diag("PatronSingleBranch: ''\nPatronEveryBranch: SS\n");
220
diag(join(',',@items2hide));
221
222
# PatronSingleBranch toggle
223
C4::Context->set_preference('PatronSingleBranch','');
224
C4::Context->set_preference('PatronEveryBranch','');
225
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
226
cmp_ok( scalar @items2hide, '==', 2, "OpacHiddenItems hid everything correctly.");
227
diag("PatronSingleBranch: ''\nPatronEveryBranch: ''\n");
228
diag(join(',',@items2hide));
229
230
# PatronSingleBranch toggle
231
C4::Context->set_preference('PatronSingleBranch','');
232
C4::Context->set_preference('PatronEveryBranch','SS|SPT');
233
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
234
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
235
diag("PatronSingleBranch: ''\nPatronEveryBranch: SS|SPT\n");
236
diag(join(',',@items2hide));
237
238
# PatronSingleBranch toggle
239
C4::Context->set_preference('PatronSingleBranch','SS|SPT');
240
C4::Context->set_preference('PatronEveryBranch','SPT');
241
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
242
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
243
diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: SPT\n");
244
diag(join(',',@items2hide));
245
246
# PatronSingleBranch toggle
247
C4::Context->set_preference('PatronSingleBranch','SS|SPT');
248
C4::Context->set_preference('PatronEveryBranch','SS');
249
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
250
cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly.");
251
diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: SS\n");
252
diag(join(',',@items2hide));
253
254
# PatronSingleBranch toggle
255
C4::Context->set_preference('PatronSingleBranch','SS|SPT');
256
C4::Context->set_preference('PatronEveryBranch','');
257
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
258
cmp_ok( scalar @items2hide, '==', 1, "OpacHiddenItems hid LIB2 correctly.");
259
diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: ''\n");
260
diag(join(',',@items2hide));
261
262
# PatronSingleBranch toggle
263
C4::Context->set_preference('PatronSingleBranch','SS|SPT');
264
C4::Context->set_preference('PatronEveryBranch','SS|SPT');
265
@items2hide = C4::Items::GetHiddenItemnumbers(@all_items);
266
cmp_ok( scalar @items2hide, '==', 0, "OpacHiddenItems unhid everything correctly.");
267
diag("PatronSingleBranch: SS|SPT\nPatronEveryBranch: SS|SPT\n");
268
diag(join(',',@items2hide));
269
270
# Nothing wrong with being explicit. :)
271
$dbh->rollback();
272
273
# Helper method to set up a Biblio.
274
sub get_biblio {
275
    my $bib = MARC::Record->new();
276
    $bib->append_fields(
277
        MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'),
278
        MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'),
279
    );
280
    return ($bibnum, $bibitemnum) = AddBiblio($bib, '');
281
}

Return to bug 10895