|
Lines 1-7
Link Here
|
| 1 |
use Modern::Perl; |
1 |
use Modern::Perl; |
| 2 |
|
2 |
|
| 3 |
#use Test::NoWarnings; |
3 |
#use Test::NoWarnings; |
| 4 |
use Test::More tests => 3; |
4 |
use Test::More tests => 4; |
|
|
5 |
use Test::Warn; |
| 5 |
|
6 |
|
| 6 |
use Koha::Items; |
7 |
use Koha::Items; |
| 7 |
use Koha::Database::DataInconsistency; |
8 |
use Koha::Database::DataInconsistency; |
|
Lines 264-266
subtest 'invalid_item_type' => sub {
Link Here
|
| 264 |
|
265 |
|
| 265 |
$schema->storage->txn_rollback(); |
266 |
$schema->storage->txn_rollback(); |
| 266 |
}; |
267 |
}; |
| 267 |
- |
268 |
|
|
|
269 |
subtest 'errors_in_marc' => sub { |
| 270 |
|
| 271 |
plan tests => 4; |
| 272 |
|
| 273 |
$schema->storage->txn_begin(); |
| 274 |
|
| 275 |
my $biblio_ok = $builder->build_sample_biblio; |
| 276 |
my $item_ok = $builder->build_sample_item( { biblionumber => $biblio_ok->biblionumber } ); |
| 277 |
my $biblio_ko = $builder->build_sample_biblio; |
| 278 |
my $item_ko = $builder->build_sample_item( { biblionumber => $biblio_ko->biblionumber } ); |
| 279 |
|
| 280 |
my $biblios = Koha::Biblios->search( { biblionumber => [ $biblio_ok->biblionumber, $biblio_ko->biblionumber ] } ); |
| 281 |
|
| 282 |
my $itemtype = $builder->build_object( { class => 'Koha::ItemTypes' } ); |
| 283 |
my $deleted_itemtype = $itemtype->itemtype; |
| 284 |
$itemtype->delete; |
| 285 |
|
| 286 |
subtest 'ok' => sub { |
| 287 |
plan tests => 3; |
| 288 |
my $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); |
| 289 |
ok( !exists $errors->{decoding_errors} ); |
| 290 |
ok( !exists $errors->{ids_not_in_marc} ); |
| 291 |
ok( !exists $errors->{item_fields_in_marc} ); |
| 292 |
}; |
| 293 |
|
| 294 |
subtest 'ids_not_in_marc' => sub { |
| 295 |
plan tests => 2; |
| 296 |
$schema->storage->txn_begin(); |
| 297 |
my ( $biblio_tag, $biblio_subfield ) = C4::Biblio::GetMarcFromKohaField("biblio.biblionumber"); |
| 298 |
my ( $biblioitem_tag, $biblioitem_subfield ) = C4::Biblio::GetMarcFromKohaField("biblioitems.biblioitemnumber"); |
| 299 |
my $record = $biblio_ko->metadata->record; |
| 300 |
if ( my $field = $record->field($biblio_tag) ) { |
| 301 |
$field->update( $biblio_subfield => '-42' ); |
| 302 |
} |
| 303 |
$biblio_ko->metadata->metadata( $record->as_xml )->store; |
| 304 |
|
| 305 |
my $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); |
| 306 |
is_deeply( |
| 307 |
$errors->{ids_not_in_marc}, |
| 308 |
[ |
| 309 |
sprintf q{Biblionumber %s has '%s' in %s$%s}, $biblio_ko->biblionumber, '-42', $biblio_tag, |
| 310 |
$biblio_subfield |
| 311 |
] |
| 312 |
); |
| 313 |
|
| 314 |
$record = $biblio_ko->metadata->record; |
| 315 |
if ( my $field = $record->field($biblioitem_tag) ) { |
| 316 |
$field->update( $biblioitem_subfield => '-42' ); |
| 317 |
} |
| 318 |
$biblio_ko->metadata->metadata( $record->as_xml )->store; |
| 319 |
|
| 320 |
$errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); |
| 321 |
is_deeply( |
| 322 |
$errors->{ids_not_in_marc}, |
| 323 |
[ |
| 324 |
sprintf( |
| 325 |
q{Biblionumber %s has '%s' in %s$%s}, $biblio_ko->biblionumber, '-42', $biblio_tag, |
| 326 |
$biblio_subfield |
| 327 |
), |
| 328 |
sprintf( |
| 329 |
q{Biblionumber %s has biblioitemnumber '%s' but should be '%s' in %s$%s}, $biblio_ko->biblionumber, |
| 330 |
'-42', $biblio_ko->biblioitem->biblioitemnumber, $biblioitem_tag, $biblioitem_subfield |
| 331 |
) |
| 332 |
] |
| 333 |
); |
| 334 |
|
| 335 |
$schema->storage->txn_rollback(); |
| 336 |
}; |
| 337 |
|
| 338 |
subtest 'item_fields_in_marc' => sub { |
| 339 |
plan tests => 1; |
| 340 |
$schema->storage->txn_begin(); |
| 341 |
my ( $item_tag, $item_subfield ) = C4::Biblio::GetMarcFromKohaField("items.itemnumber"); |
| 342 |
my $record = $biblio_ko->metadata->record; |
| 343 |
$record->append_fields( MARC::Field->new( $item_tag, '', '', $item_subfield => 'booh' ) ); |
| 344 |
$biblio_ko->metadata->metadata( $record->as_xml )->store; |
| 345 |
|
| 346 |
my $errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); |
| 347 |
is_deeply( |
| 348 |
$errors->{item_fields_in_marc}, |
| 349 |
[ sprintf q{Biblionumber %s has item fields (%s) in the marc record}, $biblio_ko->biblionumber, $item_tag ] |
| 350 |
); |
| 351 |
|
| 352 |
$schema->storage->txn_rollback(); |
| 353 |
}; |
| 354 |
|
| 355 |
subtest 'decoding_errors' => sub { |
| 356 |
plan tests => 2; |
| 357 |
$schema->storage->txn_begin(); |
| 358 |
my $biblio_metadata = $biblio_ko->metadata; |
| 359 |
$biblio_metadata->metadata('oops'); |
| 360 |
Koha::Object::store($biblio_metadata); |
| 361 |
my $errors; |
| 362 |
warning_like { |
| 363 |
$errors = Koha::Database::DataInconsistency->errors_in_marc($biblios); |
| 364 |
} |
| 365 |
qr{parser error}; |
| 366 |
like( $errors->{decoding_errors}->[0], qr{Invalid data, cannot decode metadata object} ); |
| 367 |
$schema->storage->txn_rollback(); |
| 368 |
}; |
| 369 |
|
| 370 |
$schema->storage->txn_rollback(); |
| 371 |
}; |