#!/usr/bin/perl use DateTime; use Data::Dumper; use Test::Builder::Tester; use Test::WWW::Mechanize::CGIApp; use strict; use warnings; use Test::More tests => 42; # use Test::More 'no_plan'; =begin # tests: 0) create new data for tests - outcome not tested 1) update nothing just test required field error_code 2) update day value in dob 3) change nhs_number to make identical entry to one already existing =cut require 't/test-lib.pl'; my $mech = get_mech(); # login/logout tests handled by test-lib.pl do_login(); # print $fh $mech->content; # exit; # create some new patient/request/patient_case records for this test suite: { my $dbix = get_dbix(); my $year = DateTime->now->year(); my $now = DateTime->now(); # new data: my %new = ( patients => [ [ qw( green alan 1940-02-11 M ), undef, $now ], # duplicate of #1 without nhs_no ], patient_case => [ # patient_id, referral_source_id, unit_number [ 3, 2, 1011 ], ], requests => [ # yr, request_id, patient_case_id, referrer_dept_id, now [ $year, 3, 3, 2, $now ], # hospital referral ], request_specimen => [ # request_id, specimen_id [ 3, 1 ], ], ); my $test_data = get_test_data(); while ( my ($tbl, $data) = each %new ) { # warn $tbl, "\n"; my $fields = $test_data->{$tbl}->{fields}; # warn Dumper $fields; foreach my $data_set (@$data) { # warn $data_set, "\n"; my $i = 0; # map field_name to its value: my %data = map { $fields->[$i++] => $_ } @$data_set; # warn Dumper \%data; $dbix->insert($tbl, \%data); } } } { # update nothing just test required field error_code: # load request_edit page direct: $mech->get_ok('/search/=/3'); # print_and_exit(); $mech->follow_link_ok( # {n => 8}, "Logout $_ via eighth link on page", { url_regex => qr(patient/edit_patient), }, 'edit patient using link', ); # print_and_exit(); # no changes, just tests 'error_code': $mech->submit_form(); # print_and_exit(); has_dfv_errors(); has_missing(); $mech->field( error_code_id => 1 ); $mech->submit_form(); # print_and_exit(); # should have 'no changes' msg instead of 'edit success': $mech->content_lacks( get_messages('action')->{edit_success}, 'OK: edit success message not present', ); $mech->content_contains( get_messages('request_edit')->{edit_failed}, 'OK: no changes detected message present', ); # print_and_exit(); } # update day value in dob: { $mech->get_ok('/patient/edit_patient/3/3'); # print_and_exit(); $mech->field(day => 1); $mech->field( error_code_id => 1 ); $mech->submit_form(); # print_and_exit(); has_edit_success(1); # check fields are as expected: $mech->content_contains( '01.Feb.1940', 'OK: new dob value detected', ); test_out( 'not ok 1 - foo' ); test_fail( +1 ); $mech->has_tag( td => '21.Feb.1940', 'foo' ); test_test( 'OK: old dob value not detected' ); # print_and_exit(); # check history: $mech->get_ok('/history/=/3'); # print_and_exit(); $mech->has_tag_like( h3 => 'Patient demographics', 'OK: expected history found', ); # print_and_exit(); foreach ( qw/dob 11-02-1940 01-02-1940/ ) { $mech->has_tag( td => $_, 'OK: expected history found', ); # print_and_exit(); } } # change nhs_number to make identical entry to one already existing: { my $null_nhs_number = '' . '(\s+)\[NULL\]'; # first make sure both records exist on green: $mech->get('/search/do_search?last_name=green;entries_per_page=10'); #print_and_exit(); $mech->text_contains( 'Search returned 2 matches', 'OK: expected number of records returned', ); # print_and_exit(); foreach ('111 111 1111','\[NULL\]') { $mech->content_like( qr((\s+)$_), 'OK: expected nhs_number found', ); } # print_and_exit(); $mech->get_ok('/search/=/3'); # print_and_exit(); # check nhs_number is null: $mech->content_like( qr($null_nhs_number), 'OK: expected nhs_number found', ); $mech->get_ok('/patient/edit_patient/3/3'); # print_and_exit(); # check we have option of selecting other patient entry: $mech->has_tag( span => 'INFO: change affects this record only', 'OK: single record change only', ); # check similar patient data loaded: $mech->has_tag( p => 'Usage: select another patient record or edit current record', 'OK: similar entries found' ); foreach( qw/GREEN Alan 01.Feb.1940 1111111111/ ) { $mech->has_tag( td => $_, 'OK: expected field detected' ); } $mech->has_tag_like( li => 1011, 'OK: expected field detected' ); $mech->field( nhs_number => 1111111111); $mech->field( error_code_id => 1 ); $mech->submit_form(); # print_and_exit(); has_dfv_errors(); has_duplicate(); # print_and_exit(); # select 'use this' instead: $mech->field( nhs_number => undef); $mech->field( use_patient_id => 1 ); $mech->submit_form(); # print_and_exit(); has_edit_success(1); # check nhs_number has changed: $mech->has_tag_like( td => qr(111 111 1111), 'OK: new nhs_number found', ); # retrieve both records on green: $mech->get('/search/do_search?last_name=green;entries_per_page=10'); $mech->text_contains( 'Search returned 2 matches', 'OK: expected number of records returned', ); # print_and_exit(); $mech->has_tag_like( td => qr(111 111 1111), 'OK: expected nhs_number found', ); # shouldn't have old nhs_number anymore: test_out( 'not ok 1 - foo' ); test_fail( +1 ); $mech->has_tag_like( td => qr(\[NULL\]), 'foo' ); test_test( 'OK: old nhs_number not detected' ); # print_and_exit(); # check history: $mech->get_ok('/history/=/3'); # print_and_exit(); $mech->get('/search/do_search?last_name=green;entries_per_page=10'); #print_and_exit(); } do_logout(); sub has_edit_success { my $i = shift; my $msg = sprintf get_messages('request_edit')->{edit_success}, $i; $msg =~ s/([\(\)])/\\$1/g; # need to escape parens in edit_success msg or qr fails $mech->has_tag_like( p => qr(INFO: $msg), 'OK: edit action succeeded', ); }