#!/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 => 53; # use Test::More 'no_plan'; =begin: tests: =cut BEGIN { require 't/test-lib.pl'; } my $mech = get_mech(); do_login(); my $dbh; eval { $dbh = get_dbh() or die 'no database handle recieved from get_dbh'; }; warn $@ if $@; my $cfg = get_config(); # warn Dumper $cfg->{settings}; # initial_screen profile: $mech->get_ok('/screen/=/1'); # print_and_exit(); { my $cfg = get_config(); # warn Dumper $cfg->{settings}; my %screen = ( screen_id => 1 ); if ($cfg->{settings}->{have_request_audit}) { # now being forced in test_data.pl $screen{option_id} = 1; } else { SKIP: { skip('OK - request audit not in use',2) } } # can't do this now - submitted by j/s function: # test_missing_required(\%screen); print_and_exit(); $mech->get_ok('/screen/do_initial_screen/1?screed_id='); # print_and_exit(); # check we have dfv error: has_dfv_errors(); has_missing(); # print_and_exit(); $mech->get_ok('/screen/do_initial_screen/1?screen_id=1'); # print_and_exit(); # check we have dfv error: has_dfv_errors(); # has_missing(); # doesn't show as settings file overrides test_lib settings $mech->get_ok('/screen/do_initial_screen/1?screen_id=1;option_id=1'); # print_and_exit(); lacks_dfv_errors(); lacks_missing(); } # new_request profile #1 (for GP practice): $mech->get_ok('/request/add_new/1'); # print_and_exit(); { my %new_request = ( # referral_source_id => '', # passed as hidden field referrer_code => 'G1234567', request_number => 2, # duplicate specimen => 'PBX', # invalid ); delete $new_request{request_number} if $cfg->{settings}->{autoincrement_requests}; test_missing_required(\%new_request); # print_and_exit(); $mech->submit_form(fields => \%new_request); # print_and_exit(); has_dfv_errors(); has_invalid(); SKIP: { skip('only applicable if autoincrement_requests off',8) if $cfg->{settings}->{autoincrement_requests}; has_duplicate(); # print_and_exit(); # correct invalid specimen: $new_request{specimen} = 'PB'; $mech->submit_form(fields => \%new_request); # print_and_exit(); has_dfv_errors(); lacks_invalid(); has_duplicate(); # print_and_exit(); # correct duplicate lab_number: $new_request{request_number}++; $mech->submit_form(fields => \%new_request); # print_and_exit(); lacks_dfv_errors(); lacks_invalid(); lacks_duplicate(); # print_and_exit(); }; } # new_request profile #2 (for hospital): $mech->get_ok('/request/add_new/2'); # print_and_exit(); { my %new_request = ( # referral_source_id => '', # passed as hidden field referrer_code => 'C9999998', # unknown clinician request_number => 4, specimen => 'PB, BMAT', trial_number => 'ABC123', # triggers requirement for trial_id ); $mech->submit_form(fields => \%new_request); # print_and_exit(); has_dfv_errors(); has_missing(); # print_and_exit(); # add missing trial_id: $new_request{trial_id} = 1; $mech->submit_form(fields => \%new_request); # print_and_exit(); lacks_dfv_errors(); lacks_missing(); # print_and_exit(); } # new_request profile #3 (test various invalid request_number formats): SKIP: { skip('only applicable if autoincrement_requests off',14) if $cfg->{settings}->{autoincrement_requests}; $mech->get_ok('/request/add_new/2'); # print_and_exit(); my %new_request = ( # referral_source_id => '', # passed as hidden field referrer_code => 'C9999998', # unknown clinician request_number => 300_000, # invalid - fails FV_length_between specimen => 'PB', ); $mech->submit_form(fields => \%new_request); # print_and_exit(); # have invalid field length on request_number: has_dfv_errors(); $mech->content_contains( dfv_format('too_long'), 'OK: invalid field length detected', ); # print_and_exit(); # change request_number to trigger FV_num_int failure: $new_request{request_number} = 33.3; # decimal $mech->submit_form(fields => \%new_request); # print_and_exit(); has_dfv_errors(); $mech->content_contains( dfv_format('need_integer'), 'OK: invalid field format detected', ); # print_and_exit(); # invalid by adding prefix: $new_request{request_number} = 'H3'; $mech->submit_form(fields => \%new_request); # print_and_exit(); has_dfv_errors(); $mech->content_contains( dfv_format('need_integer'), 'OK: invalid field format detected', ); # print_and_exit(); # invalidate by adding year on duplicate request (triggers duplicate AND invalid): $new_request{request_number} = '3/09'; $mech->submit_form(fields => \%new_request); # print_and_exit(); has_dfv_errors(); has_duplicate(); $mech->content_contains( dfv_format('need_integer'), 'OK: invalid field format detected', ); # print_and_exit(); # invalidate by adding year on unique request (triggers invalid only): $new_request{request_number} = '10/09'; $mech->submit_form(fields => \%new_request); # print_and_exit(); has_dfv_errors(); lacks_duplicate(); $mech->content_contains( dfv_format('need_integer'), 'OK: invalid field format detected', ); # print_and_exit(); }; # delete record profile: $mech->get_ok('/request/delete_request/1'); # print_and_exit(); { my %delete = ( reason => 'inappropriate request', confirm_delete => 1, ); test_missing_required(\%delete); # print_and_exit(); $mech->submit_form(fields => \%delete); # print_and_exit(); lacks_dfv_errors(); # print_and_exit(); }