RSS Git Download  Clone
Raw Blame History
use IO::Uncompress::Gunzip qw(gunzip $GunzipError);
use XML::Simple qw(:strict);
use Test::WWW::Mechanize;
use Data::Printer;
use Modern::Perl; # say
use Test::More;
use IO::All;

=begin # tests:
=cut

BEGIN {
    require 't/test-lib.pl';
	# override genomics db for genomics_xml.pl:
	$ENV{TEST_DBNAME} = 'lims_test';
}

my $mech = get_mech();
my $dbix = get_dbix();
my $cfg  = get_config(); # p $cfg;

create_genomics_data(); # drop & recreate tables/data
# execute genomics_xml.pl:
system $cfg->{path_to_app_root} . '/script/crons/hourly/genomics_xml.pl';

my $xml;
{
	my $gz = '/tmp/lims_test.gz';
    gunzip $gz => \$xml or die "gunzip failed: $GunzipError\n"; # p $xml;
}
{ # compare src data and parsed xml:
	my $ref = XMLin($xml, ForceArray => 0, KeyAttr => []); # p $ref->{Record};
	my $src = do '/tmp/lims_test.txt'; # p $src; # http://www.perlmonks.org/?node_id=304068
	is_deeply($src, $ref->{Record}, 'data structures identical');
}
# delete temp files:
io('/tmp/lims_test.'.$_)->unlink for qw(txt gz);

done_testing(1);

sub create_genomics_data { # create new genomics data:
	my $dbh = $dbix->dbh;
	# drop lab_tests & lab_sections, re-create from genomics db:
	for ( qw/lab_tests lab_sections screens screen_category/ ) {
		$dbh->do(qq!TRUNCATE TABLE `$_`!) ;
		$dbh->do(qq!INSERT INTO `$_` SELECT * FROM `genomics`.`$_`!);
	}
	$dbh->do(qq!TRUNCATE TABLE `$_`!) for qw(request_lab_test_results 
		storage_racks request_initial_screen request_history request_storage);
	
	{ # test/results:
		my %results = map { split ',' } grep chomp $_, <DATA>; # p %vals; exit;
		$dbix->insert('request_lab_test_results', 
			{ 
				lab_test_id => $_,
				request_id  => 1,
				result      => $results{$_},
			}
		) for keys %results;
	}
	$dbix->select('screens', 'id', { description => 'Rare disease' })->into(my $id);
	$dbix->insert('request_initial_screen', { request_id => 1, screen_id => $id });
	$dbix->insert('request_lab_test_history', 
		{ 
			request_id => 1, 
			user_id    => 1, 
			action 	   => 'auto-set Consent taken status to complete', 
		}
	);
	$dbix->insert('request_lab_test_history', 
		{ request_id => 1, action => 'screened', user_id => 1 });
	$dbix->insert('storage_racks', { plateId => 'SR12345' });
	for (1..2) {
		$dbix->insert('request_storage', 
			{
				vial_location => 'C'.$_,
				part_number   => '123456789'.$_,
				request_id    => 1,
				vialId 		  => 'FR1122334'.$_,
				sample 		  => 'tissue',
				source 		  => 'PST',
				rack_id 	  => 1,
			}
		);
	}
	# delete 2nd request - gets included in query, only able to handle 1 request:
	$dbix->delete('requests', { id => 2});
}

__DATA__
1,yes
10,DNA FF Germline
15,2016-02-06
16,R1/R2
17,R2
18,no
19,yes
20,yes
21,yes
22,yes
23,yes
24,yes
25,yes
26,yes
27,yes
28,yes
29,yes
30,yes
31,no
32,3
33,124578
34,235689
35,258369
36,369147
37,147258
38,v2
39,2016-02-08 12:10:00
40,Agarose
41,test result value
42,GMC
43,852369
44,175
45,1254575
46,C5
55,789321
56,225
57,2016-02-06 17:55:26
58,2016-02-07 17:45:10
59,3
60,2016-02-02 18:00:41
61,2016-02-05 17:50:35
62,951753654
63,753951
64,PST
65,25813
66,H3
67,2016-02-04 15:30:30