Bug 21824: Add ability to format dates in various formats in templates
[koha.git] / t / db_dependent / Template / Plugin / KohaDates.t
1 #!/usr/bin/perl
2
3 use Modern::Perl;
4 use C4::Context;
5 use Koha::DateUtils;
6 use Test::More tests => 8;
7 use Test::MockModule;
8 use t::lib::Mocks;
9
10 BEGIN {
11         use_ok('Koha::Template::Plugin::KohaDates');
12 }
13
14 my $module_context = new Test::MockModule('C4::Context');
15
16 my $date = "1973-05-21";
17 my $context = C4::Context->new();
18
19 my $filter = Koha::Template::Plugin::KohaDates->new();
20 ok ($filter, "new()");
21
22 t::lib::Mocks::mock_preference( "dateformat", 'iso' );
23 $context->clear_syspref_cache();
24
25 my $filtered_date = $filter->filter($date);
26 is ($filtered_date,$date, "iso conversion") or diag ("iso conversion fails");
27
28 #$filter = Koha::Template::Plugin::KohaDates->new();
29 t::lib::Mocks::mock_preference( "dateformat", 'us' );
30 $context->clear_syspref_cache();
31
32 $filtered_date = $filter->filter($date);
33 is ($filtered_date,'05/21/1973', "us conversion") or diag ("us conversion fails $filtered_date");
34
35 t::lib::Mocks::mock_preference( "dateformat", 'metric' );
36 $context->clear_syspref_cache();
37
38 $filtered_date = $filter->filter($date);
39 is ($filtered_date,'21/05/1973', "metric conversion") or diag ("metric conversion fails $filtered_date");
40
41 $module_context->mock(
42     'tz',
43     sub {
44         return DateTime::TimeZone->new( name => 'Europe/Lisbon' );
45     }
46 );
47
48 $filtered_date = $filter->filter('1979-04-01');
49 is( $filtered_date, '01/04/1979', 'us: dt_from_string should return the valid date if a dst is given' );
50
51 $filtered_date = $filter->filter('1979-04-01', undef, { dateformat => 'iso' } );
52 is( $filtered_date, '1979-04-01', 'date should be returned in ISO if dateformat is passed with a value of iso' );
53
54 $module_context->mock(
55     'tz',
56     sub {
57         return DateTime::TimeZone->new( name => 'Europe/Paris' );
58     }
59 );
60
61 $filtered_date = $filter->filter('2014-03-30 02:00:00');
62 is( $filtered_date, '30/03/2014', 'us: dt_from_string should return a DateTime object if a DST is given' );