missing use autobox, die to spot sub name error, code now runs and explodes rather...
[engit/Iron-Munger.git] / t / calculate.t
CommitLineData
c91c4ca1 1use strict;
2use warnings;
3use Test::More qw(no_plan);
4
c91c4ca1 5BEGIN {
6 use_ok 'IronMunger::Post';
7 use_ok 'IronMunger::Calculate';
8}
9
38827ef4 10use autobox;
11use autobox::DateTime::Duration;
12use signatures;
13
c91c4ca1 14sub named_eq ($test_name, $sub_name, $expected, @posts) {
15 my $sub_ref = IronMunger::Calculate->can($sub_name);
38827ef4 16 die "Couldn't find $sub_name in IronMunger::Calculate" unless $sub_ref;
c91c4ca1 17 my $sub_description = join(' ', split '_', $sub_name);
18 cmp_ok(
19 $sub_ref->(@posts), '==', $expected,
20 "${test_name}: ${expected} ${sub_description}",
21 );
22}
23
24sub case ($name_spec, $case, $expect) {
25 my $name = join(' ', map ucfirst, split '_', $name_spec);
26 my @posts = map { IronMunger::Post->new(at => $_) } @$case;
27 foreach my $test (sort keys %$expect) {
28 named_eq($name, $test, $expect->{$test}, @posts);
29 }
30}
31
32sub expect (%expect) {
33 +{
34 successful_sequential_posts => $expect{sequential},
35 days_remaining_to_post => $expect{remaining},
36 };
37}
38
39case two_posts_ok =>
40 [ 5->days->ago, 13->days->ago ],
41 expect
42 sequential => 2,
43 remaining => 5;
44
45case two_posts_too_far_apart =>
46 [ 5->days->ago, 20->days->ago ],
47 expect
48 sequential => 1,
49 remaining => 5;