use strict;
use warnings;
BEGIN { # set test env otherwise get development config settings - unless explicitly
# set at command-line: "export DANCER_ENVIRONMENT=development; prove -lv t/"
$ENV{DANCER_ENVIRONMENT} ||= $ENV{PLACK_ENV} ||= 'test';
}
use Test::More;
use Test::Most; # bail_on_fail
require_ok( 'Reporter::Test' ); # also loads Reporter::Class - imports Data::Printer, Moo, etc
my $t = Reporter::Test->new;
my $model = $t->app->model;
my $dbix = $model->db->dbix; # ddp $dbix->dbh->{Name};
my $now = DateTime->now;
# check test scripts using sqlite in-memory db:
bail_on_fail;
like( $dbix->dbh->{Name}, qr/:memory:/, 'sqlite db in use' );
use lib 't';
use schema;
run_schema($dbix); # create tables & add some data (users, requests, request_specimen, etc)
my $user_id = 1;
{ # userid = username, incorrect password:
my %params = ( userid => 'queenie', password => 'queenie' );
my $res = $model->authenticate_user(\%params); # ddp $res;
is($res, 0, 'incorrect password');
}
{ # userid = username, correct password:
my %params = ( userid => 'queenie', password => 'Queenie' );
my $res = $model->authenticate_user(\%params); # ddp $res;
is( ref $res, 'HASH', 'authenticate returned hashref' );
is( $res->{username}, 'queenie', 'username matches for userid = username' );
is( $res->{id}, $user_id, 'user id matches' );
}
{ # userid = email, correct password:
my %params = ( userid => 'queenie@mail.com', password => 'Queenie' );
my $res = $model->authenticate_user(\%params); # ddp $res;
is( ref $res, 'HASH', 'authenticate returned hashref' );
is( $res->{username}, 'queenie', 'username matches for userid = email' );
}
{ # get reports for user #1:
my $n = get_reports_for_user($user_id);
is( $n, 0, "no reports for user id $user_id" );
}
{ # add some draft_reports:
my %h = (
user_id => $user_id,
request_id => 1, # will auto-increment in loop
diagnosis_id => 1,
);
$dbix->insert('request_draft_report', \%h) && $h{request_id}++ for (1..5);
# my $ref = $dbix->select('request_draft_report', '*')->hashes; p $ref;
# my $n = $dbix->count('request_draft_report'); p $n;
}
{ # get reports for user #1:
my $n = get_reports_for_user($user_id);
is( $n, 5, "5 reports for user id $user_id" );
}
{ # user reports:
my $res = $model->user_reports_list($user_id); # p $res;
is ( ref $res, 'HASH', 'user reports returned hashref' );
is ( ref $res->{reports}, 'ARRAY', 'reports is in list format' );
is ( @{ $res->{reports} }, 5, '5 reports returned' );
is( ref $res->{specimen}, 'ARRAY', 'specimen is in list format' );
# contains 5 PB's:
is ( $res->{specimen}->[0]->{id}, 'PB', 'expected sample type' );
is ( $res->{specimen}->[0]->{n}, 5, 'expected sample number' );
}
{ # new report:
my %h = (
biopsy_site => 'biopsy site',
clinical_details => 'clinical details',
comment => 'comment',
created_at => $now,
diagnosis_id => 1,
gross_description => 'gross description',
morphology => 'morphology',
request_id => 6,
request_notes => 'request notes',
secondary_diagnosis_id => undef,
specimen_quality => 'specimen quality',
status => 'new',
user_id => $user_id,
);
my $res = $model->save_report(\%h); # p $res;
is ( ref $res, 'HASH', 'save report returned hashref' );
is ( $res->{success}, 1, 'new record created successfully');
my $ref = $dbix->select('request_draft_report','*', { request_id => 6 })->hash; # p $ref;
is_deeply( $ref, \%h, 'data structures identical' );
}
done_testing(19);
sub get_reports_for_user {
my $user_id = shift;
my %h = (
user_id => $user_id,
page => 1,
uri => '/',
);
my $res = $model->get_reports_for_user(\%h); # ddp $res;
my $n = @{ $res->{reports} };
return $n;
}