diff --git a/lib/Mojolicious/Plugin/Minion/resources/templates/minion/jobs.html.ep b/lib/Mojolicious/Plugin/Minion/resources/templates/minion/jobs.html.ep
index b8bade1..80a13c6 100644
--- a/lib/Mojolicious/Plugin/Minion/resources/templates/minion/jobs.html.ep
+++ b/lib/Mojolicious/Plugin/Minion/resources/templates/minion/jobs.html.ep
@@ -130,8 +130,8 @@
inactive
% }
- % if (grep { $job->{state} eq $_ } qw(active finished failed)) {
- % my $end = $job->{state} eq 'active' ? 'time' : 'finished';
+ % my $end = $job->{state} eq 'active' ? 'time' : 'finished';
+ % if ((grep { $job->{state} eq $_ } qw(active finished failed)) && defined $job->{started} && defined $job->{$end}) {
% my $runtime = $job->{$end} - $job->{started};
<%= $runtime %>
diff --git a/t/pg_admin.t b/t/pg_admin.t
index 92259c5..213d325 100644
--- a/t/pg_admin.t
+++ b/t/pg_admin.t
@@ -59,6 +59,15 @@ subtest 'Jobs' => sub {
->text_unlike('tbody td a' => qr/$inactive/);
};
+subtest 'Failed job without timestamps' => sub {
+ my $stuck = app->minion->enqueue('test');
+ app->minion->backend->pg->db->query("UPDATE minion_jobs SET state = 'failed' WHERE id = ?", $stuck);
+ my @warnings;
+ local $SIG{__WARN__} = sub { push @warnings, $_[0] };
+ $t->get_ok('/minion/jobs?state=failed')->status_is(200)->text_like('tbody td a' => qr/$stuck/);
+ is_deeply \@warnings, [], 'no uninitialized value warnings';
+};
+
subtest 'Workers' => sub {
$t->get_ok('/minion/workers')->status_is(200)->element_exists_not('tbody td a');
my $worker = app->minion->worker->register;
|