From b4767511c21505caffcb80cf96a0a63ca9d2c472 Mon Sep 17 00:00:00 2001 From: Pedro Amorim Date: Thu, 19 Sep 2024 14:03:40 +0000 Subject: [PATCH] Bug 37856: Add tests This is using the groundwork from bug 37963. This is testing the specific error this bug is addressing: Required parameter Platform is missing It is also testing that the error message is correctly shown as a background job report message to the user Test plan: prove t/db_dependent/Koha/BackgroundJob/ErmSushiHarvester.t Signed-off-by: David Nind --- .../Koha/BackgroundJob/ErmSushiHarvester.t | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/t/db_dependent/Koha/BackgroundJob/ErmSushiHarvester.t b/t/db_dependent/Koha/BackgroundJob/ErmSushiHarvester.t index d6a7440eaef..a3b26367f12 100755 --- a/t/db_dependent/Koha/BackgroundJob/ErmSushiHarvester.t +++ b/t/db_dependent/Koha/BackgroundJob/ErmSushiHarvester.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 3; +use Test::More tests => 4; use Koha::Database; use Koha::BackgroundJobs; @@ -40,6 +40,10 @@ my $sushi_response_errors = { 'invalid_api_key' => '{"Code": 2020, "Severity": "Error", "Message": "API Key Invalid"}', }; +my $sushi_response_exceptions = { + 'multiple_exceptions' => '{"Created":"2024-09-06T10:41:02Z","Created_By":"Test Services","Customer_ID":"Test_customer_id","Report_ID":"TR_J1","Release":"5","Report_Name":"Journal Requests (Excluding OA_Gold)","Institution_Name":"Test Institution","Report_Filters":[{"Name":"Begin_Date","Value":"2024-06-01"},{"Name":"End_Date","Value":"2024-08-31"}],"Exceptions":[{"Code":3050,"Severity":"Warning","Message":"Parameter Not Recognized in this Context","Data":"Parameter api_key is not recognized"},{"Code":3070,"Severity":"Error","Message":"Required ReportFilter Missing","Data":"Required parameter Platform is missing and should be one of:sd|sc|ev|em|ck"}]}', +}; + subtest 'enqueue() tests' => sub { plan tests => 3; @@ -162,6 +166,43 @@ subtest 'invalid_api_key() tests' => sub { $schema->storage->txn_rollback; }; +subtest 'multiple_exceptions() tests' => sub { + + plan tests => 6; + + $schema->storage->txn_begin; + + my $ua = Test::MockModule->new('LWP::UserAgent'); + $ua->mock('simple_request', sub { + return mock_sushi_response({'exception'=>'multiple_exceptions'}); + }); + + my $usage_data_provider = $builder->build_object( + { class => 'Koha::ERM::EUsage::UsageDataProviders', value => { name => 'TestProvider' } } ); + + my $job_args = { + ud_provider_id => $usage_data_provider->erm_usage_data_provider_id, + report_type => 'TR_J1', + begin_date => '2023-08-01', + end_date => '2023-09-30', + ud_provider_name => $usage_data_provider->name, + }; + + my $job_id = Koha::BackgroundJob::ErmSushiHarvester->new->enqueue($job_args); + my $job = Koha::BackgroundJobs->find($job_id)->_derived_class; + $job->process( $job_args ); + + is( $job->{messages}[0]->{message}, decode_json($sushi_response_exceptions->{multiple_exceptions})->{Exceptions}[0]->{Message} . ' - ' . decode_json($sushi_response_exceptions->{multiple_exceptions})->{Exceptions}[0]->{Data},'SUSHI exceptions multiple_exceptions are stored on job messages correctly' ); + is( $job->{messages}[0]->{type},'error','SUSHI error multiple_exceptions are stored on job messages correctly' ); + is( $job->{messages}[0]->{code},decode_json($sushi_response_exceptions->{multiple_exceptions})->{Exceptions}[0]->{Code},'SUSHI error multiple_exceptions are stored on job messages correctly' ); + + is( $job->{messages}[1]->{message}, decode_json($sushi_response_exceptions->{multiple_exceptions})->{Exceptions}[1]->{Message} . ' - ' . decode_json($sushi_response_exceptions->{multiple_exceptions})->{Exceptions}[1]->{Data},'SUSHI exceptions multiple_exceptions are stored on job messages correctly' ); + is( $job->{messages}[1]->{type},'error','SUSHI error multiple_exceptions are stored on job messages correctly' ); + is( $job->{messages}[1]->{code},decode_json($sushi_response_exceptions->{multiple_exceptions})->{Exceptions}[1]->{Code},'SUSHI error multiple_exceptions are stored on job messages correctly' ); + + $schema->storage->txn_rollback; +}; + sub mock_sushi_response { my ($args) = @_; my $response = Test::MockObject->new(); @@ -187,7 +228,9 @@ sub mock_sushi_response { $response->mock( 'decoded_content', sub { - return $sushi_response_errors->{ $args->{error} }; + return $args->{error} + ? $sushi_response_errors->{ $args->{error} } + : $sushi_response_exceptions->{ $args->{exception} }; } ); } -- 2.39.5