Bug 14362: Regression tests
authorMark Tompsett <mtompset@hotmail.com>
Mon, 8 Jun 2015 03:40:50 +0000 (23:40 -0400)
committerChris Cormack <chrisc@catalyst.net.nz>
Sun, 19 Jun 2016 22:07:23 +0000 (10:07 +1200)
This should trigger the error. Attempts to shift system time
zones did not make sense as to the number of failures.

Added Time::Fake dependency, if it isn't installed these extra
tests don't run. There is a nice skip message about it.

Added License text.

TEST PLAN
---------
 1) apply test patch
 2) sudo dpkg-reconfigure tzdata
    -- set your system time to GMT (Africa/Abidjan)
 3) prove t/Circulation/AgeRestrictionMarkers.t
    -- should not fail, even if you change system
       time to any time.
 4) sudo dpkg-reconfigure tzdata
    -- set your timezone to Eastern
 5) sudo date -s"2015-06-18 21:15:00"
 6) date
    -- should be past 9pm Eastern timezone
 7) prove t/Circulation/AgeRestrictionMarkers.t
    -- kaboom!
 8) sudo date -s"2015-06-18 12:00:00"
 9) date
    -- should be noon Eastern timezone
10) prove t/Circulation/AgeRestrictionMarkers.t
    -- success?! Time sensitive tests are bad tests.
11) sudo apt-get install libtime-fake-perl
12) prove t/Circulation/AgeRestrictionMarkers.t
    -- kaboom!
    -- changing timezone to anything other than GMT
       should trigger a kaboom.
13) apply fix patch
14) prove t/Circulation/AgeRestrictionMarkers.t
    -- should work all the time.
15) less t/Circulation/AgeRestrictionMarkers.t
    -- the license text should be similar to
       http://wiki.koha-community.org/wiki/Coding_Guidelines#Licence
16) koha qa test tools.

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
(cherry picked from commit a2aba3c86f106603212eb2c5beb52c3cdfe49857)
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>

Conflicts:
C4/Installer/PerlDependencies.pm

(cherry picked from commit 975f7bb9aa32f47f61ab0afd67f537d8d24ea9d6)
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>

C4/Installer/PerlDependencies.pm
t/Circulation/AgeRestrictionMarkers.t

index ada7ffa..34cacbb 100644 (file)
@@ -737,6 +737,11 @@ our $PERL_DEPS = {
         'required' => '1',
         'min_ver'  => '1.10',
     },
+    'Time::Fake'   => {
+        'usage'    => 'Test code coverage',
+        'required' => '0',
+        'min_ver'  => '0.11',
+    }
 };
 
 1;
index 750bf9b..541293d 100644 (file)
@@ -1,8 +1,26 @@
 #!/usr/bin/perl
 
+# This file is part of Koha.
+#
+# Copyright (C) 2015  Mark Tompsett (Time Zone Shifts)
+#
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
+
 use Modern::Perl;
+
 use DateTime;
-use Test::More tests => 10;
+use Test::More tests => 7;
 
 use t::lib::Mocks;
 
@@ -16,19 +34,50 @@ is ( C4::Circulation::GetAgeRestriction('PEGI16'), '16', 'PEGI16 returns 16' );
 is ( C4::Circulation::GetAgeRestriction('Age 16'), '16', 'Age 16 returns 16' );
 is ( C4::Circulation::GetAgeRestriction('K16'), '16', 'K16 returns 16' );
 
+subtest 'Patron tests - 15 years old' => sub {
+    plan tests => 5;
+    ##Testing age restriction for a borrower.
+    my $now = DateTime->now();
+    my $borrower = {};
+    C4::Members::SetAge( $borrower, '0015-00-00' );
+    TestPatron($borrower,0);
+};
+
+subtest 'Patron tests - 15 years old (Time Zone shifts)' => sub {
+    my $CheckTimeFake = eval { require Time::Fake; 1; } || 0;
+    SKIP: {
+        skip "Install Time::Fake to regression test for Bug 14362.", 115 if $CheckTimeFake!=1;
+        # 115 regression tests = 5 tests (see TestPatron) for 23 timezones.
+        plan tests => 115;
+        my $offset = 1;
+        # <24 hours in a day.
+        while ($offset<24) {
+            Time::Fake->offset("+${offset}h");
+
+            ##Testing age restriction for a borrower.
+            my $now = DateTime->now();
+            my $borrower = {};
+            C4::Members::SetAge( $borrower, '0015-00-00' );
+            TestPatron($borrower,$offset);
+
+            $offset++;
+        }
+    }
+};
+
+# The Patron tests
+sub TestPatron {
+    my ($borrower,$offset) = @_;
 
-##Testing age restriction for a borrower.
-my $now = DateTime->now();
-my $borrower = {};
-C4::Members::SetAge( $borrower, '0015-00-00' );
-
-my ($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('FSK 16', $borrower);
-is ( ($daysToAgeRestriction > 0), 1, 'FSK 16 blocked for a 15 year old' );
-($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('PEGI 15', $borrower);
-is ( ($daysToAgeRestriction <= 0), 1, 'PEGI 15 allowed for a 15 year old' );
-($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('PEGI14', $borrower);
-is ( ($daysToAgeRestriction <= 0), 1, 'PEGI14 allowed for a 15 year old' );
-($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('Age 10', $borrower);
-is ( ($daysToAgeRestriction <= 0), 1, 'Age 10 allowed for a 15 year old' );
-($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('K18', $borrower);
-is ( ($daysToAgeRestriction > 0), 1, 'K18 blocked for a 15 year old' );
\ No newline at end of file
+    my ($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('FSK 16', $borrower);
+    is ( ($daysToAgeRestriction > 0), 1, "FSK 16 blocked for a 15 year old - $offset hours" );
+    ($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('PEGI 15', $borrower);
+    is ( ($daysToAgeRestriction <= 0), 1, "PEGI 15 allowed for a 15 year old - $offset hours" );
+    ($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('PEGI14', $borrower);
+    is ( ($daysToAgeRestriction <= 0), 1, "PEGI14 allowed for a 15 year old - $offset hours" );
+    ($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('Age 10', $borrower);
+    is ( ($daysToAgeRestriction <= 0), 1, "Age 10 allowed for a 15 year old - $offset hours" );
+    ($restriction_age, $daysToAgeRestriction) = C4::Circulation::GetAgeRestriction('K18', $borrower);
+    is ( ($daysToAgeRestriction > 0), 1, "K18 blocked for a 15 year old - $offset hours" );
+    return;
+}