89938401c8
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
278 lines
9.8 KiB
Perl
278 lines
9.8 KiB
Perl
#!/usr/bin/perl
|
|
|
|
use C4::Context;
|
|
use Test::More tests => 32;
|
|
use Modern::Perl;
|
|
|
|
my $dbh = C4::Context->dbh;
|
|
$dbh->{RaiseError} = 1;
|
|
$dbh->{AutoCommit} = 0;
|
|
|
|
use C4::Serials::Frequency;
|
|
use C4::Serials;
|
|
|
|
my $frequency = {
|
|
description => "One issue per day",
|
|
unit => 'day',
|
|
issuesperunit => 1,
|
|
unitsperissue => 1,
|
|
};
|
|
my $id = AddSubscriptionFrequency($frequency);
|
|
|
|
# TEST CASE 1 - 1 variable, from 1 to 4
|
|
my $pattern = {
|
|
add1 => 1, add2 => 0, add3 => 0,
|
|
every1 => 1, every2 => 0, every3 => 0,
|
|
whenmorethan1 => 4, whenmorethan2 => 0, whenmorethan3 => 0,
|
|
setto1 => 1, setto2 => 0, setto3 => 0,
|
|
numberingmethod => 'X: {X}',
|
|
numbering1 => '',
|
|
numbering2 => '',
|
|
numbering3 => '',
|
|
};
|
|
|
|
my $subscription = {
|
|
periodicity => $id,
|
|
firstacquidate => '1970-01-01',
|
|
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
|
|
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
|
|
skip_serialseq => 1,
|
|
irregularity => '3;5',
|
|
countissuesperunit => 1,
|
|
locale => 'en',
|
|
};
|
|
my $publisheddate = $subscription->{firstacquidate};
|
|
|
|
my $seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: 2');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: 4');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: 2');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: 3');
|
|
|
|
# TEST CASE 2 - 1 variable, use 'dayname' numbering, from 1 to 7
|
|
$subscription = {
|
|
periodicity => $id,
|
|
firstacquidate => '1970-01-01',
|
|
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
|
|
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
|
|
skip_serialseq => 1,
|
|
irregularity => '3;4;6',
|
|
countissuesperunit => 1,
|
|
locale => 'C',
|
|
};
|
|
$pattern = {
|
|
add1 => 1, add2 => 0, add3 => 0,
|
|
every1 => 1, every2 => 0, every3 => 0,
|
|
whenmorethan1 => 7, whenmorethan2 => 0, whenmorethan3 => 0,
|
|
setto1 => 1, setto2 => 0, setto3 => 0,
|
|
numberingmethod => 'X: {X}',
|
|
numbering1 => 'dayname',
|
|
numbering2 => '',
|
|
numbering3 => '',
|
|
};
|
|
|
|
$publisheddate = $subscription->{firstacquidate};
|
|
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Tuesday');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Friday');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Sunday');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Monday');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Tuesday');
|
|
|
|
# TEST CASE 3 - 1 variable, use 'monthname' numbering, from 0 to 11 by step of 2
|
|
$subscription = {
|
|
periodicity => $id,
|
|
firstacquidate => '1970-01-01',
|
|
lastvalue1 => 0, lastvalue2 => 1, lastvalue3 => 1,
|
|
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
|
|
skip_serialseq => 1,
|
|
irregularity => '3;4;6',
|
|
countissuesperunit => 1,
|
|
locale => 'C',
|
|
};
|
|
$pattern = {
|
|
add1 => 2, add2 => 0, add3 => 0,
|
|
every1 => 1, every2 => 0, every3 => 0,
|
|
whenmorethan1 => 11, whenmorethan2 => 0, whenmorethan3 => 0,
|
|
setto1 => 0, setto2 => 0, setto3 => 0,
|
|
numberingmethod => 'X: {X}',
|
|
numbering1 => 'monthname',
|
|
numbering2 => '',
|
|
numbering3 => '',
|
|
};
|
|
|
|
$publisheddate = $subscription->{firstacquidate};
|
|
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: March');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: September');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: January');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: March');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: May');
|
|
|
|
# TEST CASE 4 - 1 variable, use 'season' numbering, from 0 to 3
|
|
$subscription = {
|
|
periodicity => $id,
|
|
firstacquidate => '1970-01-01',
|
|
lastvalue1 => 0, lastvalue2 => 1, lastvalue3 => 1,
|
|
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
|
|
skip_serialseq => 1,
|
|
irregularity => '3;4;6',
|
|
countissuesperunit => 1,
|
|
locale => 'C',
|
|
};
|
|
$pattern = {
|
|
add1 => 1, add2 => 0, add3 => 0,
|
|
every1 => 1, every2 => 0, every3 => 0,
|
|
whenmorethan1 => 3, whenmorethan2 => 0, whenmorethan3 => 0,
|
|
setto1 => 0, setto2 => 0, setto3 => 0,
|
|
numberingmethod => 'X: {X}',
|
|
numbering1 => 'season',
|
|
numbering2 => '',
|
|
numbering3 => '',
|
|
};
|
|
|
|
$publisheddate = $subscription->{firstacquidate};
|
|
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Summer');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Spring');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Fall');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Winter');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'X: Spring');
|
|
|
|
# TEST CASE 5 - 2 variables, from 1 to 12, and from 1 to 4
|
|
$subscription = {
|
|
periodicity => $id,
|
|
firstacquidate => '1970-01-01',
|
|
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
|
|
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
|
|
skip_serialseq => 1,
|
|
irregularity => '3;4;6',
|
|
countissuesperunit => 1,
|
|
locale => 'C',
|
|
};
|
|
$pattern = {
|
|
add1 => 1, add2 => 1, add3 => 0,
|
|
every1 => 1, every2 => 4, every3 => 0,
|
|
whenmorethan1 => 4, whenmorethan2 => 12, whenmorethan3 => 0,
|
|
setto1 => 1, setto2 => 1, setto3 => 0,
|
|
numberingmethod => 'Y: {Y}, X: {X}',
|
|
numbering1 => '',
|
|
numbering2 => '',
|
|
numbering3 => '',
|
|
};
|
|
|
|
$publisheddate = $subscription->{firstacquidate};
|
|
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Y: 1, X: 2');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Y: 2, X: 1');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Y: 2, X: 3');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Y: 2, X: 4');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Y: 3, X: 1');
|
|
|
|
# TEST CASE 6 - 3 variables, from 1 to 12, from 1 to 8, and from 1 to 4
|
|
$subscription = {
|
|
periodicity => $id,
|
|
firstacquidate => '1970-01-01',
|
|
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
|
|
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
|
|
skip_serialseq => 1,
|
|
irregularity => '3;4;6;110',
|
|
countissuesperunit => 1,
|
|
locale => 'C',
|
|
};
|
|
$pattern = {
|
|
add1 => 1, add2 => 1, add3 => 1,
|
|
every1 => 1, every2 => 4, every3 => 32,
|
|
whenmorethan1 => 4, whenmorethan2 => 8, whenmorethan3 => 12,
|
|
setto1 => 1, setto2 => 1, setto3 => 1,
|
|
numberingmethod => 'Z: {Z}, Y: {Y}, X: {X}',
|
|
numbering1 => '',
|
|
numbering2 => '',
|
|
numbering3 => '',
|
|
};
|
|
|
|
$publisheddate = $subscription->{firstacquidate};
|
|
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 1, Y: 1, X: 2');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 1, Y: 2, X: 1');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 1, Y: 2, X: 3');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 1, Y: 2, X: 4');
|
|
for (1..100) {
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
}
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 4, Y: 4, X: 1');
|
|
# 110th is here
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 4, Y: 4, X: 3');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 4, Y: 4, X: 4');
|
|
$publisheddate = GetNextDate($subscription, $publisheddate);
|
|
$seq = _next_seq($subscription, $pattern, $publisheddate);
|
|
is($seq, 'Z: 4, Y: 5, X: 1');
|
|
|
|
|
|
$dbh->rollback;
|
|
|
|
sub _next_seq {
|
|
my ($subscription, $pattern, $publisheddate) = @_;
|
|
my $seq;
|
|
($seq, $subscription->{lastvalue1}, $subscription->{lastvalue2},
|
|
$subscription->{lastvalue3}, $subscription->{innerloop1},
|
|
$subscription->{innerloop2}, $subscription->{innerloop3}) =
|
|
GetNextSeq($subscription, $pattern, $publisheddate);
|
|
return $seq;
|
|
}
|