#
#===============================================================================
#
#  DESCRIPTION: test all crons are executable except those in @stoplist
#
#===============================================================================

use Modern::Perl '2012';
use utf8;

use Test::More;    # last test to print
use Test::File;

use File::Spec::Functions 'catdir';
use File::Find;

my @stoplist = qw/
  billing_data_compare.pl
  hilis_convert_test.pl
  unsent_diagnosis_status_alert.pl
  manual_xml_transfer.pl
  ~geneq_data_extract.pl
  hsl_data_csv.pl
  genomics_xml_by_curl.pl/;

my @intervals     = qw/hourly daily weekly monthly quarterly multi/;
my $cronsdir      = catdir qw/script crons/;
my %interval_dirs = map { $_ => catdir $cronsdir, $_ } @intervals;

# search through the subdirectories of crons and test the pl files are -x
find( \&wanted, values %interval_dirs );

done_testing();

# runs file_mode_is test only if file ends in .pl and is not in the stoplist
sub wanted {
    # find changes cwd so $_ is just the current filename without path
    my $file = $_;
    /.pl\z/msx
      && not( grep { $file eq $_ } @stoplist )
      # must be read & execuatable by all (write permissions irrelevant here):
      && file_mode_has( $file, 0555, "$File::Find::name is exe" );
}
