4 use Test::More tests => 86;
7 my $dbh = C4::Context->dbh;
8 $dbh->{RaiseError} = 1;
9 $dbh->{AutoCommit} = 0;
11 use C4::Serials::Frequency;
14 # TEST CASE 1 - 1 issue per day, no irregularities
16 description => "One issue per day",
21 my $id = AddSubscriptionFrequency($frequency);
25 firstacquidate => '1970-01-01',
27 countissuesperunit => 1,
29 my $publisheddate = $subscription->{firstacquidate};
31 $publisheddate = GetNextDate($subscription, $publisheddate);
32 is($publisheddate, '1970-01-02');
33 $publisheddate = GetNextDate($subscription, $publisheddate);
34 is($publisheddate, '1970-01-03');
35 $publisheddate = GetNextDate($subscription, $publisheddate);
36 is($publisheddate, '1970-01-04');
38 # TEST CASE 2 - 1 issue per day, irregularities
41 firstacquidate => '1970-01-01',
42 irregularity => '2;4', # Skip the second and fourth issues
43 countissuesperunit => 1,
45 $publisheddate = $subscription->{firstacquidate};
46 $publisheddate = GetNextDate($subscription, $publisheddate);
47 is($publisheddate, '1970-01-03');
48 $publisheddate = GetNextDate($subscription, $publisheddate);
49 is($publisheddate, '1970-01-05');
50 $publisheddate = GetNextDate($subscription, $publisheddate);
51 is($publisheddate, '1970-01-06');
53 # TEST CASE 3 - 2 issues per day, no irregularity
54 $id = AddSubscriptionFrequency({
55 description => "Two issues per day",
62 firstacquidate => '1970-01-01',
64 countissuesperunit => 1,
66 $publisheddate = $subscription->{firstacquidate};
67 $publisheddate = GetNextDate($subscription, $publisheddate);
68 is($publisheddate, '1970-01-01');
69 $publisheddate = GetNextDate($subscription, $publisheddate);
70 is($publisheddate, '1970-01-02');
71 $publisheddate = GetNextDate($subscription, $publisheddate);
72 is($publisheddate, '1970-01-02');
73 $publisheddate = GetNextDate($subscription, $publisheddate);
74 is($publisheddate, '1970-01-03');
76 # TEST CASE 4 - 2 issues per day, irregularities
79 firstacquidate => '1970-01-01',
80 irregularity => '3;5;6',
81 countissuesperunit => 1,
83 $publisheddate = $subscription->{firstacquidate};
84 $publisheddate = GetNextDate($subscription, $publisheddate);
85 is($publisheddate, '1970-01-01');
86 $publisheddate = GetNextDate($subscription, $publisheddate);
87 is($publisheddate, '1970-01-02');
88 $publisheddate = GetNextDate($subscription, $publisheddate);
89 is($publisheddate, '1970-01-04');
90 $publisheddate = GetNextDate($subscription, $publisheddate);
91 is($publisheddate, '1970-01-04');
92 $publisheddate = GetNextDate($subscription, $publisheddate);
93 is($publisheddate, '1970-01-05');
95 # TEST CASE 5 - 1 issue every 2 days, no irregularity
96 $id = AddSubscriptionFrequency({
97 description => "one issue every two days",
104 firstacquidate => '1970-01-01',
106 countissuesperunit => 1,
108 $publisheddate = $subscription->{firstacquidate};
109 $publisheddate = GetNextDate($subscription, $publisheddate);
110 is($publisheddate, '1970-01-03');
111 $publisheddate = GetNextDate($subscription, $publisheddate);
112 is($publisheddate, '1970-01-05');
114 # TEST CASE 6 - 1 issue every 2 days, irregularities
117 firstacquidate => '1970-01-01',
119 countissuesperunit => 1,
121 $publisheddate = $subscription->{firstacquidate};
122 $publisheddate = GetNextDate($subscription, $publisheddate);
123 is($publisheddate, '1970-01-03');
124 $publisheddate = GetNextDate($subscription, $publisheddate);
125 is($publisheddate, '1970-01-07');
126 $publisheddate = GetNextDate($subscription, $publisheddate);
127 is($publisheddate, '1970-01-09');
129 # TEST CASE 7 - 1 issue per week, no irregularity
130 $id = AddSubscriptionFrequency({
131 description => "one issue per week",
138 firstacquidate => '1970-01-01',
140 countissuesperunit => 1,
142 $publisheddate = $subscription->{firstacquidate};
143 $publisheddate = GetNextDate($subscription, $publisheddate);
144 is($publisheddate, '1970-01-08');
145 $publisheddate = GetNextDate($subscription, $publisheddate);
146 is($publisheddate, '1970-01-15');
148 # TEST CASE 8 - 1 issue per week, irregularities
151 firstacquidate => '1970-01-01',
153 countissuesperunit => 1,
155 $publisheddate = $subscription->{firstacquidate};
156 $publisheddate = GetNextDate($subscription, $publisheddate);
157 is($publisheddate, '1970-01-08');
158 $publisheddate = GetNextDate($subscription, $publisheddate);
159 is($publisheddate, '1970-01-22');
160 $publisheddate = GetNextDate($subscription, $publisheddate);
161 is($publisheddate, '1970-01-29');
163 # TEST CASE 9 - 1 issue every 2 weeks, no irregularity
164 $id = AddSubscriptionFrequency({
165 description => "one issue every 2 weeks",
172 firstacquidate => '1970-01-01',
174 countissuesperunit => 1,
176 $publisheddate = $subscription->{firstacquidate};
177 $publisheddate = GetNextDate($subscription, $publisheddate);
178 is($publisheddate, '1970-01-15');
179 $publisheddate = GetNextDate($subscription, $publisheddate);
180 is($publisheddate, '1970-01-29');
181 $publisheddate = GetNextDate($subscription, $publisheddate);
182 is($publisheddate, '1970-02-12');
184 # TEST CASE 10 - 1 issue every 2 weeks, irregularities
187 firstacquidate => '1970-01-01',
189 countissuesperunit => 1,
191 $publisheddate = $subscription->{firstacquidate};
192 $publisheddate = GetNextDate($subscription, $publisheddate);
193 is($publisheddate, '1970-01-15');
194 $publisheddate = GetNextDate($subscription, $publisheddate);
195 is($publisheddate, '1970-02-12');
196 $publisheddate = GetNextDate($subscription, $publisheddate);
197 is($publisheddate, '1970-02-26');
199 # TEST CASE 11 - 2 issues per week, no irregularity
200 $id = AddSubscriptionFrequency({
201 description => "two issues per week",
208 firstacquidate => '1970-01-01',
210 countissuesperunit => 1,
212 $publisheddate = $subscription->{firstacquidate};
213 $publisheddate = GetNextDate($subscription, $publisheddate);
214 is($publisheddate, '1970-01-01');
215 # when more than 1 issue per week, date is automatically set to monday
216 # because we can't guess the right day
217 $publisheddate = GetNextDate($subscription, $publisheddate);
218 is($publisheddate, '1970-01-05');
219 $publisheddate = GetNextDate($subscription, $publisheddate);
220 is($publisheddate, '1970-01-05');
221 $publisheddate = GetNextDate($subscription, $publisheddate);
222 is($publisheddate, '1970-01-12');
224 # TEST CASE 12 - 2 issues per week, irregularities
227 firstacquidate => '1970-01-01',
228 irregularity => '3;5;6',
229 countissuesperunit => 1,
231 $publisheddate = $subscription->{firstacquidate};
232 $publisheddate = GetNextDate($subscription, $publisheddate);
233 is($publisheddate, '1970-01-01');
234 $publisheddate = GetNextDate($subscription, $publisheddate);
235 is($publisheddate, '1970-01-05');
236 $publisheddate = GetNextDate($subscription, $publisheddate);
237 is($publisheddate, '1970-01-19');
238 $publisheddate = GetNextDate($subscription, $publisheddate);
239 is($publisheddate, '1970-01-19');
240 $publisheddate = GetNextDate($subscription, $publisheddate);
241 is($publisheddate, '1970-01-26');
243 # TEST CASE 13 - 1 issue per month, no irregularity
244 $id = AddSubscriptionFrequency({
245 description => "1 issue per month",
252 firstacquidate => '1970-01-01',
254 countissuesperunit => 1,
256 $publisheddate = $subscription->{firstacquidate};
257 $publisheddate = GetNextDate($subscription, $publisheddate);
258 is($publisheddate, '1970-02-01');
259 $publisheddate = GetNextDate($subscription, $publisheddate);
260 is($publisheddate, '1970-03-01');
261 $publisheddate = GetNextDate($subscription, $publisheddate);
262 is($publisheddate, '1970-04-01');
264 # TEST CASE 14 - 1 issue per month, irregularities
267 firstacquidate => '1970-01-01',
268 irregularity => '2;4',
269 countissuesperunit => 1,
271 $publisheddate = $subscription->{firstacquidate};
272 $publisheddate = GetNextDate($subscription, $publisheddate);
273 is($publisheddate, '1970-03-01');
274 $publisheddate = GetNextDate($subscription, $publisheddate);
275 is($publisheddate, '1970-05-01');
276 $publisheddate = GetNextDate($subscription, $publisheddate);
277 is($publisheddate, '1970-06-01');
279 # TEST CASE 15 - 1 issue every 2 months, no irregularity
280 $id = AddSubscriptionFrequency({
281 description => "1 issue every 2 months",
288 firstacquidate => '1970-01-01',
290 countissuesperunit => 1,
292 $publisheddate = $subscription->{firstacquidate};
293 $publisheddate = GetNextDate($subscription, $publisheddate);
294 is($publisheddate, '1970-03-01');
295 $publisheddate = GetNextDate($subscription, $publisheddate);
296 is($publisheddate, '1970-05-01');
297 $publisheddate = GetNextDate($subscription, $publisheddate);
298 is($publisheddate, '1970-07-01');
300 # TEST CASE 16 - 1 issue every 2 months, irregularities
303 firstacquidate => '1970-01-01',
304 irregularity => '2;3',
305 countissuesperunit => 1,
307 $publisheddate = $subscription->{firstacquidate};
308 $publisheddate = GetNextDate($subscription, $publisheddate);
309 is($publisheddate, '1970-07-01');
310 $publisheddate = GetNextDate($subscription, $publisheddate);
311 is($publisheddate, '1970-09-01');
312 $publisheddate = GetNextDate($subscription, $publisheddate);
313 is($publisheddate, '1970-11-01');
315 # TEST CASE 17 - 2 issues per month, no irregularity
316 $id = AddSubscriptionFrequency({
317 description => "2 issues per month",
324 firstacquidate => '1970-01-01',
326 countissuesperunit => 1,
328 $publisheddate = $subscription->{firstacquidate};
329 $publisheddate = GetNextDate($subscription, $publisheddate);
330 is($publisheddate, '1970-01-01');
331 $publisheddate = GetNextDate($subscription, $publisheddate);
332 is($publisheddate, '1970-02-01');
333 $publisheddate = GetNextDate($subscription, $publisheddate);
334 is($publisheddate, '1970-02-01');
335 $publisheddate = GetNextDate($subscription, $publisheddate);
336 is($publisheddate, '1970-03-01');
338 # TEST CASE 18 - 2 issues per month, irregularities
341 firstacquidate => '1970-01-01',
342 irregularity => '3;5;6',
343 countissuesperunit => 1,
345 $publisheddate = $subscription->{firstacquidate};
346 $publisheddate = GetNextDate($subscription, $publisheddate);
347 is($publisheddate, '1970-01-01');
348 $publisheddate = GetNextDate($subscription, $publisheddate);
349 is($publisheddate, '1970-02-01');
350 $publisheddate = GetNextDate($subscription, $publisheddate);
351 is($publisheddate, '1970-04-01');
352 $publisheddate = GetNextDate($subscription, $publisheddate);
353 is($publisheddate, '1970-04-01');
354 $publisheddate = GetNextDate($subscription, $publisheddate);
355 is($publisheddate, '1970-05-01');
357 # TEST CASE 19 - 1 issue per year, no irregularity
358 $id = AddSubscriptionFrequency({
359 description => "1 issue per year",
366 firstacquidate => '1970-01-01',
368 countissuesperunit => 1,
370 $publisheddate = $subscription->{firstacquidate};
371 $publisheddate = GetNextDate($subscription, $publisheddate);
372 is($publisheddate, '1971-01-01');
373 $publisheddate = GetNextDate($subscription, $publisheddate);
374 is($publisheddate, '1972-01-01');
375 $publisheddate = GetNextDate($subscription, $publisheddate);
376 is($publisheddate, '1973-01-01');
378 # TEST CASE 20 - 1 issue per year, irregularities
381 firstacquidate => '1970-01-01',
382 irregularity => '2;4',
383 countissuesperunit => 1,
385 $publisheddate = $subscription->{firstacquidate};
386 $publisheddate = GetNextDate($subscription, $publisheddate);
387 is($publisheddate, '1972-01-01');
388 $publisheddate = GetNextDate($subscription, $publisheddate);
389 is($publisheddate, '1974-01-01');
390 $publisheddate = GetNextDate($subscription, $publisheddate);
391 is($publisheddate, '1975-01-01');
393 # TEST CASE 21 - 1 issue every 2 years, no irregularity
394 $id = AddSubscriptionFrequency({
395 description => "1 issue every 2 years",
402 firstacquidate => '1970-01-01',
404 countissuesperunit => 1,
406 $publisheddate = $subscription->{firstacquidate};
407 $publisheddate = GetNextDate($subscription, $publisheddate);
408 is($publisheddate, '1972-01-01');
409 $publisheddate = GetNextDate($subscription, $publisheddate);
410 is($publisheddate, '1974-01-01');
411 $publisheddate = GetNextDate($subscription, $publisheddate);
412 is($publisheddate, '1976-01-01');
414 # TEST CASE 22 - 1 issue every 2 years, irregularities
417 firstacquidate => '1970-01-01',
418 irregularity => '2;4',
419 countissuesperunit => 1,
421 $publisheddate = $subscription->{firstacquidate};
422 $publisheddate = GetNextDate($subscription, $publisheddate);
423 is($publisheddate, '1974-01-01');
424 $publisheddate = GetNextDate($subscription, $publisheddate);
425 is($publisheddate, '1978-01-01');
426 $publisheddate = GetNextDate($subscription, $publisheddate);
427 is($publisheddate, '1980-01-01');
429 # TEST CASE 23 - 2 issues per year, no irregularity
430 $id = AddSubscriptionFrequency({
431 description => "1 issue every 2 years",
438 firstacquidate => '1970-01-01',
440 countissuesperunit => 1,
442 $publisheddate = $subscription->{firstacquidate};
443 $publisheddate = GetNextDate($subscription, $publisheddate);
444 is($publisheddate, '1970-01-01');
445 $publisheddate = GetNextDate($subscription, $publisheddate);
446 is($publisheddate, '1971-01-01');
447 $publisheddate = GetNextDate($subscription, $publisheddate);
448 is($publisheddate, '1971-01-01');
449 $publisheddate = GetNextDate($subscription, $publisheddate);
450 is($publisheddate, '1972-01-01');
452 # TEST CASE 24 - 2 issues per year, irregularities
455 firstacquidate => '1970-01-01',
456 irregularity => '3;5;6',
457 countissuesperunit => 1,
459 $publisheddate = $subscription->{firstacquidate};
460 $publisheddate = GetNextDate($subscription, $publisheddate);
461 is($publisheddate, '1970-01-01');
462 $publisheddate = GetNextDate($subscription, $publisheddate);
463 is($publisheddate, '1971-01-01');
464 $publisheddate = GetNextDate($subscription, $publisheddate);
465 is($publisheddate, '1973-01-01');
466 $publisheddate = GetNextDate($subscription, $publisheddate);
467 is($publisheddate, '1973-01-01');
468 $publisheddate = GetNextDate($subscription, $publisheddate);
469 is($publisheddate, '1974-01-01');
471 # TEST CASE 25 - Irregular
472 $id = AddSubscriptionFrequency({
473 description => "Irregular",
480 firstacquidate => '1970-01-01',
482 countissuesperunit => 1,
484 $publisheddate = $subscription->{firstacquidate};
485 # GetNextDate always return undef if subscription is irregular
486 $publisheddate = GetNextDate($subscription, $publisheddate);
487 is($publisheddate, undef);
489 # GetNextDate returns undef if one of two first parameters is undef
490 $publisheddate = GetNextDate($subscription, undef);
491 is($publisheddate, undef);
492 $publisheddate = GetNextDate(undef, $subscription->{firstacquidate});
493 is($publisheddate, undef);
494 $publisheddate = GetNextDate(undef, undef);
495 is($publisheddate, undef);