65c2622343785f46ee441f40c434251a4e35d0df
[koha.git] / t / Calendar.t
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5 use DateTime;
6 use Test::More tests => 14;
7 use Koha::DateUtils;
8
9 BEGIN {
10     use_ok('Koha::Calendar');
11
12     # This was the only test C4 had
13     # Remove when no longer used
14     use_ok('C4::Calendar');
15 }
16
17 my $cal = Koha::Calendar->new( TEST_MODE => 1 );
18
19 isa_ok( $cal, 'Koha::Calendar' );
20
21 my $test_dt = DateTime->new(    # Monday
22     year      => 2012,
23     month     => 7,
24     day       => 23,
25     hour      => 11,
26     minute    => 53,
27     time_zone => 'Europe/London',
28 );
29
30 my $later_dt = DateTime->new(    # Monday
31     year      => 2012,
32     month     => 9,
33     day       => 17,
34     hour      => 17,
35     minute    => 30,
36     time_zone => 'Europe/London',
37 );
38
39 my $daycount = $cal->days_between( $test_dt, $later_dt );
40 cmp_ok( $daycount->in_units('days'),
41     '==', 48, 'days_between calculates correctly' );
42
43 my $ret = $cal->addDate( $test_dt, 1, 'days' );
44
45 cmp_ok( $ret->ymd(), 'eq', '2012-07-24', 'Simple Single Day Add (Calendar)`' );
46
47 $ret = $cal->addDate( $test_dt, 7, 'days' );
48 cmp_ok( $ret->ymd(), 'eq', '2012-07-31', 'Add 7 days Calendar mode' );
49 $cal->set_daysmode('Datedue');
50 $ret = $cal->addDate( $test_dt, 7, 'days' );
51 cmp_ok( $ret->ymd(), 'eq', '2012-07-30', 'Add 7 days Datedue mode' );
52 $cal->set_daysmode('Days');
53 $ret = $cal->addDate( $test_dt, 7, 'days' );
54 cmp_ok( $ret->ymd(), 'eq', '2012-07-30', 'Add 7 days Days mode' );
55 $cal->set_daysmode('Calendar');
56
57 # example tests for bug report
58 $cal->clear_weekly_closed_days();
59
60 $daycount = $cal->days_between( dt_from_string('2012-01-10'),
61     dt_from_string("2012-05-05") )->in_units('days');
62 cmp_ok( $daycount, '==', 116, 'test larger intervals' );
63 $daycount = $cal->days_between( dt_from_string("2012-01-01"),
64     dt_from_string("2012-05-05") )->in_units('days');
65 cmp_ok( $daycount, '==', 125, 'test positive intervals' );
66 my $daycount2 = $cal->days_between( dt_from_string("2012-05-05"),
67     dt_from_string("2012-01-01") )->in_units('days');
68 cmp_ok( $daycount2, '==', $daycount, 'test parameter order not relevant' );
69 $daycount = $cal->days_between( dt_from_string("2012-07-01"),
70     dt_from_string("2012-07-15") )->in_units('days');
71 cmp_ok( $daycount, '==', 14, 'days_between calculates correctly' );
72 $cal->add_holiday( dt_from_string('2012-07-06') );
73 $daycount = $cal->days_between( dt_from_string("2012-07-01"),
74     dt_from_string("2012-07-15") )->in_units('days');
75 cmp_ok( $daycount, '==', 13, 'holiday correctly recognized' );
76
77 $cal->add_holiday( dt_from_string('2012-07-07') );
78 $daycount = $cal->days_between( dt_from_string("2012-07-01"),
79     dt_from_string("2012-07-15") )->in_units('days');
80 cmp_ok( $daycount, '==', 12, 'multiple holidays correctly recognized' );