#!/usr/bin/perl use Test::WWW::Mechanize::CGIApp; use strict; use warnings; use DateTime; use POSIX; use Test::More tests => 69; # use Test::More 'no_plan'; BEGIN { require 't/test-lib.pl'; use DateTime; DateTime->DefaultLocale('en_GB'); } my $mech = get_mech(); my $dbh; eval { $dbh = get_dbh() or die 'no database handle recieved from get_dbh'; }; warn $@ if $@; do_login(); =begin # tests: 1) test invalid dobs (31/Feb, future date, 2-digit yr, non-leap-yr 29/Feb) 2) test valid leap-yr 29/Feb as dob 3) test today as dob 4) test valid last_name 5) test valid last_name & first_name 6) submit invalid nhs_no in patient_no field & check it's loaded into unit_number field 6) submit valid nhs_no in patient_no field & check it's loaded into nhs_number field 7) submit registration form with each of required fields missing 8) submit registration form with unit_number registered to different patient 9) submit registration form with complete details & minimal details =cut my %patient = ( last_name => 'bloggs', first_name => 'joe', middle_name => 'david', day => 31, month => 1, year => 1960, nhs_no => '0123456789', dob => '31-01-1960', sex => 'M', unit_no => 1011, # already exists in test_data.sql ); my $dt = DateTime->now; # warn $dt; # test invalid dobs: $mech->get_ok('/register'); # print_and_exit(); { $mech->submit_form( fields => { day => 31, month => 2, year => 2007, } ); # print_and_exit(); has_dfv_errors(); $mech->has_tag_like( span => qr(invalid), 'OK: invalid date detected', ); # print_and_exit(); # 1 yr in future: $mech->submit_form( fields => { day => 2, month => 2, year => $dt->year + 1, } ); # print_and_exit(); has_dfv_errors(); $mech->has_tag_like( span => qr(invalid), 'OK: invalid date detected', ); # print_and_exit(); # 2-digit yr: $mech->submit_form( fields => { day => 2, month => 2, year => 66, } ); # print_and_exit(); has_dfv_errors(); $mech->has_tag_like( span => qr(invalid), 'OK: invalid date detected', ); # print_and_exit(); # invalid 29th Feb - non-leap yr: $mech->submit_form( fields => { day => 29, month => 2, year => 2003, } ); # print_and_exit(); has_dfv_errors(); $mech->has_tag_like( span => qr(invalid), 'OK: invalid non-leap-yr 29th Feb detected', ); # print_and_exit(); # valid 29th Feb - leap yr: $mech->submit_form( fields => { day => 29, month => 2, year => 2004, } ); # print_and_exit(); $mech->content_lacks( get_messages('dfv_errors'), 'valid leap-yr 29th Feb passed OK', ); } $mech->get_ok('/register'); # print_and_exit(); # valid dob: { # handles today OK: $mech->submit_form( fields => { day => $dt->day, month => $dt->month, year => $dt->year, } ); # print $fh $mech->content; lacks_dfv_errors(); my $today = $dt->dmy; $mech->content_contains( "Found 0 records matching dob=$today", 'OK: searched on correct dob value', ); $mech->back; # print_and_exit(); # submit valid dob: $mech->submit_form( fields => { day => $patient{day}, month => $patient{month}, year => $patient{year}, } ); # print_and_exit(); $mech->content_contains( "Found 0 records matching dob=$patient{dob}", 'OK: searched on correct dob value', ); # dates re-loaded back into form: is( $mech->value('day', 1), $patient{day}, 'value for day reloaded ok' ); is( $mech->value('month', 1), $patient{month}, 'value for month reloaded ok' ); is( $mech->value('year', 1), $patient{year}, 'value for year reloaded ok' ); } # print_and_exit(); $mech->back(); # print_and_exit(); # submit valid name (single value): { $mech->submit_form( fields => { name => $patient{last_name}, day => $patient{day}, month => $patient{month}, year => $patient{year}, }, ); # print_and_exit(); $mech->content_contains( "Found 0 records matching name=$patient{last_name} & dob=$patient{dob}", 'OK: searched on correct last_name & dob values', ); is( $mech->value('last_name', 1), $patient{last_name}, 'value for last_name loaded ok' ); is( $mech->value('first_name', 1), '', 'value for first_name loaded ok' ); } $mech->back; # print_and_exit(); # submit valid name (double value): { my ($last_name,$first_name,$dob) = @patient{ qw(last_name first_name dob) }; $mech->submit_form( fields => { name => join ',', $last_name, $first_name, }, ); # print_and_exit(); $mech->content_contains( "Found 0 records matching name=$last_name,$first_name", 'OK: searched on correct last_name & first_name values', ); is( $mech->value('last_name', 1), $last_name, 'value for last_name loaded ok' ); is( $mech->value('first_name', 1), $first_name, 'value for first_name loaded ok' ); } $mech->back; # print_and_exit(); # submit patient_no that's not a valid nhs_number: { my $patient_no = '0123456787'; $mech->submit_form( fields => { patient_no => $patient_no, }, ); # print_and_exit(); my ($last_name,$first_name,$dob) = @patient{ qw(last_name first_name dob) }; $mech->content_contains( "Found 0 records matching patient_no=$patient_no", 'OK: searched on correct patient_no value', ); is( $mech->value('unit_number', 1), $patient_no, 'value for patient_no loaded into unit_number field ok' ); is( $mech->value('nhs_number', 1), '', 'ok: value for patient_no not loaded into nhs_number field' ); } # print_and_exit(); $mech->back; # submit patient_no that's IS a valid nhs_number: { my ($last_name,$first_name,$nhs_no, $dob) = @patient{ qw(last_name first_name nhs_no dob) }; $mech->submit_form( fields => { patient_no => $nhs_no, }, ); # print_and_exit(); $mech->content_contains( "Found 0 records matching patient_no=$nhs_no", 'OK: searched on correct patient_no value', ); is( $mech->value('nhs_number', 1), $nhs_no, 'value for patient_no loaded into nhs_number field ok' ); is( $mech->value('unit_number', 1), '', 'ok: value for patient_no not loaded into unit_number field' ); } # ok, tested all parsing functions, reload new form & start again $mech->get_ok('/register'); { my ($last_name,$first_name,$middle_name,$nhs_no,$sex,$day,$month,$year,$unit_no) = @patient{ qw(last_name first_name middle_name nhs_no sex day month year unit_no) }; $mech->submit_form( fields => { name => join ',', $last_name, $first_name, }, ); # print_and_exit(); # submit incomplete form: $mech->submit_form(); # print_and_exit(); has_dfv_errors(); has_missing(); has_formvalidator_error( get_messages('require_one') ); # print_and_exit(); # add nhs_number to clear missing require_one field: $mech->submit_form( fields => { nhs_number => $nhs_no, }, ); # print_and_exit(); has_dfv_errors(); has_missing(); is( $mech->value('nhs_number', 1), $nhs_no, 'NHS number OK' ); # add gender: $mech->field('gender', $sex); # $mech->set_visible( [ radio => 'M' ] ); $mech->submit; has_dfv_errors(); has_missing(); is( $mech->value('gender', 1), $sex, 'Gender value OK' ); # print_and_exit(); # add dob : $mech->submit_form( fields => { day => $day, month => $month, year => $year, } ); # print_and_exit(); is( $mech->value('day', 1), $day, 'value for day reloaded ok' ); # print_and_exit(); is( $mech->value('month', 1), $month, 'value for month reloaded ok' ); # print_and_exit(); # is( $mech->value('year', 1), $year, 'value for year reloaded ok' ); # print_and_exit(); # has_dfv_errors(); has_missing(); # print_and_exit(); # add source_id to clear missing data msg: $mech->field('referral_source_id',1); # add (duplicate) unit_number & middle_name to complete all fields: $mech->field('unit_number', $unit_no); $mech->field('middle_name', $middle_name); # print_and_exit(); $mech->submit_form(); # print_and_exit(); $mech->content_contains( 'Potential duplicate record. Unit No. and/or NHS No. matches', 'OK: potential duplicate record detected', ); $mech->content_contains( "$unit_no", 'OK: potential duplicate unit_number highlighted detected', ); # increment unit number & resubmit: $mech->field('unit_number', $unit_no +1); $mech->submit_form(); # print_and_exit(); # check registration OK: $mech->content_contains( 'Request » New', 'new patient registered OK', ); my $first_names = join ' ', ($first_name, $middle_name); my $formatted_dob = DateTime->new( year => $year, month => $month, day => $day, formatter => get_formatter() ); my $i=0; my $output = 'OK: patient demographics field [%s] detected'; # check all fields detected OK: foreach ( uc $last_name, $nhs_no, $unit_no +1, $formatted_dob, $sex) { $mech->content_contains( "$_", sprintf $output, ++$i, ); } foreach ( $first_name, $middle_name ) { $mech->content_like( qr($_)i, sprintf $output, ++$i, ); } } # print_and_exit(); # check can register with minimum fields: $mech->get_ok('/register'); # print_and_exit(); { my ($last_name,$first_name,$middle_name,$nhs_no,$sex,$day,$month,$year,$unit_no) = @patient{ qw(last_name first_name middle_name nhs_no sex day month year unit_no) }; $mech->submit_form( fields => { name => $last_name, }, ); # print_and_exit(); $mech->content_contains( "Found 1 record matching name=$last_name", 'OK: found 1 matching record', ); # want to create new patient so follow 'new patient' link: $mech->follow_link_ok( # {n => 8}, "Logout $_ via eighth link on page", { url_regex => qr/patient/i, }, 'follow "new patient" link', ); # print_and_exit(); # change day so it's different patient: $day--; $mech->submit_form( fields => { first_name => $first_name, referral_source_id => 1, gender => $sex, day => $day, month => $month, year => $year, }, ); # print_and_exit(); # check we have 'require_one' error message: has_formvalidator_error( get_messages('require_one') ); # increment unit_number so it's unique: $unit_no++; $mech->field('unit_number', $unit_no); $mech->submit_form(); # print_and_exit(); my $formatted_dob = DateTime->new( year => $year, month => $month, day => $day, formatter => get_formatter() ); my $i=0; my $output = 'OK: patient demographics field [%s] detected'; foreach ( uc $last_name, $unit_no, $formatted_dob, $sex) { $mech->content_contains( "$_", sprintf $output, ++$i, ); } # check we have a NULL field (for nhs_number): $mech->content_contains( q![NULL]!, 'OK: NULL (nhs_number) field detected' ); # print_and_exit(); } do_logout();