Bug 21036: Remove odd number of elements warnings from AuthoritiesMarc.pm
[koha.git] / t / Budgets / CanUserModifyBudget.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4 use Test::More tests => 134;
5
6 use C4::Budgets;
7
8 # Avoid "redefined subroutine" warnings
9 local $SIG{__WARN__} = sub { warn $_[0] unless $_[0] =~ /redefined/ };
10 *C4::Budgets::GetBudgetUsers = \&Mock_GetBudgetUsers;
11 *C4::Context::userenv = \&Mock_userenv;
12
13 my %budgetusers = (
14     1 => [],
15     2 => [1],
16     3 => [2],
17     4 => [3],
18     5 => [],
19     6 => [1],
20     7 => [2],
21     8 => [3],
22     9 => [],
23     10 => [1],
24     11 => [2],
25     12 => [3],
26     13 => [],
27     14 => [1],
28     15 => [2],
29     16 => [3],
30 );
31
32 my $borrower1 = {
33     borrowernumber => 1
34 };
35 my $borrower2 = {
36     borrowernumber => 2
37 };
38
39 my $budget1 = {
40     budget_id => 1,
41     budget_permission => 0,
42     budget_owner_id => undef,
43     budget_branchcode => undef,
44 };
45 my $budget2 = {
46     budget_id => 2,
47     budget_permission => 0,
48     budget_owner_id => undef,
49     budget_branchcode => 'B1',
50 };
51 my $budget3 = {
52     budget_id => 3,
53     budget_permission => 0,
54     budget_owner_id => 1,
55     budget_branchcode => undef,
56 };
57 my $budget4 = {
58     budget_id => 4,
59     budget_permission => 0,
60     budget_owner_id => 1,
61     budget_branchcode => 'B1',
62 };
63 my $budget5 = {
64     budget_id => 5,
65     budget_permission => 1,
66     budget_owner_id => undef,
67     budget_branchcode => undef,
68 };
69 my $budget6 = {
70     budget_id => 6,
71     budget_permission => 1,
72     budget_owner_id => undef,
73     budget_branchcode => 'B1',
74 };
75 my $budget7 = {
76     budget_id => 7,
77     budget_permission => 1,
78     budget_owner_id => 1,
79     budget_branchcode => undef,
80 };
81 my $budget8 = {
82     budget_id => 8,
83     budget_permission => 1,
84     budget_owner_id => 1,
85     budget_branchcode => 'B1',
86 };
87 my $budget9 = {
88     budget_id => 9,
89     budget_permission => 2,
90     budget_owner_id => undef,
91     budget_branchcode => undef,
92 };
93 my $budget10 = {
94     budget_id => 10,
95     budget_permission => 2,
96     budget_owner_id => undef,
97     budget_branchcode => 'B1',
98 };
99 my $budget11 = {
100     budget_id => 11,
101     budget_permission => 2,
102     budget_owner_id => 1,
103     budget_branchcode => undef,
104 };
105 my $budget12 = {
106     budget_id => 12,
107     budget_permission => 2,
108     budget_owner_id => 1,
109     budget_branchcode => 'B1',
110 };
111 my $budget13 = {
112     budget_id => 13,
113     budget_permission => 3,
114     budget_owner_id => undef,
115     budget_branchcode => undef,
116 };
117 my $budget14 = {
118     budget_id => 14,
119     budget_permission => 3,
120     budget_owner_id => undef,
121     budget_branchcode => 'B1',
122 };
123 my $budget15 = {
124     budget_id => 15,
125     budget_permission => 3,
126     budget_owner_id => 1,
127     budget_branchcode => undef,
128 };
129 my $budget16 = {
130     budget_id => 16,
131     budget_permission => 3,
132     budget_owner_id => 1,
133     budget_branchcode => 'B1',
134 };
135
136 my $userenv = {};
137
138 ok( !CanUserModifyBudget( 0, undef, {} ), "CanUserModifyBudget evaluates to false if DB user is passed" );
139
140 ok (CanUserModifyBudget($borrower1, $budget1, {superlibrarian => 1}));
141 ok (CanUserModifyBudget($borrower1, $budget1, {
142     acquisition => {
143         budget_manage_all => 1
144     }
145 }));
146 ok (CanUserModifyBudget($borrower1, $budget1, {acquisition => 1}));
147
148 ok (!CanUserModifyBudget($borrower1, $budget1, {}));
149 ok (!CanUserModifyBudget($borrower1, $budget1, {acquisition => 0}));
150
151 my $flags = {acquisition => {budget_modify => 1}};
152
153 $userenv->{branch} = 'B1';
154
155 # Restriction is 'none'
156 ok (CanUserModifyBudget($borrower1, $budget1, $flags));
157 ok (CanUserModifyBudget($borrower1, $budget2, $flags));
158 ok (CanUserModifyBudget($borrower1, $budget3, $flags));
159 ok (CanUserModifyBudget($borrower1, $budget4, $flags));
160 ok (CanUserModifyBudget($borrower2, $budget1, $flags));
161 ok (CanUserModifyBudget($borrower2, $budget2, $flags));
162 ok (CanUserModifyBudget($borrower2, $budget3, $flags));
163 ok (CanUserModifyBudget($borrower2, $budget4, $flags));
164
165 # Restriction is 'owner'
166 ok (CanUserModifyBudget($borrower1, $budget5, $flags));
167 ok (CanUserModifyBudget($borrower1, $budget6, $flags));
168 ok (CanUserModifyBudget($borrower1, $budget7, $flags));
169 ok (CanUserModifyBudget($borrower1, $budget8, $flags));
170 ok (CanUserModifyBudget($borrower2, $budget5, $flags));
171 ok (CanUserModifyBudget($borrower2, $budget6, $flags));
172 ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
173 ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
174
175 # Restriction is 'owner, users and library'
176 ok (CanUserModifyBudget($borrower1, $budget9, $flags));
177 ok (CanUserModifyBudget($borrower1, $budget10, $flags));
178 ok (CanUserModifyBudget($borrower1, $budget11, $flags));
179 ok (CanUserModifyBudget($borrower1, $budget12, $flags));
180 ok (CanUserModifyBudget($borrower2, $budget9, $flags));
181 ok (CanUserModifyBudget($borrower2, $budget10, $flags));
182 ok (CanUserModifyBudget($borrower2, $budget11, $flags));
183 ok (CanUserModifyBudget($borrower2, $budget12, $flags));
184
185 # Restriction is 'owner and users'
186 ok (!CanUserModifyBudget($borrower1, $budget13, $flags)); # no owner, no user
187 ok (CanUserModifyBudget($borrower1, $budget14, $flags));
188 ok (CanUserModifyBudget($borrower1, $budget15, $flags));
189 ok (CanUserModifyBudget($borrower1, $budget16, $flags));
190 ok (!CanUserModifyBudget($borrower2, $budget13, $flags)); # no owner, no user
191 ok (!CanUserModifyBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1
192 ok (CanUserModifyBudget($borrower2, $budget15, $flags));
193 ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
194
195
196 $userenv->{branch} = 'B2';
197
198 # Restriction is 'none'
199 ok (CanUserModifyBudget($borrower1, $budget1, $flags));
200 ok (CanUserModifyBudget($borrower1, $budget2, $flags));
201 ok (CanUserModifyBudget($borrower1, $budget3, $flags));
202 ok (CanUserModifyBudget($borrower1, $budget4, $flags));
203 ok (CanUserModifyBudget($borrower2, $budget1, $flags));
204 ok (CanUserModifyBudget($borrower2, $budget2, $flags));
205 ok (CanUserModifyBudget($borrower2, $budget3, $flags));
206 ok (CanUserModifyBudget($borrower2, $budget4, $flags));
207
208 # Restriction is 'owner'
209 ok (CanUserModifyBudget($borrower1, $budget5, $flags));
210 ok (CanUserModifyBudget($borrower1, $budget6, $flags));
211 ok (CanUserModifyBudget($borrower1, $budget7, $flags));
212 ok (CanUserModifyBudget($borrower1, $budget8, $flags));
213 ok (CanUserModifyBudget($borrower2, $budget5, $flags));
214 ok (CanUserModifyBudget($borrower2, $budget6, $flags));
215 ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
216 ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
217
218 # Restriction is 'owner, users and library'
219 ok (CanUserModifyBudget($borrower1, $budget9, $flags));
220 ok (CanUserModifyBudget($borrower1, $budget10, $flags));
221 ok (CanUserModifyBudget($borrower1, $budget11, $flags));
222 ok (CanUserModifyBudget($borrower1, $budget12, $flags));
223 ok (CanUserModifyBudget($borrower2, $budget9, $flags));
224 ok (!CanUserModifyBudget($borrower2, $budget10, $flags)); # Limited to library B1
225 ok (CanUserModifyBudget($borrower2, $budget11, $flags));
226 ok (!CanUserModifyBudget($borrower2, $budget12, $flags));
227
228 # Restriction is 'owner and users'
229 ok (!CanUserModifyBudget($borrower1, $budget13, $flags)); # No owner, no user
230 ok (CanUserModifyBudget($borrower1, $budget14, $flags));
231 ok (CanUserModifyBudget($borrower1, $budget15, $flags));
232 ok (CanUserModifyBudget($borrower1, $budget16, $flags));
233 ok (!CanUserModifyBudget($borrower2, $budget13, $flags)); # No owner, no user
234 ok (!CanUserModifyBudget($borrower2, $budget14, $flags)); # No owner and user list contains borrower1
235 ok (CanUserModifyBudget($borrower2, $budget15, $flags));
236 ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
237
238
239 # Same tests as above, without budget_modify permission
240 # All tests should failed
241 $flags = {acquisition => {order_manage => 1}};
242
243 $userenv->{branch} = 'B1';
244
245 # Restriction is 'none'
246 ok (!CanUserModifyBudget($borrower1, $budget1, $flags));
247 ok (!CanUserModifyBudget($borrower1, $budget2, $flags));
248 ok (!CanUserModifyBudget($borrower1, $budget3, $flags));
249 ok (!CanUserModifyBudget($borrower1, $budget4, $flags));
250 ok (!CanUserModifyBudget($borrower2, $budget1, $flags));
251 ok (!CanUserModifyBudget($borrower2, $budget2, $flags));
252 ok (!CanUserModifyBudget($borrower2, $budget3, $flags));
253 ok (!CanUserModifyBudget($borrower2, $budget4, $flags));
254
255 # Restriction is 'owner'
256 ok (!CanUserModifyBudget($borrower1, $budget5, $flags));
257 ok (!CanUserModifyBudget($borrower1, $budget6, $flags));
258 ok (!CanUserModifyBudget($borrower1, $budget7, $flags));
259 ok (!CanUserModifyBudget($borrower1, $budget8, $flags));
260 ok (!CanUserModifyBudget($borrower2, $budget5, $flags));
261 ok (!CanUserModifyBudget($borrower2, $budget6, $flags));
262 ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
263 ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
264
265 # Restriction is 'owner, users and library'
266 ok (!CanUserModifyBudget($borrower1, $budget9, $flags));
267 ok (!CanUserModifyBudget($borrower1, $budget10, $flags));
268 ok (!CanUserModifyBudget($borrower1, $budget11, $flags));
269 ok (!CanUserModifyBudget($borrower1, $budget12, $flags));
270 ok (!CanUserModifyBudget($borrower2, $budget9, $flags));
271 ok (!CanUserModifyBudget($borrower2, $budget10, $flags));
272 ok (!CanUserModifyBudget($borrower2, $budget11, $flags));
273 ok (!CanUserModifyBudget($borrower2, $budget12, $flags));
274
275 # Restriction is 'owner and users'
276 ok (!CanUserModifyBudget($borrower1, $budget13, $flags));
277 ok (!CanUserModifyBudget($borrower1, $budget14, $flags));
278 ok (!CanUserModifyBudget($borrower1, $budget15, $flags));
279 ok (!CanUserModifyBudget($borrower1, $budget16, $flags));
280 ok (!CanUserModifyBudget($borrower2, $budget13, $flags));
281 ok (!CanUserModifyBudget($borrower2, $budget14, $flags));
282 ok (!CanUserModifyBudget($borrower2, $budget15, $flags));
283 ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
284
285
286 $userenv->{branch} = 'B2';
287
288 # Restriction is 'none'
289 ok (!CanUserModifyBudget($borrower1, $budget1, $flags));
290 ok (!CanUserModifyBudget($borrower1, $budget2, $flags));
291 ok (!CanUserModifyBudget($borrower1, $budget3, $flags));
292 ok (!CanUserModifyBudget($borrower1, $budget4, $flags));
293 ok (!CanUserModifyBudget($borrower2, $budget1, $flags));
294 ok (!CanUserModifyBudget($borrower2, $budget2, $flags));
295 ok (!CanUserModifyBudget($borrower2, $budget3, $flags));
296 ok (!CanUserModifyBudget($borrower2, $budget4, $flags));
297
298 # Restriction is 'owner'
299 ok (!CanUserModifyBudget($borrower1, $budget5, $flags));
300 ok (!CanUserModifyBudget($borrower1, $budget6, $flags));
301 ok (!CanUserModifyBudget($borrower1, $budget7, $flags));
302 ok (!CanUserModifyBudget($borrower1, $budget8, $flags));
303 ok (!CanUserModifyBudget($borrower2, $budget5, $flags));
304 ok (!CanUserModifyBudget($borrower2, $budget6, $flags));
305 ok (!CanUserModifyBudget($borrower2, $budget7, $flags));
306 ok (!CanUserModifyBudget($borrower2, $budget8, $flags));
307
308 # Restriction is 'owner, users and library'
309 ok (!CanUserModifyBudget($borrower1, $budget9, $flags));
310 ok (!CanUserModifyBudget($borrower1, $budget10, $flags));
311 ok (!CanUserModifyBudget($borrower1, $budget11, $flags));
312 ok (!CanUserModifyBudget($borrower1, $budget12, $flags));
313 ok (!CanUserModifyBudget($borrower2, $budget9, $flags));
314 ok (!CanUserModifyBudget($borrower2, $budget10, $flags));
315 ok (!CanUserModifyBudget($borrower2, $budget11, $flags));
316 ok (!CanUserModifyBudget($borrower2, $budget12, $flags));
317
318 # Restriction is 'owner and users'
319 ok (!CanUserModifyBudget($borrower1, $budget13, $flags));
320 ok (!CanUserModifyBudget($borrower1, $budget14, $flags));
321 ok (!CanUserModifyBudget($borrower1, $budget15, $flags));
322 ok (!CanUserModifyBudget($borrower1, $budget16, $flags));
323 ok (!CanUserModifyBudget($borrower2, $budget13, $flags));
324 ok (!CanUserModifyBudget($borrower2, $budget14, $flags));
325 ok (!CanUserModifyBudget($borrower2, $budget15, $flags));
326 ok (!CanUserModifyBudget($borrower2, $budget16, $flags));
327
328
329 # Mocked subs
330
331 # C4::Acquisition::GetBudgetUsers
332 sub Mock_GetBudgetUsers {
333     my ($budget_id) = @_;
334
335     return @{ $budgetusers{$budget_id} };
336 }
337
338 # C4::Context->userenv
339 sub Mock_userenv {
340     return $userenv;
341 }