From 250d9602f747cabffc09707c17b673381c3488ee Mon Sep 17 00:00:00 2001 From: Marina Gourtovaia Date: Thu, 24 Oct 2024 18:03:50 +0100 Subject: [PATCH] Fixes and tests for lane-level entities --- lib/npg_qc/autoqc/checks/review.pm | 3 +- t/60-autoqc-checks-review.t | 70 ++++++++++++++++-- .../240802_A00537_1044_BHJKCGDSXC.tar.gz | Bin 59551 -> 57716 bytes t/data/runfolder_49285/README | 4 +- t/data/runfolder_49285/product_release.yml | 5 +- 5 files changed, 69 insertions(+), 13 deletions(-) diff --git a/lib/npg_qc/autoqc/checks/review.pm b/lib/npg_qc/autoqc/checks/review.pm index 6532a54c..66245caf 100644 --- a/lib/npg_qc/autoqc/checks/review.pm +++ b/lib/npg_qc/autoqc/checks/review.pm @@ -398,7 +398,8 @@ sub generate_qc_outcome { my $outcome = $package_name->generate_short_description( $self->final_qc_outcome ? 1 : 0, $pass); - my $outcome_type = $self->lims->is_lane ? $QC_TYPE_SEQ : $QC_TYPE_LIB . '_outcome'; + my $outcome_type = ($self->lims->is_lane ? $QC_TYPE_SEQ : $QC_TYPE_LIB) + . '_outcome'; return { $outcome_type => $outcome, timestamp => create_current_timestamp(), username => $ROBO_KEY }; diff --git a/t/60-autoqc-checks-review.t b/t/60-autoqc-checks-review.t index 71f2c56e..ac7ebd23 100644 --- a/t/60-autoqc-checks-review.t +++ b/t/60-autoqc-checks-review.t @@ -812,7 +812,7 @@ subtest 'evaluating generic for artic results' => sub { }; subtest 'evaluating for LCMB library type' => sub { - plan tests => 2; + plan tests => 14; my $test_data_path = 't/data/runfolder_49285'; my $runfolder_name = '240802_A00537_1044_BHJKCGDSXC'; @@ -834,24 +834,78 @@ subtest 'evaluating for LCMB library type' => sub { verbose => 0 )->load(); - my $rpt_list = "${id_run}:1:1"; - my $init = { + my $check = npg_qc::autoqc::checks::review->new( runfolder_path => $runfolder_path, conf_path => $test_data_path, - rpt_list => $rpt_list, + rpt_list => "${id_run}:1:1", use_db => 1, _qc_schema => $schema - }; - my $check = npg_qc::autoqc::checks::review->new($init); - lives_ok { $check->execute() } 'check runs OK'; + ); + lives_ok { $check->execute() } 'plex level check runs OK'; my %expected_evaluation_results = map { $_ => 1 } ( 'sequence_error.pass && (sequence_error.forward_common_cigars->[0]->[0] =~ /\\A\\d+M\\Z/xsm)', 'sequence_error.pass && (sequence_error.reverse_common_cigars->[0]->[0] =~ /\\A\\d+M\\Z/xsm)', 'bam_flagstats.percent_mapped_reads && (bam_flagstats.percent_mapped_reads > 80)', 'verify_bam_id.pass' ); - is_deeply ($check->result()->evaluation_results(), \%expected_evaluation_results, + my $result = $check->result(); + is_deeply ($result->evaluation_results(), \%expected_evaluation_results, 'sample evaluation results as expected'); + is ($result->pass, 1, 'the check passed'); + my $qc_outcome = $result->qc_outcome(); + ok (defined $qc_outcome->{'timestamp'}, 'timestamp is set'); + delete $qc_outcome->{'timestamp'}; + is_deeply ($qc_outcome, + {'mqc_outcome' => 'Accepted preliminary', 'username' => 'robo_qc'}, + 'sample QC outcome is saved correctly' + ); + + $check = npg_qc::autoqc::checks::review->new( + runfolder_path => $runfolder_path, + conf_path => $test_data_path, + rpt_list => "${id_run}:1", + use_db => 1, + _qc_schema => $schema + ); + lives_ok { $check->execute() } 'lane level check runs OK'; + $result = $check->result(); + %expected_evaluation_results = ( + 'tag_metrics.matches_pf_percent && (tag_metrics.perfect_matches_percent +' . + ' tag_metrics.one_mismatch_percent) > 93' => 1, + 'tag_metrics.all_reads * 302 > 750000000000' => 1 + ); + is_deeply ($result->evaluation_results(), \%expected_evaluation_results, + 'lane evaluation results as expected'); + is ($result->pass, 1, 'the check passed'); + $qc_outcome = $result->qc_outcome(); + ok (defined $qc_outcome->{'timestamp'}, 'timestamp is set'); + delete $qc_outcome->{'timestamp'}; + is_deeply ($qc_outcome, + {'mqc_seq_outcome' => 'Accepted preliminary', 'username' => 'robo_qc'}, + 'lane QC outcome is saved correctly' + ); + + $check = npg_qc::autoqc::checks::review->new( + runfolder_path => $runfolder_path, + conf_path => $test_data_path, + rpt_list => "${id_run}:2", + use_db => 1, + _qc_schema => $schema + ); + lives_ok { $check->execute() } 'lane level check runs OK'; + for my $key (keys %expected_evaluation_results) { + $expected_evaluation_results{$key} = 0; + } + $result = $check->result(); + is_deeply ($result->evaluation_results(), \%expected_evaluation_results, + 'lane evaluation results as expected'); + is ($result->pass, 0, 'the check failed'); + $qc_outcome = $result->qc_outcome(); + delete $qc_outcome->{'timestamp'}; + is_deeply ($qc_outcome, + {'mqc_seq_outcome' => 'Rejected preliminary', 'username' => 'robo_qc'}, + 'lane QC outcome is saved correctly' + ); }; 1; diff --git a/t/data/runfolder_49285/240802_A00537_1044_BHJKCGDSXC.tar.gz b/t/data/runfolder_49285/240802_A00537_1044_BHJKCGDSXC.tar.gz index fd0505ef8013dfba7f41e697411a321de513d91e..9e8bed37a8601dee139b6247b9fcbfd7d0ebb3f4 100644 GIT binary patch delta 11502 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 iaX3_CcaHTRvkF}QD 93" - - "tag_metrics.all_reads * 202 > 750000000000" + - "tag_metrics.matches_pf_percent && (tag_metrics.perfect_matches_percent + tag_metrics.one_mismatch_percent) > 93" + - "tag_metrics.all_reads * 302 > 750000000000"