The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! perl -T
#
# Test for date filter

use strict;
use warnings;

use Test::More;
use Test::Fatal;
use Template::Flute;

eval "use DateTime";

if ($@) {
    plan skip_all => "Missing DateTime module.";
}

eval "use DateTime::Format::ISO8601";

if ($@) {
    plan skip_all => "Missing DateTime::Format::ISO8601 module.";
}

plan tests => 5;

my ($xml, $html, $flute, $ret);

$html =  <<EOF;
<div class="text">foo</div>
EOF

# date filter
$xml = <<EOF;
<specification name="filters">
<value name="text" filter="date"/>
</specification>
EOF

$flute = Template::Flute->new(specification => $xml,
			      template => $html,
			      filters => {date => {options => {format => '%m/%d/%Y'}}},
			      values => {text => '2011-10-30T06:07:07'});

$ret = $flute->process();

ok($ret =~ m%<div class="text">10/30/2011</div>%, "Output: $ret");

# date filter (missing date)

$flute = Template::Flute->new(specification => $xml,
			      template => $html,
			      filters => {date => {options => {format => '%m/%d/%Y'}}},
			      values => {text => ''});

like(exception{$ret = $flute->process()},
     qr/Empty date/,
     'Died as excepted on an empty date.');


# date filter (missing date with different strict setting)

$flute = Template::Flute->new(specification => $xml,
			      template => $html,
			      filters => {date => {options => {format => '%m/%d/%Y',
                                                   strict => {empty => 0}}},
                              values => {text => ''},
                             });

$ret = $flute->process();

ok($ret =~ m%<div class="text"></div>%, "Output: $ret");

# date filter (invalid date)
$flute = Template::Flute->new(specification => $xml,
			      template => $html,
			      filters => {date => {options => {format => '%m/%d/%Y'}}},
			      values => {text => '2011-11-31T06:07:07'});

like(exception{$ret = $flute->process()},
     qr/Invalid day of month/,
     'Died as excepted on an invalid date.');

# date filter (invalid date with different strict setting)
$flute = Template::Flute->new(specification => $xml,
			      template => $html,
			      filters => {date => {options => {format => '%m/%d/%Y',
                                                   strict => {invalid => 0}}}},
			      values => {text => '2011-11-31T06:07:07'},
                              );

ok($ret =~ m%<div class="text"></div>%, "Output: $ret");