use 5.010; use strict; use warnings; use lib 't'; use Test::Most; use testlib::Fixtures; use DateTime; use App::TimeTracker; my $tmp = testlib::Fixtures::setup_tempdir; my %BASE = ( home=>$tmp, config=>{} ); { # $self->now my $exp = DateTime->now(time_zone=>'local'); my $got = App::TimeTracker->now; is($exp->ymd,$got->ymd,'$self->now: ymd'); is($exp->strftime('%H:%M'),$got->strftime('%H:%M'),'$self->now: hh:mm'); } { # beautify_seconds my @tests = ( [undef, '0'], ['0', '0'], ['59', '00:00:59'], ['60', '00:01:00'], ['61', '00:01:01'], ['263', '00:04:23'], [3*60*60, '03:00:00'], [(4*60*60)+(42*60)+21, '04:42:21'], [(18*60*60), '18:00:00'], [(111*60*60)+11, '111:00:11'], ); foreach (@tests) { is(App::TimeTracker->beautify_seconds($_->[0]),$_->[1],join(' -> ',map { $_ // 'UNDEF'} @$_)); } } { # tags my $t = App::TimeTracker->new(\%BASE); cmp_bag($t->tags,[],'no tags'); $t->add_tag('1'); $t->add_tag('2'); $t->insert_tag('3'); cmp_deeply($t->tags,[3,1,2],'some tags'); } { # to / from my $class = Moose::Meta::Class->create_anon_class( superclasses => ['App::TimeTracker'], roles => ['App::TimeTracker::Command::Core'], ); my $class_name = $class->name; $class_name->_load_attribs_worked($class); no warnings 'redefine'; local *DateTime::now = sub { return DateTime->new( year => 2011, month => 9, day => 7, hour => 12 ) }; { my $t1 = $class_name->new({ %BASE, this => 'week', }); is($t1->from->iso8601,'2011-09-05T00:00:00','From 1 ok'); is($t1->to->iso8601,'2011-09-11T23:59:59','To 1 ok'); } { my $t2 = $class_name->new({ %BASE, last => 'week', }); is($t2->from->iso8601,'2011-08-29T00:00:00','From 2 ok'); is($t2->to->iso8601,'2011-09-04T23:59:59','To 2 ok'); } { my $t3 = $class_name->new({ %BASE, last => 'month', }); is($t3->from->iso8601,'2011-08-01T00:00:00','From 3 ok'); is($t3->to->iso8601,'2011-08-31T23:59:59','To 3 ok'); } { my $t4 = $class_name->new({ %BASE, last => 'day', }); is($t4->from->iso8601,'2011-09-06T00:00:00','From 4 ok'); is($t4->to->iso8601,'2011-09-06T23:59:59','To 4 ok'); } } done_testing();