#!/usr/bin/perl
# just testing for dfv errors using LIMS::Validation profiles:
use Test::WWW::Mechanize::CGIApp;
use Data::Dumper;
use strict;
use warnings;
use Test::More tests => 25; # use Test::More 'no_plan';
=begin: tests:
1)
=cut
BEGIN {
require 't/test-lib.pl';
}
my $mech = get_mech();
do_login();
my $dbh;
eval {
$dbh = get_dbh() or die 'no database handle received from get_dbh';
};
warn $@ if $@;
# 'search' profile (dob):
$mech->get_ok('/search'); # print_and_exit();
{
my %date_fields = (
dob_day => 31,
dob_month => 1,
dob_year => 60, # too short
);
$mech->submit_form( fields => \%date_fields ); # print_and_exit();
$mech->content_contains(
dfv_format('year_digits'),
'OK: year data length incorrect',
);
# year -> valid:
$date_fields{dob_year} += 1900;
# month -> invalid:
$date_fields{dob_month}++;
$mech->submit_form( fields => \%date_fields ); # print_and_exit();
_has_invalid_date($mech);
# month -> valid:
$date_fields{dob_month}++;
# year -> future:
$date_fields{dob_year} = DateTime->now->year() + 1;
$mech->submit_form( fields => \%date_fields ); # print_and_exit();
$mech->content_contains(
dfv_format('future_date'),
'OK: date in future detected OK',
);
# submit dob with missing year:
$date_fields{dob_year} = undef; # warn Dumper \%date_fields;
$mech->submit_form( fields => \%date_fields ); # print_and_exit();
has_missing();
# dob -> valid:
$date_fields{dob_year} = DateTime->now->year() - 1;
$mech->submit_form( fields => \%date_fields ); # print_and_exit();
lacks_invalid();
}
{ # some invalid date formats (tests date validator after it failed to detect yr = 19.7:
$mech->get_ok('/search');
my %date_fields = ( dob_day => 1, dob_month => 1 );
$date_fields{dob_year} = '19.7';
$mech->submit_form( fields => \%date_fields ); # print_and_exit();
_has_invalid_date($mech);
$date_fields{dob_year} = '19-7';
$mech->submit_form( fields => \%date_fields );
_has_invalid_date($mech); # print_and_exit();
$date_fields{dob_year} = '19+7';
$mech->submit_form( fields => \%date_fields );
_has_invalid_date($mech); # print_and_exit();
$date_fields{dob_year} = '19o7';
$mech->submit_form( fields => \%date_fields );
_has_invalid_date($mech); # print_and_exit();
$date_fields{dob_year} = '19/7';
$mech->submit_form( fields => \%date_fields );
_has_invalid_date($mech); # print_and_exit();
$date_fields{dob_year} = '+222';
$mech->submit_form( fields => \%date_fields );
_has_invalid_date($mech); # print_and_exit();
$date_fields{dob_year} = '1957';
$date_fields{dob_month} = 'may';
$mech->submit_form( fields => \%date_fields );
_has_invalid_date($mech); # print_and_exit();
}
# 'search' profile (specimen_code):
$mech->get_ok('/search'); # print_and_exit();
{
$mech->field( specimen_code => 'BM');
$mech->submit_form(); # print_and_exit();
has_invalid();
$mech->field( specimen_code => 'BMA, PB'); # multiple specimens not supported
$mech->submit_form(); # print_and_exit();
$mech->content_contains(
dfv_format('alphanumeric'),
'OK: invalid characters detected',
);
}
# 'search' profile (nhs_number):
$mech->get_ok('/search'); # print_and_exit();
{
$mech->field( nhs_number => 123456789 );
$mech->submit_form(); # print_and_exit();
has_invalid();
$mech->field( nhs_number => '0123456789' );
$mech->submit_form(); # print_and_exit();
lacks_invalid();
# copes OK with spaces:
$mech->field( nhs_number => '012 345 6789 ' );
$mech->submit_form(); # print_and_exit();
lacks_invalid();
}
sub _has_invalid_date {
shift->content_contains(
dfv_format('invalid_date'),
'OK: invalid date detected',
);
}