Bugzilla – Attachment 188225 Details for
Bug 40777
500 Error: Something went wrong when loading the table Should Exit Cleanly
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 40777: Add tests for errors_in_marc
Bug-40777-Add-tests-for-errorsinmarc.patch (text/plain), 8.45 KB, created by
Jonathan Druart
on 2025-10-21 13:47:50 UTC
(
hide
)
Description:
Bug 40777: Add tests for errors_in_marc
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2025-10-21 13:47:50 UTC
Size:
8.45 KB
patch
obsolete
>From 030652b12f0323b741879989e68ae63784cc7990 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Tue, 21 Oct 2025 15:27:42 +0200 >Subject: [PATCH] Bug 40777: Add tests for errors_in_marc > >--- > Koha/Database/DataInconsistency.pm | 39 ++++--- > .../Koha/Database/DataInconsistency.t | 107 +++++++++++++++++- > 2 files changed, 125 insertions(+), 21 deletions(-) > >diff --git a/Koha/Database/DataInconsistency.pm b/Koha/Database/DataInconsistency.pm >index f3f6a93bf86..42646c2b3d8 100644 >--- a/Koha/Database/DataInconsistency.pm >+++ b/Koha/Database/DataInconsistency.pm >@@ -159,8 +159,8 @@ sub errors_in_marc { > } > } > >- my ( $biblio_tag, $biblio_subfield ) = C4::Biblio::GetMarcFromKohaField("biblio.biblionumber"); >- my ( $biblioitem_tag, $biblioitem_subfield ) = C4::Biblio::GetMarcFromKohaField("biblioitems.biblioitemnumber"); >+ my ( $biblio_tag, $biblio_subfield ) = C4::Biblio::GetMarcFromKohaField("biblio.biblionumber"); >+ my ( $biblioitem_tag, $biblioitem_subfield ) = C4::Biblio::GetMarcFromKohaField("biblioitems.biblioitemnumber"); > $biblios = Koha::Biblios->search( { biblionumber => $ids } ); > while ( my $biblio = $biblios->next ) { > my $record = eval { $biblio->metadata->record; }; >@@ -182,27 +182,26 @@ sub errors_in_marc { > $biblioitemnumber = $record->subfield( $biblioitem_tag, $biblioitem_subfield ); > } > if ( $biblionumber != $biblio->biblionumber ) { >- push @{ $errors->{ids_not_in_marc} }, >- __x( >- q{Biblionumber {biblionumber} has '{biblionumber_in_marc}' in {biblio_tag}${biblio_subfield}}, >- biblionumber => $biblio->biblionumber, >- biblionumber_in_marc => $biblionumber, >- biblio_tag => $biblio_tag, >- biblio_subfield => $biblio_subfield, >- ); >+ push @{ $errors->{ids_not_in_marc} }, >+ __x( >+ q{Biblionumber {biblionumber} has '{biblionumber_in_marc}' in {biblio_tag}${biblio_subfield}}, >+ biblionumber => $biblio->biblionumber, >+ biblionumber_in_marc => $biblionumber, >+ biblio_tag => $biblio_tag, >+ biblio_subfield => $biblio_subfield, >+ ); > > } > if ( $biblioitemnumber != $biblio->biblioitem->biblioitemnumber ) { >- push @{ $errors->{ids_not_in_marc} }, >- __x( >- q{Biblionumber {biblionumber} has biblioitemnumber '{biblioitemnumber}' but should be '{biblioitemnumber_in_marc}' in {biblioitem_tag}${biblioitem_subfield}}, >- biblionumber => $biblio->biblionumber, >- biblioitemnumber => $biblio->biblioitem->biblioitemnumber, >- biblioitemnumber_in_marc => $biblionumber, >- biblioitem_tag => $biblioitem_tag, >- biblioitem_subfield => $biblioitem_subfield, >- ); >- } >+ push @{ $errors->{ids_not_in_marc} }, >+ __x( >+ q{Biblionumber {biblionumber} has biblioitemnumber '{biblioitemnumber_in_marc}' but should be '{biblioitemnumber}' in {biblioitem_tag}${biblioitem_subfield}}, >+ biblionumber => $biblio->biblionumber, >+ biblioitemnumber_in_marc => $biblionumber, >+ biblioitemnumber => $biblio->biblioitem->biblioitemnumber, >+ biblioitem_tag => $biblioitem_tag, >+ biblioitem_subfield => $biblioitem_subfield, >+ ); > } > } > if (@item_fields_in_marc) { >diff --git a/t/db_dependent/Koha/Database/DataInconsistency.t b/t/db_dependent/Koha/Database/DataInconsistency.t >index d8767217230..c5c47b76f75 100755 >--- a/t/db_dependent/Koha/Database/DataInconsistency.t >+++ b/t/db_dependent/Koha/Database/DataInconsistency.t >@@ -1,7 +1,8 @@ > use Modern::Perl; > > #use Test::NoWarnings; >-use Test::More tests => 3; >+use Test::More tests => 4; >+use Test::Warn; > > use Koha::Items; > use Koha::Database::DataInconsistency; >@@ -264,3 +265,107 @@ subtest 'invalid_item_type' => sub { > > $schema->storage->txn_rollback(); > }; >+ >+subtest 'errors_in_marc' => sub { >+ >+ plan tests => 4; >+ >+ $schema->storage->txn_begin(); >+ >+ my $biblio_ok = $builder->build_sample_biblio; >+ my $item_ok = $builder->build_sample_item( { biblionumber => $biblio_ok->biblionumber } ); >+ my $biblio_ko = $builder->build_sample_biblio; >+ my $item_ko = $builder->build_sample_item( { biblionumber => $biblio_ko->biblionumber } ); >+ >+ my $biblios = Koha::Biblios->search( { biblionumber => [ $biblio_ok->biblionumber, $biblio_ko->biblionumber ] } ); >+ >+ my $itemtype = $builder->build_object( { class => 'Koha::ItemTypes' } ); >+ my $deleted_itemtype = $itemtype->itemtype; >+ $itemtype->delete; >+ >+ subtest 'ok' => sub { >+ plan tests => 3; >+ my $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); >+ ok( !exists $errors->{decoding_errors} ); >+ ok( !exists $errors->{ids_not_in_marc} ); >+ ok( !exists $errors->{item_fields_in_marc} ); >+ }; >+ >+ subtest 'ids_not_in_marc' => sub { >+ plan tests => 2; >+ $schema->storage->txn_begin(); >+ my ( $biblio_tag, $biblio_subfield ) = C4::Biblio::GetMarcFromKohaField("biblio.biblionumber"); >+ my ( $biblioitem_tag, $biblioitem_subfield ) = C4::Biblio::GetMarcFromKohaField("biblioitems.biblioitemnumber"); >+ my $record = $biblio_ko->metadata->record; >+ if ( my $field = $record->field($biblio_tag) ) { >+ $field->update( $biblio_subfield => '-42' ); >+ } >+ $biblio_ko->metadata->metadata( $record->as_xml )->store; >+ >+ my $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); >+ is_deeply( >+ $errors->{ids_not_in_marc}, >+ [ >+ sprintf q{Biblionumber %s has '%s' in %s$%s}, $biblio_ko->biblionumber, '-42', $biblio_tag, >+ $biblio_subfield >+ ] >+ ); >+ >+ $record = $biblio_ko->metadata->record; >+ if ( my $field = $record->field($biblioitem_tag) ) { >+ $field->update( $biblioitem_subfield => '-42' ); >+ } >+ $biblio_ko->metadata->metadata( $record->as_xml )->store; >+ >+ $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); >+ is_deeply( >+ $errors->{ids_not_in_marc}, >+ [ >+ sprintf( >+ q{Biblionumber %s has '%s' in %s$%s}, $biblio_ko->biblionumber, '-42', $biblio_tag, >+ $biblio_subfield >+ ), >+ sprintf( >+ q{Biblionumber %s has biblioitemnumber '%s' but should be '%s' in %s$%s}, $biblio_ko->biblionumber, >+ '-42', $biblio_ko->biblioitem->biblioitemnumber, $biblioitem_tag, $biblioitem_subfield >+ ) >+ ] >+ ); >+ >+ $schema->storage->txn_rollback(); >+ }; >+ >+ subtest 'item_fields_in_marc' => sub { >+ plan tests => 1; >+ $schema->storage->txn_begin(); >+ my ( $item_tag, $item_subfield ) = C4::Biblio::GetMarcFromKohaField("items.itemnumber"); >+ my $record = $biblio_ko->metadata->record; >+ $record->append_fields( MARC::Field->new( $item_tag, '', '', $item_subfield => 'booh' ) ); >+ $biblio_ko->metadata->metadata( $record->as_xml )->store; >+ >+ my $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); >+ is_deeply( >+ $errors->{item_fields_in_marc}, >+ [ sprintf q{Biblionumber %s has item fields (%s) in the marc record}, $biblio_ko->biblionumber, $item_tag ] >+ ); >+ >+ $schema->storage->txn_rollback(); >+ }; >+ >+ subtest 'decoding_errors' => sub { >+ plan tests => 2; >+ $schema->storage->txn_begin(); >+ my $biblio_metadata = $biblio_ko->metadata; >+ $biblio_metadata->metadata('oops'); >+ Koha::Object::store($biblio_metadata); >+ my $errors; >+ warning_like { >+ $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); >+ } >+ qr{parser error}; >+ like( $errors->{decoding_errors}->[0], qr{Invalid data, cannot decode metadata object} ); >+ $schema->storage->txn_rollback(); >+ }; >+ >+ $schema->storage->txn_rollback(); >+}; >-- >2.34.1
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 40777
:
187526
|
187527
|
187528
|
188222
|
188223
|
188224
| 188225 |
188226
|
188227
|
189598