Bugzilla – Attachment 166436 Details for
Bug 34788
Add the ability to import KBART files to ERM
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 34788: Add unit test
Bug-34788-Add-unit-test.patch (text/plain), 15.40 KB, created by
Nick Clemens (kidclamp)
on 2024-05-08 19:36:38 UTC
(
hide
)
Description:
Bug 34788: Add unit test
Filename:
MIME Type:
Creator:
Nick Clemens (kidclamp)
Created:
2024-05-08 19:36:38 UTC
Size:
15.40 KB
patch
obsolete
>From a2fd0d378dfbdc648fad251a575df4933b6a4ee3 Mon Sep 17 00:00:00 2001 >From: Matt Blenkinsop <matt.blenkinsop@ptfs-europe.com> >Date: Thu, 14 Sep 2023 12:39:45 +0000 >Subject: [PATCH] Bug 34788: Add unit test > >Signed-off-by: Clemens Tubach <clemens.tubach@kit.edu> >Signed-off-by: Nick Clemens <nick@bywatersolutions.com> >--- > .../Koha/BackgroundJob/ImportKBARTFile.t | 355 ++++++++++++++++++ > 1 file changed, 355 insertions(+) > create mode 100755 t/db_dependent/Koha/BackgroundJob/ImportKBARTFile.t > >diff --git a/t/db_dependent/Koha/BackgroundJob/ImportKBARTFile.t b/t/db_dependent/Koha/BackgroundJob/ImportKBARTFile.t >new file mode 100755 >index 00000000000..b8c7ec6a5b1 >--- /dev/null >+++ b/t/db_dependent/Koha/BackgroundJob/ImportKBARTFile.t >@@ -0,0 +1,355 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha >+# >+# Koha is free software; you can redistribute it and/or modify it >+# under the terms of the GNU General Public License as published by >+# the Free Software Foundation; either version 3 of the License, or >+# (at your option) any later version. >+# >+# Koha is distributed in the hope that it will be useful, but >+# WITHOUT ANY WARRANTY; without even the implied warranty of >+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >+# GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License >+# along with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use Test::More tests => 6; >+use Test::MockModule; >+ >+use Koha::Database; >+use Koha::BackgroundJobs; >+use Koha::BackgroundJob::ImportKBARTFile; >+ >+use MIME::Base64 qw( encode_base64 ); >+ >+use t::lib::Mocks; >+use t::lib::TestBuilder; >+ >+my $schema = Koha::Database->new->schema; >+my $builder = t::lib::TestBuilder->new; >+ >+subtest 'enqueue' => sub { >+ >+ plan tests => 1; >+ >+ $schema->storage->txn_begin; >+ >+ # FIXME: Should be an exception >+ my $job_id = Koha::BackgroundJob::ImportKBARTFile->new->enqueue(); >+ is( $job_id, undef, 'Nothing enqueued if missing file param' ); >+ >+ $schema->storage->txn_rollback; >+}; >+ >+subtest 'calculate_chunked_file_size' => sub { >+ >+ plan tests => 2; >+ >+ my $max_number_of_lines = >+ Koha::BackgroundJob::ImportKBARTFile::calculate_chunked_file_size( 500000, 100000, 50000 ); >+ is( $max_number_of_lines, 9000, 'Number of lines calculated correctly' ); >+ my $max_number_of_lines2 = >+ Koha::BackgroundJob::ImportKBARTFile::calculate_chunked_file_size( 400000, 100000, 60000 ); >+ is( $max_number_of_lines2, 13500, 'Number of lines calculated correctly' ); >+}; >+ >+subtest 'format_title' => sub { >+ >+ plan tests => 4; >+ >+ my $title = { >+ title_id => 1, >+ coverage_notes => 'Test notes' >+ }; >+ >+ my $formatted_title = Koha::BackgroundJob::ImportKBARTFile::format_title($title); >+ >+ is( $formatted_title->{external_id}, 1, 'external_id formatted correctly' ); >+ is( $formatted_title->{notes}, 'Test notes', 'notes formatted correctly' ); >+ is( $title->{title_id}, undef, 'title_id has been deleted' ); >+ is( $title->{coverage_notes}, undef, 'coverage_notes has been deleted' ); >+}; >+ >+subtest 'format_file' => sub { >+ >+ plan tests => 6; >+ >+ my $file = { >+ filename => 'Test_file.txt', >+ file_content => encode_base64( >+ 'publication_title print_identifier online_identifier date_first_issue_online num_first_vol_online num_first_issue_online date_last_issue_online num_last_vol_online num_last_issue_online title_url first_author title_id embargo_info coverage_depth coverage_notes publisher_name publication_type date_monograph_published_print date_monograph_published_online monograph_volume monograph_edition first_editor parent_publication_title_id preceding_publication_title_id access_type >+Nature Plants 2055-0278 2015-01 1 1 https://www.nature.com/nplants 4aaa7 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P >+Nature Astronomy 2397-3366 2017-01 1 1 https://www.nature.com/natastron 4bbb0 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P' >+ ) >+ }; >+ >+ my ( $column_headers, $lines ) = Koha::BackgroundJob::ImportKBARTFile::format_file($file); >+ >+ is( @{$column_headers}, 25, '25 column headers found' ); >+ is( @{$column_headers}[0], 'publication_title', 'First header correctly extracted' ); >+ is( @{$column_headers}[10], 'first_author', 'Tenth header correctly extracted' ); >+ >+ is( @{$lines}, 2, 'Two lines need processing' ); >+ is( >+ @{$lines}[0], >+ 'Nature Plants 2055-0278 2015-01 1 1 https://www.nature.com/nplants 4aaa7 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P', >+ 'Line correctly identified' >+ ); >+ is( >+ @{$lines}[1], >+ 'Nature Astronomy 2397-3366 2017-01 1 1 https://www.nature.com/natastron 4bbb0 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P', >+ 'Line correctly identified' >+ ); >+ >+}; >+ >+subtest 'create_title_hash_from_line_data' => sub { >+ >+ plan tests => 2; >+ >+ my $file = { >+ filename => 'Test_file.txt', >+ file_content => encode_base64( >+ 'publication_title print_identifier online_identifier date_first_issue_online num_first_vol_online num_first_issue_online date_last_issue_online num_last_vol_online num_last_issue_online title_url first_author title_id embargo_info coverage_depth coverage_notes publisher_name publication_type date_monograph_published_print date_monograph_published_online monograph_volume monograph_edition first_editor parent_publication_title_id preceding_publication_title_id access_type >+Nature Plants 2055-0278 2015-01 1 1 https://www.nature.com/nplants 4aaa7 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P >+Nature Astronomy 2397-3366 2017-01 1 1 https://www.nature.com/natastron 4bbb0 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P' >+ ) >+ }; >+ >+ my ( $column_headers, $lines ) = Koha::BackgroundJob::ImportKBARTFile::format_file($file); >+ >+ my $title_from_line1 = >+ Koha::BackgroundJob::ImportKBARTFile::create_title_hash_from_line_data( @{$lines}[0], $column_headers ); >+ my $title_from_line2 = >+ Koha::BackgroundJob::ImportKBARTFile::create_title_hash_from_line_data( @{$lines}[1], $column_headers ); >+ >+ my $line1_match = { >+ 'coverage_depth' => 'fulltext', >+ 'date_monograph_published_print' => '', >+ 'date_first_issue_online' => '2015-01', >+ 'date_last_issue_online' => '', >+ 'coverage_notes' => 'Hybrid (Open Choice)', >+ 'first_editor' => '', >+ 'date_monograph_published_online' => '', >+ 'preceding_publication_title_id' => '', >+ 'num_last_issue_online' => '', >+ 'embargo_info' => '', >+ 'access_type' => 'P', >+ 'num_first_issue_online' => '1', >+ 'online_identifier' => '2055-0278', >+ 'title_url' => 'https://www.nature.com/nplants', >+ 'monograph_volume' => '', >+ 'first_author' => '', >+ 'parent_publication_title_id' => '', >+ 'num_last_vol_online' => '', >+ 'publication_title' => 'Nature Plants', >+ 'num_first_vol_online' => '1', >+ 'print_identifier' => '', >+ 'publisher_name' => 'Nature Publishing Group UK', >+ 'title_id' => '4aaa7', >+ 'publication_type' => 'serial', >+ 'monograph_edition' => '' >+ }; >+ my $line2_match = { >+ 'date_monograph_published_online' => '', >+ 'num_first_vol_online' => '1', >+ 'num_last_issue_online' => '', >+ 'preceding_publication_title_id' => '', >+ 'title_url' => 'https://www.nature.com/natastron', >+ 'online_identifier' => '2397-3366', >+ 'print_identifier' => '', >+ 'num_last_vol_online' => '', >+ 'embargo_info' => '', >+ 'parent_publication_title_id' => '', >+ 'publisher_name' => 'Nature Publishing Group UK', >+ 'date_first_issue_online' => '2017-01', >+ 'monograph_volume' => '', >+ 'monograph_edition' => '', >+ 'access_type' => 'P', >+ 'first_author' => '', >+ 'num_first_issue_online' => '1', >+ 'first_editor' => '', >+ 'publication_title' => 'Nature Astronomy', >+ 'date_monograph_published_print' => '', >+ 'publication_type' => 'serial', >+ 'title_id' => '4bbb0', >+ 'coverage_depth' => 'fulltext', >+ 'coverage_notes' => 'Hybrid (Open Choice)', >+ 'date_last_issue_online' => '' >+ }; >+ >+ is_deeply( $title_from_line1, $line1_match, 'Title hash created correctly' ); >+ is_deeply( $title_from_line2, $line2_match, 'Title hash created correctly' ); >+}; >+ >+subtest 'process' => sub { >+ plan tests => 12; >+ >+ $schema->storage->txn_begin; >+ >+ my $file = { >+ filename => 'Test_file.txt', >+ file_content => encode_base64( >+ 'publication_title print_identifier online_identifier date_first_issue_online num_first_vol_online num_first_issue_online date_last_issue_online num_last_vol_online num_last_issue_online title_url first_author title_id embargo_info coverage_depth coverage_notes publisher_name publication_type date_monograph_published_print date_monograph_published_online monograph_volume monograph_edition first_editor parent_publication_title_id preceding_publication_title_id access_type >+Nature Plants 2055-0278 2015-01 1 1 https://www.nature.com/nplants 4aaa7 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P >+Nature Astronomy 2397-3366 2017-01 1 1 https://www.nature.com/natastron 4bbb0 fulltext Hybrid (Open Choice) Nature Publishing Group UK serial P' >+ ) >+ }; >+ >+ my $job = Koha::BackgroundJob::ImportKBARTFile->new( >+ { >+ status => 'new', >+ type => 'import_from_kbart_file', >+ size => 1, >+ } >+ )->store; >+ $job = Koha::BackgroundJobs->find( $job->id ); >+ my $data = { file => $file }; >+ my $json = $job->json->encode($data); >+ $job->data($json)->store; >+ $job->process($data); >+ >+ is( $job->report->{titles_imported}, 2, 'Two titles successfully imported' ); >+ >+ my $job2 = Koha::BackgroundJob::ImportKBARTFile->new( >+ { >+ status => 'new', >+ type => 'import_from_kbart_file', >+ size => 1, >+ } >+ )->store; >+ $job2 = Koha::BackgroundJobs->find( $job2->id ); >+ $job2->data($json)->store; >+ $job2->process($data); >+ >+ is( $job2->report->{duplicates_found}, 2, 'Two duplicates found, no titles should be imported' ); >+ is( $job2->report->{titles_imported}, 0, 'No titles were imported' ); >+ is_deeply( >+ $job2->messages, >+ [ >+ { >+ 'type' => 'warning', >+ 'title' => 'Nature Plants', >+ 'code' => 'title_already_exists', >+ 'error_message' => undef >+ }, >+ { >+ 'error_message' => undef, >+ 'code' => 'title_already_exists', >+ 'title' => 'Nature Astronomy', >+ 'type' => 'warning' >+ } >+ ], >+ 'Two duplicate messages added' >+ ); >+ >+ my $module = Test::MockModule->new('Koha::BackgroundJob::ImportKBARTFile'); >+ $module->mock( >+ 'create_title_hash_from_line_data', >+ sub { >+ my ( $line, $column_headers ) = @_; >+ >+ my %new_title; >+ my @values = split /\t/, $line; >+ >+ @new_title{ @{$column_headers} } = @values; >+ >+ $new_title{title_id} = '12345' if $new_title{publication_title} eq 'Nature Plants'; >+ $new_title{publication_title} = '' if $new_title{publication_title} eq 'Nature Plants'; >+ >+ return \%new_title; >+ } >+ ); >+ >+ my $job3 = Koha::BackgroundJob::ImportKBARTFile->new( >+ { >+ status => 'new', >+ type => 'import_from_kbart_file', >+ size => 1, >+ } >+ )->store; >+ $job3 = Koha::BackgroundJobs->find( $job3->id ); >+ $job3->data($json)->store; >+ $job3->process($data); >+ >+ is( $job3->report->{duplicates_found}, 1, 'One duplicate found' ); >+ is( $job3->report->{titles_imported}, 0, 'No titles were imported' ); >+ is( $job3->report->{failed_imports}, 1, 'One failure found' ); >+ is_deeply( >+ $job3->messages, >+ [ >+ { >+ 'type' => 'error', >+ 'error_message' => 'No publication_title found for title_id: ', >+ 'code' => 'title_failed', >+ 'title_id' => '12345', >+ 'title' => '(Unknown)' >+ }, >+ { >+ 'code' => 'title_already_exists', >+ 'title' => 'Nature Astronomy', >+ 'error_message' => undef, >+ 'type' => 'warning' >+ } >+ ], >+ 'One duplicate message and one failure message for a missing title' >+ ); >+ >+ $module->mock( >+ 'create_title_hash_from_line_data', >+ sub { >+ my ( $line, $column_headers ) = @_; >+ >+ my %new_title; >+ my @values = split /\t/, $line; >+ >+ @new_title{ @{$column_headers} } = @values; >+ >+ $new_title{title_id} = 'abcde' if $new_title{publication_title} eq 'Nature Plants'; >+ $new_title{unknown_field} = '' if $new_title{publication_title} eq 'Nature Plants'; >+ >+ return \%new_title; >+ } >+ ); >+ >+ my $job4 = Koha::BackgroundJob::ImportKBARTFile->new( >+ { >+ status => 'new', >+ type => 'import_from_kbart_file', >+ size => 1, >+ } >+ )->store; >+ $job4 = Koha::BackgroundJobs->find( $job4->id ); >+ $job4->data($json)->store; >+ $job4->process($data); >+ >+ is( $job4->report->{duplicates_found}, 1, 'One duplicate found' ); >+ is( $job4->report->{titles_imported}, 0, 'No titles were imported' ); >+ is( $job4->report->{failed_imports}, 1, 'One failure found' ); >+ is_deeply( >+ $job4->messages, >+ [ >+ { >+ 'type' => 'error', >+ 'title' => 'Nature Plants', >+ 'error_message' => >+ 'DBIx::Class::Row::store_column(): No such column \'unknown_field\' on Koha::Schema::Result::ErmEholdingsTitle at /kohadevbox/koha/Koha/Object.pm line 79 >+', >+ 'code' => 'title_failed' >+ }, >+ { >+ 'code' => 'title_already_exists', >+ 'error_message' => undef, >+ 'title' => 'Nature Astronomy', >+ 'type' => 'warning' >+ } >+ ], >+ 'One duplicate message and one failure message for an incorrect column' >+ ); >+ >+ $schema->storage->txn_rollback; >+ } >-- >2.39.2
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 34788
:
161379
|
161380
|
161381
|
161382
|
161383
|
161384
|
161391
|
165189
|
165190
|
165191
|
165192
|
165193
|
165194
|
165195
|
165196
|
165197
|
165837
|
165887
|
165888
|
165889
|
165890
|
165891
|
165892
|
165893
|
165894
|
166420
|
166433
|
166434
|
166435
| 166436 |
166437
|
166438
|
166439
|
166440
|
166441
|
166571
|
166645