#!/usr/bin/perl
-# This test deals with GetFictiveIssueNumber (from C4::Serials)
-
+use C4::Context;
+use Test::More tests => 18;
use Modern::Perl;
-use Test::More tests => 5;
-
-use Koha::Database;
-use C4::Serials;
-use C4::Serials::Frequency;
-my $schema = Koha::Database->new->schema;
-$schema->storage->txn_begin;
my $dbh = C4::Context->dbh;
+$dbh->{RaiseError} = 1;
+$dbh->{AutoCommit} = 0;
-subtest 'Tests for irregular frequency' => sub {
- plan tests => 2;
-
- # Add a frequency
- my $freq_irr = AddSubscriptionFrequency({
- description => "Irregular",
- unit => undef,
- });
+use C4::Serials::Frequency;
+use C4::Serials;
- # Test it
- my $subscription = {
- periodicity => $freq_irr,
- firstacquidate => '1972-02-07',
- };
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-12-31'), undef, 'Irregular: should be undef' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-12-31'), undef, 'Irregular: still undef' );
+# TEST CASE - 1 issue per day, no irregularities
+my $frequency = {
+ description => "One issue per day",
+ unit => 'day',
+ issuesperunit => 1,
+ unitsperissue => 1,
};
-subtest 'Tests for yearly frequencies' => sub {
- plan tests => 10;
-
- # First add a few frequencies
- my $freq_1i_1y = AddSubscriptionFrequency({
- description => "1 issue per year",
- unit => 'year',
- issuesperunit => 1,
- unitsperissue => 1,
- });
- my $freq_1i_3y = AddSubscriptionFrequency({
- description => "1 issue per 3 years",
- unit => 'year',
- issuesperunit => 1,
- unitsperissue => 3,
- });
- my $freq_5i_1y = AddSubscriptionFrequency({
- description => "5 issues per year",
- unit => 'year',
- issuesperunit => 5,
- unitsperissue => 1,
- });
- my $freq_366i_1y = AddSubscriptionFrequency({
- description => "366 issue per year",
- unit => 'year',
- issuesperunit => 366,
- unitsperissue => 1,
- });
-
- # TEST CASE - 1 issue per year
- my $subscription = {
- periodicity => $freq_1i_1y,
- firstacquidate => '1972-02-10',
- countissuesperunit => 1,
- };
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-09'), 1, 'Feb 9 still 1' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-10'), 2, 'Feb 10 goes to 2' );
-
- # TEST CASE - 1 issue per 3 years
- $subscription->{periodicity} = $freq_1i_3y;
- $subscription->{firstacquidate} = '1972-02-20';
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1975-02-19'), 1, 'Feb 19, 1975 still 1' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1975-02-20'), 2, 'Feb 20, 1975 goes to 2' );
-
- # TEST CASE - 5 issues per year
- $subscription->{periodicity} = $freq_5i_1y;
- $subscription->{firstacquidate} = '1972-02-29'; #leap year
- $subscription->{countissuesperunit} = 1;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-11'), 1, 'May 11 still 1' );
- $subscription->{countissuesperunit} = 2;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-12'), 2, 'May 12 goes to 2' );
- $subscription->{countissuesperunit} = 5;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-27'), 5, 'Feb 27 should still be 5' );
- $subscription->{countissuesperunit} = 1;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-28'), 6, 'Feb 28 goes to 6' );
-
- # TEST CASE - 366 issues per year (hypothetical example)
- # Testing prevention of divide by zero
- $subscription->{periodicity} = $freq_366i_1y;
- $subscription->{firstacquidate} = '1972-02-29'; #leap year
- $subscription->{countissuesperunit} = 366;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-27'), 366, 'Feb 27 still at 366' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-02-28'), 732, 'Feb 28 goes to 732' );
-
+my $subscription = {
+ firstacquidate => '1970-01-01',
+ irregularity => '',
+ countissuesperunit => 1,
};
-
-subtest 'Tests for monthly frequencies' => sub {
- plan tests => 8;
-
- # First add a few frequencies
- my $freq_1i_5m = AddSubscriptionFrequency({
- description => "1 issue per 5 months",
- unit => 'month',
- issuesperunit => 1,
- unitsperissue => 5,
- });
- my $freq_4i_1m = AddSubscriptionFrequency({
- description => "4 issue per month",
- unit => 'month',
- issuesperunit => 4,
- unitsperissue => 1,
- });
-
- # TEST CASE - 1 issue per 5 months
- my $subscription = {
- periodicity => $freq_1i_5m,
- firstacquidate => '1972-02-10',
- countissuesperunit => 1,
- };
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-07-09'), 1, 'Jul 9 still 1' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-07-10'), 2, 'Jul 10 goes to 2' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-05-09'), 3, 'May 9 still 3' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1973-05-10'), 4, 'May 10 goes to 4' );
-
- # TEST CASE - 4 issue per 1 months
- $subscription = {
- periodicity => $freq_4i_1m,
- firstacquidate => '1972-02-22',
- countissuesperunit => 1,
- };
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-28'), 1, 'Feb 28 still 1' );
- $subscription->{countissuesperunit} = 2;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-29'), 2, 'Feb 29 goes to 2' );
- $subscription->{countissuesperunit} = 4;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-21'), 4, 'Mar 21 still 4' );
- $subscription->{countissuesperunit} = 1;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-22'), 5, 'Mar 22 goes to 5' );
-
+my $issueNumber;
+
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
+is( $issueNumber, '1' );
+
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
+is( $issueNumber, '2' );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
+is( $issueNumber, '3' );
+
+# TEST CASE - 2 issues per day, no irregularity
+$frequency = {
+ description => "Two issues per day",
+ unit => 'day',
+ issuesperunit => 2,
+ unitsperissue => 1,
};
-
-subtest 'Tests for weekly frequencies' => sub {
- plan tests => 4;
-
- # First add a few frequencies
- my $freq_1i_7w = AddSubscriptionFrequency({
- description => "1 issue per 7 weeks",
- unit => 'week',
- issuesperunit => 1,
- unitsperissue => 7,
- });
- my $freq_3i_1w = AddSubscriptionFrequency({
- description => "3 issues per week",
- unit => 'week',
- issuesperunit => 3,
- unitsperissue => 1,
- });
-
- # TEST CASE - 1 issue per 7 weeks
- my $subscription = {
- periodicity => $freq_1i_7w,
- firstacquidate => '1972-02-10',
- countissuesperunit => 1,
- };
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-29'), 1, 'Mar 29 still 1' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-30'), 2, 'Mar 30 goes to 2' );
-
- # TEST CASE - 3 issue per 1 week
- $subscription = {
- periodicity => $freq_3i_1w,
- firstacquidate => '1972-02-03',
- countissuesperunit => 1,
- };
- $subscription->{countissuesperunit} = 3;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-09'), 3, 'Feb 9 still 3' );
- $subscription->{countissuesperunit} = 1;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-02-10'), 4, 'Feb 10 goes to 4' );
+$subscription = {
+ firstacquidate => '1970-01-01',
+ irregularity => '',
+ countissuesperunit => 1,
};
-
-subtest 'Tests for dayly frequencies' => sub {
- plan tests => 4;
-
- # First add a few frequencies
- my $freq_1i_12d = AddSubscriptionFrequency({
- description => "1 issue per 12 days",
- unit => 'day',
- issuesperunit => 1,
- unitsperissue => 12,
- });
- my $freq_3i_1d = AddSubscriptionFrequency({
- description => "3 issues per day",
- unit => 'day',
- issuesperunit => 3,
- unitsperissue => 1,
- });
-
- # TEST CASE - 1 issue per 12 days
- my $subscription = {
- periodicity => $freq_1i_12d,
- firstacquidate => '1972-03-16',
- countissuesperunit => 1,
- };
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-27'), 1, 'Mar 27 still 1' );
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-03-28'), 2, 'Mar 28 goes to 2' );
-
- # TEST CASE - 3 issue per day
- $subscription = {
- periodicity => $freq_3i_1d,
- firstacquidate => '1972-04-23',
- countissuesperunit => 1,
- };
- $subscription->{countissuesperunit} = 3;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-01'), 27, 'May 1 still 27' );
- $subscription->{countissuesperunit} = 1;
- is( C4::Serials::GetFictiveIssueNumber($subscription, '1972-05-02'), 28, 'May 2 goes to 28' );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
+is( $issueNumber, '1' );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
+is( $issueNumber, '3' );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
+is( $issueNumber, '5' );
+
+$subscription->{countissuesperunit} = 2;
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
+is( $issueNumber, '2' );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
+is( $issueNumber, '4' );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
+is( $issueNumber, '6' );
+
+# TEST CASE - 1 issue every 2 days, no irregularity
+$frequency = {
+ description => "one issue every two days",
+ unit => 'day',
+ issuesperunit => 1,
+ unitsperissue => 2,
};
-
-$schema->storage->txn_rollback;
+$subscription = {
+ firstacquidate => '1970-01-01',
+ irregularity => '',
+ countissuesperunit => 1,
+};
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
+is( $issueNumber, 1 );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
+is( $issueNumber, 1 );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-03', $frequency );
+is( $issueNumber, 2 );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-04', $frequency );
+is( $issueNumber, 2 );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-05', $frequency );
+is( $issueNumber, 3 );
+
+# TEST CASE - 1 issue per week, no irregularity
+$frequency = {
+ description => "one issue per week",
+ unit => 'week',
+ issuesperunit => 1,
+ unitsperissue => 1,
+};
+$subscription = {
+ firstacquidate => '1970-01-01',
+ irregularity => '',
+ countissuesperunit => 1,
+};
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-01', $frequency );
+is( $issueNumber, 1 );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-02', $frequency );
+is( $issueNumber, 1 );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-08', $frequency );
+is( $issueNumber, 2 );
+$issueNumber =
+ C4::Serials::GetFictiveIssueNumber( $subscription, '1970-01-15', $frequency );
+is( $issueNumber, 3 );
+
+$dbh->rollback;