Bugzilla – Attachment 186067 Details for
Bug 39345
Koha must support COUNTER 5.1
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 39345: (QA follow-up): Fix erm_custom_reports.t
Bug-39345-QA-follow-up-Fix-ermcustomreportst.patch (text/plain), 15.74 KB, created by
Pedro Amorim
on 2025-09-03 09:41:52 UTC
(
hide
)
Description:
Bug 39345: (QA follow-up): Fix erm_custom_reports.t
Filename:
MIME Type:
Creator:
Pedro Amorim
Created:
2025-09-03 09:41:52 UTC
Size:
15.74 KB
patch
obsolete
>From 988e471f40a775e0b101f305839f9c32ba8a87f9 Mon Sep 17 00:00:00 2001 >From: Pedro Amorim <pedro.amorim@openfifth.co.uk> >Date: Tue, 2 Sep 2025 13:03:32 +0000 >Subject: [PATCH] Bug 39345: (QA follow-up): Fix erm_custom_reports.t > >prove t/db_dependent/api/v1/erm_custom_reports.t >--- > t/db_dependent/api/v1/erm_custom_reports.t | 367 ++++++++++++++++++++- > 1 file changed, 365 insertions(+), 2 deletions(-) > >diff --git a/t/db_dependent/api/v1/erm_custom_reports.t b/t/db_dependent/api/v1/erm_custom_reports.t >index 0e3b7635552..f4967418666 100755 >--- a/t/db_dependent/api/v1/erm_custom_reports.t >+++ b/t/db_dependent/api/v1/erm_custom_reports.t >@@ -20,7 +20,7 @@ > use Modern::Perl; > > use Test::NoWarnings; >-use Test::More tests => 5; >+use Test::More tests => 9; > use Test::Mojo; > > use t::lib::TestBuilder; >@@ -41,7 +41,7 @@ my $builder = t::lib::TestBuilder->new; > my $t = Test::Mojo->new('Koha::REST::V1'); > t::lib::Mocks::mock_preference( 'RESTBasicAuth', 1 ); > >-my $sushi_response_file_TR_J1 = dirname(__FILE__) . "/../../data/erm/eusage/TR_J1.json"; >+my $sushi_response_file_TR_J1 = dirname(__FILE__) . "/../../data/erm/eusage/COUNTER_5/TR_J1.json"; > my $sushi_counter_5_response_TR_J1 = decode_json( read_file($sushi_response_file_TR_J1) ); > my $report_items = $sushi_counter_5_response_TR_J1->{Report_Items}; > my $sushi_counter_TR_J1 = Koha::ERM::EUsage::SushiCounter->new( { response => $sushi_counter_5_response_TR_J1 } ); >@@ -404,3 +404,366 @@ subtest "provider_rollup_report" => sub { > > $schema->storage->txn_rollback; > }; >+ >+my $sushi_response_file_51_TR_J1 = dirname(__FILE__) . "/../../data/erm/eusage/COUNTER_5.1/TR_J1.json"; >+my $sushi_counter_51_response_TR_J1 = decode_json( read_file($sushi_response_file_51_TR_J1) ); >+my $sushi_counter_51_TR_J1 = Koha::ERM::EUsage::SushiCounter->new( { response => $sushi_counter_51_response_TR_J1 } ); >+ >+subtest "5.1 monthly_report" => sub { >+ plan tests => 17; >+ >+ $schema->storage->txn_begin; >+ >+ my $librarian = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 2**28 } >+ } >+ ); >+ my $password = 'thePassword123'; >+ $librarian->set_password( { password => $password, skip_validation => 1 } ); >+ my $userid = $librarian->userid; >+ t::lib::Mocks::mock_userenv( { number => $userid } ); >+ >+ my $patron = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 0 } >+ } >+ ); >+ >+ $patron->set_password( { password => $password, skip_validation => 1 } ); >+ my $unauth_userid = $patron->userid; >+ >+ # Run a harvest to populate the database with data >+ my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } ); >+ my $counter_file = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI; >+ >+ $usage_data_provider->counter_files( >+ [ >+ { >+ usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id, >+ file_content => $counter_file, >+ filename => "Test_TR_J1", >+ } >+ ] >+ ); >+ >+ # Unauthorized access >+ $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/monthly_report/title")->status_is(403); >+ >+ # Authorised access >+ my $query_string_with_no_results = 'q=[ >+ { >+ "erm_usage_muses.year":2023, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[1,2,3,4,5,6,7,8,9,10,11,12], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/monthly_report/title?$query_string_with_no_results" => >+ { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)->json_is( [] ); >+ >+ my $query_string = 'q=[ >+ { >+ "erm_usage_muses.year":2022, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[6], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ my $expected_results1 = 2; # One title, with one row for each metric type >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/monthly_report/title?$query_string" => >+ { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200) >+ ->json_has( '/' . ( $expected_results1 - 2 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results1 - 1 ) . '/title_id' ) >+ ->json_hasnt( '/' . ($expected_results1) . '/title_id' ); >+ >+ my $query_string_with_multiple_years = 'q=[ >+ { >+ "erm_usage_muses.year":2022, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[1,6,7,8], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ }, >+ { >+ "erm_usage_muses.year":2021, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[1,2,3], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ my $expected_results2 = 4; # Two titles this time >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/monthly_report/title?$query_string_with_multiple_years" => >+ { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200) >+ ->json_has( '/' . ( $expected_results2 - 4 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results2 - 3 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results2 - 2 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results2 - 1 ) . '/title_id' ) >+ ->json_hasnt( '/' . ($expected_results2) . '/title_id' ); >+ >+ $schema->storage->txn_rollback; >+}; >+ >+subtest "5.1 yearly_report" => sub { >+ plan tests => 17; >+ >+ $schema->storage->txn_begin; >+ >+ my $librarian = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 2**28 } >+ } >+ ); >+ my $password = 'thePassword123'; >+ $librarian->set_password( { password => $password, skip_validation => 1 } ); >+ my $userid = $librarian->userid; >+ t::lib::Mocks::mock_userenv( { number => $userid } ); >+ >+ my $patron = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 0 } >+ } >+ ); >+ >+ $patron->set_password( { password => $password, skip_validation => 1 } ); >+ my $unauth_userid = $patron->userid; >+ >+ # Run a harvest to populate the database with data >+ my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } ); >+ my $counter_file = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI; >+ >+ $usage_data_provider->counter_files( >+ [ >+ { >+ usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id, >+ file_content => $counter_file, >+ filename => "Test_TR_J1", >+ } >+ ] >+ ); >+ >+ # Unauthorized access >+ $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/yearly_report/title")->status_is(403); >+ >+ # Authorised access >+ my $query_string_with_no_results = 'q= >+ { >+ "erm_usage_yuses.year":[2023], >+ "erm_usage_yuses.report_type":"TR_J1", >+ "erm_usage_yuses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ '; >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/yearly_report/title?$query_string_with_no_results" => >+ { 'x-koha-embed' => 'erm_usage_yuses' } )->status_is(200)->json_is( [] ); >+ >+ my $query_string = 'q= >+ { >+ "erm_usage_yuses.year":[2022], >+ "erm_usage_yuses.report_type":"TR_J1", >+ "erm_usage_yuses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ '; >+ my $expected_results1 = 4; # Two titles, with one row for each metric type >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/yearly_report/title?$query_string" => >+ { 'x-koha-embed' => 'erm_usage_yuses' } )->status_is(200) >+ ->json_has( '/' . ( $expected_results1 - 2 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results1 - 1 ) . '/title_id' ) >+ ->json_hasnt( '/' . ($expected_results1) . '/title_id' ); >+ >+ my $query_string_with_multiple_years = 'q= >+ { >+ "erm_usage_yuses.year":[2021,2022], >+ "erm_usage_yuses.report_type":"TR_J1", >+ "erm_usage_yuses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ '; >+ my $expected_results2 = 4; # Two titles this time >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/yearly_report/title?$query_string_with_multiple_years" => >+ { 'x-koha-embed' => 'erm_usage_yuses' } )->status_is(200) >+ ->json_has( '/' . ( $expected_results2 - 4 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results2 - 3 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results2 - 2 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results2 - 1 ) . '/title_id' ) >+ ->json_hasnt( '/' . ($expected_results2) . '/title_id' ); >+ >+ $schema->storage->txn_rollback; >+}; >+ >+subtest "5.1 metric_types_report" => sub { >+ plan tests => 14; >+ >+ $schema->storage->txn_begin; >+ >+ my $librarian = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 2**28 } >+ } >+ ); >+ my $password = 'thePassword123'; >+ $librarian->set_password( { password => $password, skip_validation => 1 } ); >+ my $userid = $librarian->userid; >+ t::lib::Mocks::mock_userenv( { number => $userid } ); >+ >+ my $patron = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 0 } >+ } >+ ); >+ >+ $patron->set_password( { password => $password, skip_validation => 1 } ); >+ my $unauth_userid = $patron->userid; >+ >+ # Run a harvest to populate the database with data >+ my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } ); >+ my $counter_file = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI; >+ >+ $usage_data_provider->counter_files( >+ [ >+ { >+ usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id, >+ file_content => $counter_file, >+ filename => "Test_TR_J1", >+ } >+ ] >+ ); >+ >+ # Unauthorized access >+ $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/metric_types_report/title")->status_is(403); >+ >+ # Authorised access >+ my $query_string_with_no_results = 'q=[ >+ { >+ "erm_usage_muses.year":2023, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[1,2,3,4,5,6,7,8,9,10,11,12], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/metric_types_report/title?$query_string_with_no_results" => >+ { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200)->json_is( [] ); >+ >+ my $query_string = 'q=[ >+ { >+ "erm_usage_muses.year":2022, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[6], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ my $expected_results1 = 1; # One title >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/metric_types_report/title?$query_string" => >+ { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200) >+ ->json_has( '/' . ( $expected_results1 - 1 ) . '/title_id' ) >+ ->json_hasnt( '/' . ($expected_results1) . '/title_id' ); >+ >+ my $query_string_with_multiple_years = 'q=[ >+ { >+ "erm_usage_muses.year":2022, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[1,2,3,6,7,8], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ }, >+ { >+ "erm_usage_muses.year":2021, >+ "erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_muses.month":[1,2,3], >+ "erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ my $expected_results2 = 2; # Two titles this time >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/metric_types_report/title?$query_string_with_multiple_years" => >+ { 'x-koha-embed' => 'erm_usage_muses' } )->status_is(200) >+ ->json_has( '/' . ( $expected_results2 - 2 ) . '/title_id' ) >+ ->json_has( '/' . ( $expected_results2 - 1 ) . '/title_id' ) >+ ->json_hasnt( '/' . ($expected_results2) . '/title_id' ); >+ >+ $schema->storage->txn_rollback; >+}; >+ >+subtest "5.1 provider_rollup_report" => sub { >+ plan tests => 9; >+ >+ $schema->storage->txn_begin; >+ >+ my $librarian = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 2**28 } >+ } >+ ); >+ my $password = 'thePassword123'; >+ $librarian->set_password( { password => $password, skip_validation => 1 } ); >+ my $userid = $librarian->userid; >+ t::lib::Mocks::mock_userenv( { number => $userid } ); >+ >+ my $patron = $builder->build_object( >+ { >+ class => 'Koha::Patrons', >+ value => { flags => 0 } >+ } >+ ); >+ >+ $patron->set_password( { password => $password, skip_validation => 1 } ); >+ my $unauth_userid = $patron->userid; >+ >+ # Run a harvest to populate the database with data >+ my $usage_data_provider = $builder->build_object( { class => 'Koha::ERM::EUsage::UsageDataProviders' } ); >+ my $counter_file = $sushi_counter_51_TR_J1->get_COUNTER_from_SUSHI; >+ >+ $usage_data_provider->counter_files( >+ [ >+ { >+ usage_data_provider_id => $usage_data_provider->erm_usage_data_provider_id, >+ file_content => $counter_file, >+ filename => "Test_TR_J1", >+ } >+ ] >+ ); >+ >+ # Unauthorized access >+ $t->get_ok("//$unauth_userid:$password@/api/v1/erm/eUsage/provider_rollup_report/title")->status_is(403); >+ >+ # Authorised access >+ my $query_string_with_no_results = 'q=[ >+ { >+ "erm_usage_titles.erm_usage_muses.year":2023, >+ "erm_usage_titles.erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_titles.erm_usage_muses.month":[1,2,3,4,5,6,7,8,9,10,11,12], >+ "erm_usage_titles.erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/provider_rollup_report/title?$query_string_with_no_results" => >+ { 'x-koha-embed' => 'erm_usage_titles.erm_usage_muses' } )->status_is(200)->json_is( [] ); >+ >+ my $query_string = 'q=[ >+ { >+ "erm_usage_titles.erm_usage_muses.year":2022, >+ "erm_usage_titles.erm_usage_muses.report_type":"TR_J1", >+ "erm_usage_titles.erm_usage_muses.month":[1,6], >+ "erm_usage_titles.erm_usage_muses.metric_type":["Total_Item_Requests","Unique_Item_Requests"] >+ } >+ ]'; >+ my $expected_results1 = 2; # One provider repeated once for each metric type >+ >+ $t->get_ok( "//$userid:$password@/api/v1/erm/eUsage/provider_rollup_report/title?$query_string" => >+ { 'x-koha-embed' => 'erm_usage_titles.erm_usage_muses' } )->status_is(200) >+ ->json_is( '/' . ( $expected_results1 - 2 ) . '/provider_rollup_total' => 528, 'Total is correct' ) >+ ->json_is( '/' . ( $expected_results1 - 1 ) . '/provider_rollup_total' => 228, 'Total is correct' ); >+ >+ $schema->storage->txn_rollback; >+}; >-- >2.39.5
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 39345
:
185593
|
185594
|
185595
|
185596
|
185618
|
185619
|
185620
|
185621
|
185658
|
185659
|
185660
|
185661
|
185662
|
185663
|
185664
|
185922
|
185923
|
185924
|
185925
|
185926
|
185927
|
185928
|
186016
|
186042
|
186043
|
186044
|
186060
|
186061
|
186062
|
186063
|
186064
|
186065
|
186066
| 186067 |
186068