Koha/t/Serials/GetNextSeq.t
Björn Nylén cb9854dd1e
Bug 32392: Tests for changes in C4::Serials::GetNextSeq
Signed-off-by: Marie Hedbom <marie.hedbom@musikverket.se>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
2024-04-29 15:19:30 +02:00

259 lines
9.1 KiB
Perl
Executable file

#!/usr/bin/perl
use Modern::Perl;
use Test::More tests => 46;
use C4::Serials qw( GetNextSeq );
# TEST CASE 1 - 1 variable, from 1 to 4
my $subscription = {
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
skip_serialseq => 0,
irregularity => '',
locale => 'en',
};
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 $seq = _next_seq($subscription, $pattern);
is($seq, 'X: 2');
$seq = _next_seq($subscription, $pattern);
is($seq, 'X: 3');
$seq = _next_seq($subscription, $pattern);
is($seq, 'X: 4');
$seq = _next_seq($subscription, $pattern);
is($seq, 'X: 1');
$seq = _next_seq($subscription, $pattern);
is($seq, 'X: 2');
# TEST CASE 2 - 1 variable, use 'dayname' numbering, from 1 to 7
$subscription = {
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
skip_serialseq => 0,
irregularity => '',
locale => 'C',
};
$pattern = {
add1 => 1, add2 => 1, add3 => 0,
every1 => 1, every2 => 1, every3 => 0,
whenmorethan1 => 7, whenmorethan2 => 7, whenmorethan3 => 0,
setto1 => 1, setto2 => 1, setto3 => 0,
numberingmethod => 'dayname: {X} | dayabrv: {Y}',
numbering1 => 'dayname',
numbering2 => 'dayabrv',
numbering3 => '',
};
$seq = _next_seq($subscription, $pattern);
is($seq, 'dayname: Tuesday | dayabrv: Tue');
$seq = _next_seq($subscription, $pattern);
is($seq, 'dayname: Wednesday | dayabrv: Wed');
$seq = _next_seq($subscription, $pattern);
is($seq, 'dayname: Thursday | dayabrv: Thu');
$seq = _next_seq($subscription, $pattern);
is($seq, 'dayname: Friday | dayabrv: Fri');
$seq = _next_seq($subscription, $pattern);
is($seq, 'dayname: Saturday | dayabrv: Sat');
$seq = _next_seq($subscription, $pattern);
is($seq, 'dayname: Sunday | dayabrv: Sun');
$seq = _next_seq($subscription, $pattern);
is($seq, 'dayname: Monday | dayabrv: Mon');
# TEST CASE 3 - 1 variable, use 'monthname' numbering, from 0 to 11 by step of 2
$subscription = {
lastvalue1 => 0, lastvalue2 => 0, lastvalue3 => 0,
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
skip_serialseq => 0,
irregularity => '',
locale => 'C', # locale set to 'C' to ensure we'll have english strings
};
$pattern = {
add1 => 2, add2 => 2, add3 => 0,
every1 => 1, every2 => 1, every3 => 0,
whenmorethan1 => 11, whenmorethan2 => 11, whenmorethan3 => 0,
setto1 => 0, setto2 => 0, setto3 => 0,
numberingmethod => 'monthname: {X} | monthabrv: {Y}',
numbering1 => 'monthname',
numbering2 => 'monthabrv',
numbering3 => '',
};
$seq = _next_seq($subscription, $pattern);
is($seq, 'monthname: March | monthabrv: Mar');
$seq = _next_seq($subscription, $pattern);
is($seq, 'monthname: May | monthabrv: May');
$seq = _next_seq($subscription, $pattern);
is($seq, 'monthname: July | monthabrv: Jul');
$seq = _next_seq($subscription, $pattern);
is($seq, 'monthname: September | monthabrv: Sep');
$seq = _next_seq($subscription, $pattern);
is($seq, 'monthname: November | monthabrv: Nov');
$seq = _next_seq($subscription, $pattern);
is($seq, 'monthname: January | monthabrv: Jan');
$seq = _next_seq($subscription, $pattern);
is($seq, 'monthname: March | monthabrv: Mar');
# TEST CASE 4 - 1 variable, use 'season' numbering, from 0 to 3
# Months starts at 0, this implies subscription's lastvalue1 should be 0,
# together with setto1 and whenmorethan1 should be 11
$subscription = {
lastvalue1 => 0, lastvalue2 => 0, lastvalue3 => 0,
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
skip_serialseq => 0,
irregularity => '',
locale => 'C', # locale set to 'C' to ensure we'll have english strings
};
$pattern = {
add1 => 1, add2 => 1, add3 => 0,
every1 => 1, every2 => 1, every3 => 0,
whenmorethan1 => 3, whenmorethan2 => 3, whenmorethan3 => 0,
setto1 => 0, setto2 => 0, setto3 => 0,
numberingmethod => 'season: {X} | seasonabrv: {Y}',
numbering1 => 'season',
numbering2 => 'seasonabrv',
numbering3 => '',
};
$seq = _next_seq($subscription, $pattern);
is($seq, 'season: Summer | seasonabrv: Sum');
$seq = _next_seq($subscription, $pattern);
is($seq, 'season: Fall | seasonabrv: Fal');
$seq = _next_seq($subscription, $pattern);
is($seq, 'season: Winter | seasonabrv: Win');
$seq = _next_seq($subscription, $pattern);
is($seq, 'season: Spring | seasonabrv: Spr');
$seq = _next_seq($subscription, $pattern);
is($seq, 'season: Summer | seasonabrv: Sum');
# TEST CASE 5 - 2 variables, from 1 to 12, and from 1 to 4
$subscription = {
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
skip_serialseq => 0,
irregularity => '',
locale => 'C', # locale set to 'C' to ensure we'll have english strings
};
$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 => '',
};
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 1, X: 2');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 1, X: 3');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 1, X: 4');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 2, X: 1');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 2, X: 2');
# Back to the future
for (1..39) {
$seq = _next_seq($subscription, $pattern);
}
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 12, X: 2');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 12, X: 3');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 12, X: 4');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Y: 1, X: 1');
# TEST CASE 6 - 3 variables, from 1 to 12, from 1 to 8, and from 1 to 4
$subscription = {
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
skip_serialseq => 0,
irregularity => '',
locale => 'C', # locale set to 'C' to ensure we'll have english strings
};
$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 => '',
};
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 1, X: 2');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 1, X: 3');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 1, X: 4');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 2, X: 1');
for (1..24) {
$seq = _next_seq($subscription, $pattern);
}
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 8, X: 2');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 8, X: 3');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 8, X: 4');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 2, Y: 1, X: 1');
for (1..350) {
$seq = _next_seq($subscription, $pattern);
}
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 12, Y: 8, X: 4');
$seq = _next_seq($subscription, $pattern);
is($seq, 'Z: 1, Y: 1, X: 1');
# TEST CASE 7 . Specify how many issues to count forward, 1 variable, from 1 to 4
$subscription = {
lastvalue1 => 1, lastvalue2 => 1, lastvalue3 => 1,
innerloop1 => 0, innerloop2 => 0, innerloop3 => 0,
skip_serialseq => 0,
irregularity => '',
locale => 'en',
};
$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 => '',
};
$seq = _next_seq($subscription, $pattern, 1);
is($seq, 'X: 2');
$seq = _next_seq($subscription, $pattern, 2);
is($seq, 'X: 4');
$seq = _next_seq($subscription, $pattern, 2);
is($seq, 'X: 2');
sub _next_seq {
my ($subscription, $pattern, $count_forward) = @_;
my $seq;
($seq, $subscription->{lastvalue1}, $subscription->{lastvalue2},
$subscription->{lastvalue3}, $subscription->{innerloop1},
$subscription->{innerloop2}, $subscription->{innerloop3}) =
GetNextSeq($subscription, $pattern, undef, undef, $count_forward);
return $seq;
}