The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use lib './t';
use Test::More;
use Test::Exception;
BEGIN {
    eval "use DBD::SQLite";
    plan skip_all => "DBD::SQLite is not installed. skip testing" if $@;
}

use Mock::Basic;

my $skinny = Mock::Basic->new;
$skinny->setup_test_db;

subtest 'user defined rule' => sub {
    my $rule = $skinny->proxy_table->rule('ranking', 'daily');
    $rule->copy_table;
    is($rule->table_name, 'ranking_daily', 'user defined rule name is ok');

    done_testing();
};

subtest 'sprintf rule' => sub {
    my $rule = $skinny->proxy_table->rule('error_log', '20100101');
    is($rule->table_name, 'error_log_20100101', 'sprintf ok');
    done_testing();
};

subtest 'keyword rule' => sub {
    my $rule = $skinny->proxy_table->rule('fugafuga_log', year => 2010, month => 1);
    is($rule->table_name, 'fugafuga_log_201001', 'keyword ok');
    done_testing();
};

subtest 'strftime with DateTime' => sub {
    eval "use DateTime";
    plan skip_all => 'this test require DateTime' if $@;
    {
        my $dt = DateTime->new(year => 2010, month => 1, day => 1);
        my $rule = $skinny->proxy_table->rule('access_log', $dt);
        is($rule->table_name, 'access_log_201001', 'strftime ok');
    }
    {
        my $dt = DateTime->new(year => 2010, month => 2, day => 1);
        my $rule = $skinny->proxy_table->rule('access_log', $dt);
        $rule->copy_table;
        is($rule->table_name, 'access_log_201002', 'strftime ok');
    }
    done_testing();
};

subtest 'strftime with Time::Piece' => sub {
    eval { require 'Time::Piece' };
    plan skip_all => 'this test require Time::Piece' if $@;
    my $piece = Time::Piece->strptime('2010-01-01', '%Y-%m-%d');
    my $rule = $skinny->proxy_table->rule('access_log', $piece);
    $rule->copy_table;
    is($rule->table_name, 'access_log_201001', 'strftime ok ( with Time::Piece)');
    done_testing();
};

subtest 'named_strftime with DateTime' => sub {
    eval "use DateTime";
    plan skip_all => 'this test require DateTime' if $@;
    {
        my $dt = DateTime->new(year => 2010, month => 1, day => 1);
        my $rule = $skinny->proxy_table->rule('hogehoge_log', hogehoged_on => $dt);
        is($rule->table_name, 'hogehoge_log_201001', 'named_strftime ok');
    }
    done_testing();
};

subtest 'named_strftime with Time::Piece' => sub {
    eval { require 'Time::Piece' };
    plan skip_all => 'this test require Time::Piece' if $@;
    my $piece = Time::Piece->strptime('2010-01-01', '%Y-%m-%d');
    my $rule = $skinny->proxy_table->rule('hogehoge_log', hogehoged_on => $piece);
    $rule->copy_table;
    is($rule->table_name, 'hogehoge_log_201001', 'named_strftime ok ( with Time::Piece)');
    done_testing();
};


done_testing();