package Test::Unit::Time::Progress::Stored;
use Test::More;
use Test::Deep;
use autobox::Core;
use Time::Progress::Stored;
subtest test__happy_path => sub {
my $max = 42;
my $progress = Time::Progress::Stored->new({
max => $max,
});
is($progress->current, 0, "Initial current correct");
ok( my $id = $progress->progress_id, "Got an id");
is( $progress->storage->id__report->keys->size, 1, "One report" );
my $storage = $progress->storage;
{
my $key__value = $storage->retrieve($id);
eq_deeply(
$key__value,
{
id => $id,
max => $max,
current => 0,
elapsed_seconds => 0,
elapsed_time => " 0:00",
finish_time => re(qr/^[\w :]+$/),
percent_string => " 0.0%",
percent => 0,
remaining_seconds => 0,
remaining_time => " 0:00",
is_done => 0,
activity => "",
},
"Initial report looks alright",
);
}
sleep(1);
$progress->advance();
{
my $key__value = $storage->retrieve($id);
eq_deeply(
$key__value,
{
id => $id,
max => $max,
current => 1,
elapsed_seconds => 1,
elapsed_time => " 0:01",
finish_time => re(qr/^[\w :]+$/),
percent_string => " 2.4%",
percent => 2.4,
remaining_seconds => re(qr/\d+/),
remaining_time => re(qr/^ 0:\d\d$/),
is_done => 0,
activity => "",
},
"Next report looks alright",
);
}
for (1 .. 41) {
$progress->advance();
}
sleep(1);
{
my $key__value = $storage->retrieve($id);
eq_deeply(
$key__value,
{
id => $id,
max => $max,
current => $max,
elapsed_seconds => 2,
elapsed_time => " 0:01",
finish_time => re(qr/^[\w :]+$/),
percent_string => "100.0%",
percent => 0,
remaining_seconds => 0,
remaining_time => " 0:00",
is_done => 0,
activity => "",
},
"All items report looks alright",
);
}
$progress->done();
{
my $key__value = $storage->retrieve($id);
eq_deeply(
$key__value,
{
id => $id,
max => $max,
current => $max,
elapsed_seconds => 2,
elapsed_time => " 0:02",
finish_time => re(qr/^[\w :]+$/),
percent_string => "100.0%",
percent => 100,
remaining_seconds => 0,
remaining_time => " 0:00",
is_done => 1,
activity => "",
},
"Done report looks alright",
);
}
};
done_testing();