4 use Test::More tests => 96;
7 my $dbh = C4::Context->dbh;
8 $dbh->{RaiseError} = 1;
9 $dbh->{AutoCommit} = 0;
11 use C4::Serials::Frequency;
14 # TEST CASE - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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 - 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-03');
215 # when more than 1 issue per week, date is automatically set to the same day of
216 # week as firstacquidate
217 $publisheddate = GetNextDate($subscription, $publisheddate);
218 is($publisheddate, '1970-01-08');
219 $publisheddate = GetNextDate($subscription, $publisheddate);
220 is($publisheddate, '1970-01-10');
221 $publisheddate = GetNextDate($subscription, $publisheddate);
222 is($publisheddate, '1970-01-15');
224 # TEST CASE - 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-03');
234 $publisheddate = GetNextDate($subscription, $publisheddate);
235 is($publisheddate, '1970-01-10');
236 $publisheddate = GetNextDate($subscription, $publisheddate);
237 is($publisheddate, '1970-01-22');
238 $publisheddate = GetNextDate($subscription, $publisheddate);
239 is($publisheddate, '1970-01-24');
240 $publisheddate = GetNextDate($subscription, $publisheddate);
241 is($publisheddate, '1970-01-29');
243 # TEST CASE - 6 issues per week, no irregularity
244 $id = AddSubscriptionFrequency({
245 description => "six issues per week",
252 firstacquidate => '1970-01-06',
254 countissuesperunit => 1,
256 $publisheddate = $subscription->{firstacquidate};
257 $publisheddate = GetNextDate($subscription, $publisheddate);
258 is($publisheddate, '1970-01-07');
259 $publisheddate = GetNextDate($subscription, $publisheddate);
260 is($publisheddate, '1970-01-08');
261 $publisheddate = GetNextDate($subscription, $publisheddate);
262 is($publisheddate, '1970-01-09');
263 $publisheddate = GetNextDate($subscription, $publisheddate);
264 is($publisheddate, '1970-01-10');
265 $publisheddate = GetNextDate($subscription, $publisheddate);
266 is($publisheddate, '1970-01-11');
267 $publisheddate = GetNextDate($subscription, $publisheddate);
268 is($publisheddate, '1970-01-13');
270 # TEST CASE - 6 issues per week, irregularities
273 firstacquidate => '1970-01-06',
274 irregularity => '3;5;6',
275 countissuesperunit => 1,
277 $publisheddate = $subscription->{firstacquidate};
278 $publisheddate = GetNextDate($subscription, $publisheddate);
279 is($publisheddate, '1970-01-07');
280 $publisheddate = GetNextDate($subscription, $publisheddate);
281 is($publisheddate, '1970-01-09');
282 $publisheddate = GetNextDate($subscription, $publisheddate);
283 is($publisheddate, '1970-01-13');
284 $publisheddate = GetNextDate($subscription, $publisheddate);
285 is($publisheddate, '1970-01-14');
287 # TEST CASE - 1 issue per month, no irregularity
288 $id = AddSubscriptionFrequency({
289 description => "1 issue per month",
296 firstacquidate => '1970-01-01',
298 countissuesperunit => 1,
300 $publisheddate = $subscription->{firstacquidate};
301 $publisheddate = GetNextDate($subscription, $publisheddate);
302 is($publisheddate, '1970-02-01');
303 $publisheddate = GetNextDate($subscription, $publisheddate);
304 is($publisheddate, '1970-03-01');
305 $publisheddate = GetNextDate($subscription, $publisheddate);
306 is($publisheddate, '1970-04-01');
308 # TEST CASE - 1 issue per month, irregularities
311 firstacquidate => '1970-01-01',
312 irregularity => '2;4',
313 countissuesperunit => 1,
315 $publisheddate = $subscription->{firstacquidate};
316 $publisheddate = GetNextDate($subscription, $publisheddate);
317 is($publisheddate, '1970-03-01');
318 $publisheddate = GetNextDate($subscription, $publisheddate);
319 is($publisheddate, '1970-05-01');
320 $publisheddate = GetNextDate($subscription, $publisheddate);
321 is($publisheddate, '1970-06-01');
323 # TEST CASE - 1 issue every 2 months, no irregularity
324 $id = AddSubscriptionFrequency({
325 description => "1 issue every 2 months",
332 firstacquidate => '1970-01-01',
334 countissuesperunit => 1,
336 $publisheddate = $subscription->{firstacquidate};
337 $publisheddate = GetNextDate($subscription, $publisheddate);
338 is($publisheddate, '1970-03-01');
339 $publisheddate = GetNextDate($subscription, $publisheddate);
340 is($publisheddate, '1970-05-01');
341 $publisheddate = GetNextDate($subscription, $publisheddate);
342 is($publisheddate, '1970-07-01');
344 # TEST CASE - 1 issue every 2 months, irregularities
347 firstacquidate => '1970-01-01',
348 irregularity => '2;3',
349 countissuesperunit => 1,
351 $publisheddate = $subscription->{firstacquidate};
352 $publisheddate = GetNextDate($subscription, $publisheddate);
353 is($publisheddate, '1970-07-01');
354 $publisheddate = GetNextDate($subscription, $publisheddate);
355 is($publisheddate, '1970-09-01');
356 $publisheddate = GetNextDate($subscription, $publisheddate);
357 is($publisheddate, '1970-11-01');
359 # TEST CASE - 2 issues per month, no irregularity
360 $id = AddSubscriptionFrequency({
361 description => "2 issues per month",
368 firstacquidate => '1970-01-01',
370 countissuesperunit => 1,
372 $publisheddate = $subscription->{firstacquidate};
373 $publisheddate = GetNextDate($subscription, $publisheddate);
374 is($publisheddate, '1970-01-16', 'January has 31 days');
375 $publisheddate = GetNextDate($subscription, $publisheddate);
376 is($publisheddate, '1970-02-01');
377 $publisheddate = GetNextDate($subscription, $publisheddate);
378 is($publisheddate, '1970-02-15', 'February has only 28 days');
379 $publisheddate = GetNextDate($subscription, $publisheddate);
380 is($publisheddate, '1970-03-01');
382 # TEST CASE - 2 issues per month, irregularities
385 firstacquidate => '1970-01-01',
386 irregularity => '3;5;6',
387 countissuesperunit => 1,
389 $publisheddate = $subscription->{firstacquidate};
390 $publisheddate = GetNextDate($subscription, $publisheddate);
391 is($publisheddate, '1970-01-16', 'January has 31 days');
392 $publisheddate = GetNextDate($subscription, $publisheddate);
393 is($publisheddate, '1970-02-15', 'February has only 28 days');
394 $publisheddate = GetNextDate($subscription, $publisheddate);
395 is($publisheddate, '1970-04-01');
396 $publisheddate = GetNextDate($subscription, $publisheddate);
397 is($publisheddate, '1970-04-16', 'April has 30 days');
398 $publisheddate = GetNextDate($subscription, $publisheddate);
399 is($publisheddate, '1970-05-01');
401 # TEST CASE - 1 issue per year, no irregularity
402 $id = AddSubscriptionFrequency({
403 description => "1 issue per year",
410 firstacquidate => '1970-01-01',
412 countissuesperunit => 1,
414 $publisheddate = $subscription->{firstacquidate};
415 $publisheddate = GetNextDate($subscription, $publisheddate);
416 is($publisheddate, '1971-01-01');
417 $publisheddate = GetNextDate($subscription, $publisheddate);
418 is($publisheddate, '1972-01-01');
419 $publisheddate = GetNextDate($subscription, $publisheddate);
420 is($publisheddate, '1973-01-01');
422 # TEST CASE - 1 issue per year, irregularities
425 firstacquidate => '1970-01-01',
426 irregularity => '2;4',
427 countissuesperunit => 1,
429 $publisheddate = $subscription->{firstacquidate};
430 $publisheddate = GetNextDate($subscription, $publisheddate);
431 is($publisheddate, '1972-01-01');
432 $publisheddate = GetNextDate($subscription, $publisheddate);
433 is($publisheddate, '1974-01-01');
434 $publisheddate = GetNextDate($subscription, $publisheddate);
435 is($publisheddate, '1975-01-01');
437 # TEST CASE - 1 issue every 2 years, no irregularity
438 $id = AddSubscriptionFrequency({
439 description => "1 issue every 2 years",
446 firstacquidate => '1970-01-01',
448 countissuesperunit => 1,
450 $publisheddate = $subscription->{firstacquidate};
451 $publisheddate = GetNextDate($subscription, $publisheddate);
452 is($publisheddate, '1972-01-01');
453 $publisheddate = GetNextDate($subscription, $publisheddate);
454 is($publisheddate, '1974-01-01');
455 $publisheddate = GetNextDate($subscription, $publisheddate);
456 is($publisheddate, '1976-01-01');
458 # TEST CASE - 1 issue every 2 years, irregularities
461 firstacquidate => '1970-01-01',
462 irregularity => '2;4',
463 countissuesperunit => 1,
465 $publisheddate = $subscription->{firstacquidate};
466 $publisheddate = GetNextDate($subscription, $publisheddate);
467 is($publisheddate, '1974-01-01');
468 $publisheddate = GetNextDate($subscription, $publisheddate);
469 is($publisheddate, '1978-01-01');
470 $publisheddate = GetNextDate($subscription, $publisheddate);
471 is($publisheddate, '1980-01-01');
473 # TEST CASE - 2 issues per year, no irregularity
474 $id = AddSubscriptionFrequency({
475 description => "1 issue every 2 years",
482 firstacquidate => '1970-01-01',
484 countissuesperunit => 1,
486 $publisheddate = $subscription->{firstacquidate};
487 $publisheddate = GetNextDate($subscription, $publisheddate);
488 is($publisheddate, '1970-07-02');
489 $publisheddate = GetNextDate($subscription, $publisheddate);
490 is($publisheddate, '1971-01-01');
491 $publisheddate = GetNextDate($subscription, $publisheddate);
492 is($publisheddate, '1971-07-02');
493 $publisheddate = GetNextDate($subscription, $publisheddate);
494 is($publisheddate, '1972-01-01');
496 # TEST CASE - 2 issues per year, irregularities
499 firstacquidate => '1970-01-01',
500 irregularity => '3;5;6',
501 countissuesperunit => 1,
503 $publisheddate = $subscription->{firstacquidate};
504 $publisheddate = GetNextDate($subscription, $publisheddate);
505 is($publisheddate, '1970-07-02');
506 $publisheddate = GetNextDate($subscription, $publisheddate);
507 is($publisheddate, '1971-07-02');
508 $publisheddate = GetNextDate($subscription, $publisheddate);
509 is($publisheddate, '1973-01-01');
510 $publisheddate = GetNextDate($subscription, $publisheddate);
511 is($publisheddate, '1973-07-02');
512 $publisheddate = GetNextDate($subscription, $publisheddate);
513 is($publisheddate, '1974-01-01');
515 # TEST CASE - Irregular
516 $id = AddSubscriptionFrequency({
517 description => "Irregular",
524 firstacquidate => '1970-01-01',
526 countissuesperunit => 1,
528 $publisheddate = $subscription->{firstacquidate};
529 # GetNextDate always return undef if subscription is irregular
530 $publisheddate = GetNextDate($subscription, $publisheddate);
531 is($publisheddate, undef);
533 # GetNextDate returns undef if one of two first parameters is undef
534 $publisheddate = GetNextDate($subscription, undef);
535 is($publisheddate, undef);
536 $publisheddate = GetNextDate(undef, $subscription->{firstacquidate});
537 is($publisheddate, undef);
538 $publisheddate = GetNextDate(undef, undef);
539 is($publisheddate, undef);