The job of a test suite is to alert the developers of a potential problem. Once that's happened, the only value in continuing to fail is to nag and remind them to make a change. In real life sometimes fixing issues takes a long time. If they're already tracking changes in a ticketing system, or actively working on a fix, the failure becomes noise, and can hide other unexpected failures. There should be no such thing as an "okay failure" which can be ignored - you need to stop it failing if the fix is already planned. But you don't want to risk forgetting about it. So you can disable it for a short time, to allow the developer to fix the underlying issue. In the future, perhaps CI frameworks might feature a Nagios-style "acknowledge" function.
This is one solution for now:
use Test::More;
use DateTime;
my $expected_to_fail = (
($test_data = 'foo')
&&
! deadline_has_passed( DateTime->new( year => 2014, month => 11, day => 23 ) # the future
) ? 1 : 0;
SKIP: {
skip "while we do something (ticket ID)", 1 if $expected_to_fail;
ok( "some test" );
}
sub deadline_has_passed {
my ($deadline) = @_;
my $today = DateTime->now; #->add( days => 30 );
my $deadline_has_passed = (DateTime->compare( $today, $deadline ) < 1) ? 0 : 1;
# debug
#note("today = ".$today->ymd);
#note("deadline = ".$deadline->ymd);
#note("compare today,deadline => ". DateTime->compare( $today, $deadline ));
#note("has deadline passed? $deadline_has_passed");
return $deadline_has_passed;
}