#!/usr/bin/perl use Test::WWW::Mechanize::CGIApp; use Data::Printer; use Test::More; use strict; use warnings; =begin # tests: Load records into registration form using request_form table pre-populated with NGIS request details. Does not actually regsiter a new request. Tests for correct operation of required_external_reference function. Tests for presence & absence of required_external_ref session key =cut BEGIN { require 't/test-lib.pl'; } my $mech = get_mech(); my $dbh; eval { $dbh = get_dbh() or die 'no database handle recieved from get_dbh'; }; warn $@ if $@; my $dbix = get_dbix(); my $cfg = get_config(); # p $cfg->{settings}; exit; drop_and_recreate($_) for qw/request_form/; do_login(); my $ngis_id_1 = 'D000001'; my $ngis_id_2 = 'D000002'; { # new db entries: # GeNEQ location (check it exist or create new): unless ( $dbix->select( 'referral_sources', 1, { organisation_code => 'GENEQN' } )->list ) { $dbix->insert('parent_organisations', { parent_code => 'GENEQN', description => 'GENEQ NEWCASTLE', referral_type_id => 3 }); my $parent_id = get_last_insert_id('parent_organisations'); my %h = ( display_name => 'GeNEQ Newcastle', organisation_code => 'GENEQN', parent_organisation_id => $parent_id, referral_type_id => 3 ); $dbix->insert('referral_sources', \%h); } unless ( $dbix->select( 'referral_sources', 1, { organisation_code => 'GENEQS' } )->list ) { $dbix->insert('parent_organisations', { parent_code => 'GENEQS', description => 'GENEQ SHEFFIELD', referral_type_id => 3 }); my $parent_id = get_last_insert_id('parent_organisations'); my %h = ( display_name => 'GeNEQ Sheffield', organisation_code => 'GENEQS', parent_organisation_id => $parent_id, referral_type_id => 3 ); $dbix->insert('referral_sources', \%h); } # referrer & referrer_department for GeNEQ location (check exist or create new): unless ( $dbix->select( 'referrers', 1, { national_code => 'C2345678' })->list ) { $dbix->insert('referrers', { name => 'White A', national_code => 'C2345678', referral_type_id => 1 }); my $ref_id = get_last_insert_id('referrers'); $dbix->select('parent_organisations', 'id', { parent_code => 'GENEQN' }) ->into(my $parent_id); $dbix->insert('referrer_department', { parent_organisation_id => $parent_id, referrer_id => $ref_id, hospital_department_code => 823 }); # haem OK for this } # referrer & referrer_department for GeNEQ location (check exist or create new): unless ( $dbix->select( 'referrers', 1, { national_code => 'C3456789' })->list ) { $dbix->insert('referrers', { name => 'Silver A', national_code => 'C3456789', referral_type_id => 1 }); my $ref_id = get_last_insert_id('referrers'); $dbix->select('parent_organisations', 'id', { parent_code => 'GENEQS' }) ->into(my $parent_id); $dbix->insert('referrer_department', { parent_organisation_id => $parent_id, referrer_id => $ref_id, hospital_department_code => 823 }); # haem OK for this } { # register 2 new request_form rows: { my $ref_src_id = $dbix->select('referral_sources', 'id', { organisation_code => 'GENEQN' })->list; my %h = ( # patient already registered in patients: id => $ngis_id_2, last_name => 'brown', first_name => 'stan', dob => '1960-04-10', gender => 'M', nhs_number => 2222222222, location_name => 'GeNEQ Newcastle', location_id => $ref_src_id, user_id => 1, referrer => 'White A [Molecular Genetics]', requested_by => 'Black T' ); $dbix->insert('request_form', \%h); } { my $ref_src_id = $dbix->select('referral_sources', 'id', { organisation_code => 'GENEQS' })->list; my %h = ( # patient doesn't already exist: id => $ngis_id_1, last_name => 'gray', first_name => 'olive', dob => '1966-07-11', gender => 'F', nhs_number => 3333333333, location_name => 'GeNEQ Sheffield', location_id => $ref_src_id, user_id => 1, referrer => 'Silver E [Molecular Genetics]', requested_by => 'Brown S' ); $dbix->insert('request_form', \%h); } } } { # new request for patient not already registered: $mech->get_ok('/register'); # print_and_exit(); $mech->form_name('request_form'); $mech->submit_form( fields => { id => $ngis_id_1 } ); # print_and_exit(); $mech->content_contains( 'Found 0 records', 'OK: record loaded'); # session has required_external_ref key: $mech->get_ok('/test/dump_session'); # print_and_exit(); $mech->content_contains('required_external_ref', 'OK: session contains expected key'); # back to form: $mech->back(); # print_and_exit(); $mech->submit(); $mech->content_contains( 'New request', 'OK: patient record not loaded'); # print_and_exit(); is( $mech->field('external_reference'), $ngis_id_1, 'OK: expected NGIS id loaded as external ref' ); # session no longer contains required_external_ref: $mech->get_ok('/test/dump_session'); # print_and_exit(); $mech->content_lacks('required_external_ref', 'OK: expected session key cleared'); } { # new request for patient who *is* already registered: $mech->get_ok('/register'); # print_and_exit(); $mech->form_name('request_form'); $mech->submit_form( fields => { id => $ngis_id_2 } ); # print_and_exit(); $mech->text_contains( 'Found 1 record', 'OK: patient record loaded'); # session has required_external_ref key: $mech->get_ok('/test/dump_session'); # print_and_exit(); $mech->content_contains('required_external_ref', 'OK: session contains expected key'); # print_and_exit(); # back to form: $mech->back(); # print_and_exit(); $mech->follow_link_ok( { url_regex => qr/select/i }, 'select patient using link' ); # print_and_exit(); $mech->text_contains('Add new location', 'OK: have new location textbox'); $dbix->select('referral_sources', 'id', { organisation_code => 'GENEQN' }) ->into( my $ref_src_id ); # warn $ref_src_id; $mech->field( referral_source_id => $ref_src_id ); # don't need unit num or location name $mech->submit(); # print_and_exit(); $mech->content_contains( 'New request', 'OK: record loaded' ); # print_and_exit(); is( $mech->field('external_reference'), $ngis_id_2, 'OK: expected NGIS id loaded as external ref' ); # session no longer contains required_external_ref: $mech->get_ok('/test/dump_session'); # print_and_exit(); $mech->content_lacks('required_external_ref', 'OK: expected session key cleared'); } { # register same patient as above but to other location, check NGIS id NOT loaded: $mech->get_ok('/register'); # print_and_exit(); $mech->form_name('register'); $mech->submit_form( fields => { patient_no => 2222222222 } ); # print_and_exit(); $mech->text_contains( 'Found 1 record', 'OK: patient record loaded'); # session does not contain required_external_ref: $mech->get_ok('/test/dump_session'); # print_and_exit(); $mech->content_lacks('required_external_ref', 'OK: session does not contain required_external_ref key'); # back to form: $mech->back(); # print_and_exit(); $mech->follow_link_ok( { url_regex => qr/select/i }, 'select patient using link' ); # print_and_exit(); $mech->text_contains('Add new location', 'OK: have new location textbox'); # there are 2 'new' links, select 1st: $mech->follow_link_ok( { text => 'New', n => 1 }, 'following 1st link to New' ); # print_and_exit(); $mech->text_contains( 'Newtown General Infirmary', 'OK: expected location found'); is( $mech->field('external_reference'), '', 'OK: external ref field blank'); # repeat and select 2nd link (GeNEQ Newcastle location): $mech->get_ok('/register'); # print_and_exit(); $mech->form_name('register'); $mech->submit_form( fields => { patient_no => 2222222222 } ); # print_and_exit(); $mech->text_contains( 'Found 1 record', 'OK: patient record loaded' ); # session does not contain required_external_ref: $mech->get_ok('/test/dump_session'); # print_and_exit(); $mech->content_lacks('required_external_ref', 'OK: session does not contain required_external_ref key'); # back to form: $mech->back(); # print_and_exit(); $mech->follow_link_ok( { url_regex => qr/select/i }, 'select patient using link' ); # print_and_exit(); # there are 2 'new' links, select 2nd: $mech->follow_link_ok( { text => 'New', n => 2 }, 'following 2nd link to New' ); # print_and_exit(); $mech->text_contains( 'GeNEQ Newcastle', 'OK: expected location found'); is( $mech->field('external_reference'), '', 'OK: external ref field blank'); } done_testing(39);