Lines 368-374
subtest 'is_superlibrarian() tests' => sub {
Link Here
|
368 |
}; |
368 |
}; |
369 |
|
369 |
|
370 |
subtest 'extended_attributes' => sub { |
370 |
subtest 'extended_attributes' => sub { |
|
|
371 |
|
371 |
plan tests => 14; |
372 |
plan tests => 14; |
|
|
373 |
|
372 |
my $schema = Koha::Database->new->schema; |
374 |
my $schema = Koha::Database->new->schema; |
373 |
$schema->storage->txn_begin; |
375 |
$schema->storage->txn_begin; |
374 |
|
376 |
|
Lines 395-404
subtest 'extended_attributes' => sub {
Link Here
|
395 |
|
397 |
|
396 |
my $attribute_type3 = $builder->build_object({ class => 'Koha::Patron::Attribute::Types' }); |
398 |
my $attribute_type3 = $builder->build_object({ class => 'Koha::Patron::Attribute::Types' }); |
397 |
|
399 |
|
398 |
my $deleted_attribute_type = $builder->build_object({ class => 'Koha::Patron::Attribute::Types' }); |
|
|
399 |
my $deleted_attribute_type_code = $deleted_attribute_type->code; |
400 |
$deleted_attribute_type->delete; |
401 |
|
402 |
my $new_library = $builder->build( { source => 'Branch' } ); |
400 |
my $new_library = $builder->build( { source => 'Branch' } ); |
403 |
my $attribute_type_limited = Koha::Patron::Attribute::Type->new( |
401 |
my $attribute_type_limited = Koha::Patron::Attribute::Type->new( |
404 |
{ code => 'my code3', description => 'my description3' } )->store; |
402 |
{ code => 'my code3', description => 'my description3' } )->store; |
Lines 427-436
subtest 'extended_attributes' => sub {
Link Here
|
427 |
{ |
425 |
{ |
428 |
attribute => 'my attribute limited 2', |
426 |
attribute => 'my attribute limited 2', |
429 |
code => $attribute_type_limited->code(), |
427 |
code => $attribute_type_limited->code(), |
430 |
}, |
|
|
431 |
{ |
432 |
attribute => 'my nonexistent attribute 2', |
433 |
code => $deleted_attribute_type_code, |
434 |
} |
428 |
} |
435 |
]; |
429 |
]; |
436 |
|
430 |
|
Lines 441-450
subtest 'extended_attributes' => sub {
Link Here
|
441 |
$patron_1->extended_attributes->filter_by_branch_limitations->delete; |
435 |
$patron_1->extended_attributes->filter_by_branch_limitations->delete; |
442 |
$patron_2->extended_attributes->filter_by_branch_limitations->delete; |
436 |
$patron_2->extended_attributes->filter_by_branch_limitations->delete; |
443 |
$patron_1->extended_attributes($attributes_for_1); |
437 |
$patron_1->extended_attributes($attributes_for_1); |
444 |
|
438 |
$patron_2->extended_attributes($attributes_for_2); |
445 |
warning_like { |
|
|
446 |
$patron_2->extended_attributes($attributes_for_2); |
447 |
} [ qr/a foreign key constraint fails/ ], 'nonexistent attribute should have not exploded but print a warning'; |
448 |
|
439 |
|
449 |
my $extended_attributes_for_1 = $patron_1->extended_attributes; |
440 |
my $extended_attributes_for_1 = $patron_1->extended_attributes; |
450 |
is( $extended_attributes_for_1->count, 3, 'There should be 3 attributes now for patron 1'); |
441 |
is( $extended_attributes_for_1->count, 3, 'There should be 3 attributes now for patron 1'); |
Lines 452-516
subtest 'extended_attributes' => sub {
Link Here
|
452 |
my $extended_attributes_for_2 = $patron_2->extended_attributes; |
443 |
my $extended_attributes_for_2 = $patron_2->extended_attributes; |
453 |
is( $extended_attributes_for_2->count, 2, 'There should be 2 attributes now for patron 2'); |
444 |
is( $extended_attributes_for_2->count, 2, 'There should be 2 attributes now for patron 2'); |
454 |
|
445 |
|
455 |
my $attribute_12 = $extended_attributes_for_2->search({ code => $attribute_type1->code }); |
446 |
my $attribute_12 = $extended_attributes_for_2->search({ code => $attribute_type1->code })->next; |
456 |
is( $attribute_12->next->attribute, 'my attribute12', 'search by code should return the correct attribute' ); |
447 |
is( $attribute_12->attribute, 'my attribute12', 'search by code should return the correct attribute' ); |
457 |
|
448 |
|
458 |
$attribute_12 = $patron_2->get_extended_attribute( $attribute_type1->code ); |
449 |
$attribute_12 = $patron_2->get_extended_attribute( $attribute_type1->code ); |
459 |
is( $attribute_12->attribute, 'my attribute12', 'Koha::Patron->get_extended_attribute should return the correct attribute value' ); |
450 |
is( $attribute_12->attribute, 'my attribute12', 'Koha::Patron->get_extended_attribute should return the correct attribute value' ); |
460 |
|
451 |
|
461 |
warning_is { |
|
|
462 |
$extended_attributes_for_2 = $patron_2->extended_attributes->merge_with( |
463 |
[ |
464 |
{ |
465 |
attribute => 'my attribute12 XXX', |
466 |
code => $attribute_type1->code(), |
467 |
}, |
468 |
{ |
469 |
attribute => 'my nonexistent attribute 2', |
470 |
code => $deleted_attribute_type_code, |
471 |
}, |
472 |
{ |
473 |
attribute => 'my attribute 3', # Adding a new attribute using merge_with |
474 |
code => $attribute_type3->code, |
475 |
}, |
476 |
] |
477 |
); |
478 |
} |
479 |
"Cannot merge element: unrecognized code = '$deleted_attribute_type_code'", |
480 |
"Trying to merge_with using a nonexistent attribute code should display a warning"; |
481 |
|
482 |
is( @$extended_attributes_for_2, 3, 'There should be 3 attributes now for patron 3'); |
483 |
my $expected_attributes_for_2 = [ |
452 |
my $expected_attributes_for_2 = [ |
484 |
{ |
453 |
{ |
485 |
code => $attribute_type1->code(), |
454 |
code => $attribute_type1->code(), |
486 |
attribute => 'my attribute12 XXX', |
455 |
attribute => 'my attribute12', |
487 |
}, |
456 |
}, |
488 |
{ |
457 |
{ |
489 |
code => $attribute_type_limited->code(), |
458 |
code => $attribute_type_limited->code(), |
490 |
attribute => 'my attribute limited 2', |
459 |
attribute => 'my attribute limited 2', |
491 |
}, |
460 |
} |
492 |
{ |
|
|
493 |
attribute => 'my attribute 3', |
494 |
code => $attribute_type3->code, |
495 |
}, |
496 |
]; |
461 |
]; |
497 |
# Sorting them by code |
462 |
# Sorting them by code |
498 |
$expected_attributes_for_2 = [ sort { $a->{code} cmp $b->{code} } @$expected_attributes_for_2 ]; |
463 |
$expected_attributes_for_2 = [ sort { $a->{code} cmp $b->{code} } @$expected_attributes_for_2 ]; |
|
|
464 |
my @extended_attributes_for_2 = $extended_attributes_for_2->as_list; |
499 |
|
465 |
|
500 |
is_deeply( |
466 |
is_deeply( |
501 |
[ |
467 |
[ |
502 |
{ |
468 |
{ |
503 |
code => $extended_attributes_for_2->[0]->{code}, |
469 |
code => $extended_attributes_for_2[0]->code, |
504 |
attribute => $extended_attributes_for_2->[0]->{attribute} |
470 |
attribute => $extended_attributes_for_2[0]->attribute |
505 |
}, |
|
|
506 |
{ |
507 |
code => $extended_attributes_for_2->[1]->{code}, |
508 |
attribute => $extended_attributes_for_2->[1]->{attribute} |
509 |
}, |
471 |
}, |
510 |
{ |
472 |
{ |
511 |
code => $extended_attributes_for_2->[2]->{code}, |
473 |
code => $extended_attributes_for_2[1]->code, |
512 |
attribute => $extended_attributes_for_2->[2]->{attribute} |
474 |
attribute => $extended_attributes_for_2[1]->attribute |
513 |
}, |
475 |
} |
514 |
], |
476 |
], |
515 |
$expected_attributes_for_2 |
477 |
$expected_attributes_for_2 |
516 |
); |
478 |
); |
Lines 537-541
subtest 'extended_attributes' => sub {
Link Here
|
537 |
#$limited_value = $patron_1->get_extended_attribute( $attribute_type_limited->code ); |
499 |
#$limited_value = $patron_1->get_extended_attribute( $attribute_type_limited->code ); |
538 |
#is( $limited_value, undef, ); |
500 |
#is( $limited_value, undef, ); |
539 |
|
501 |
|
|
|
502 |
subtest 'non-repeatable attributes tests' => sub { |
503 |
|
504 |
plan tests => 3; |
505 |
|
506 |
my $patron = $builder->build_object({ class => 'Koha::Patrons' }); |
507 |
my $attribute_type = $builder->build_object( |
508 |
{ |
509 |
class => 'Koha::Patron::Attribute::Types', |
510 |
value => { repeatable => 0 } |
511 |
} |
512 |
); |
513 |
|
514 |
is( $patron->extended_attributes->count, 0, 'Patron has no extended attributes' ); |
515 |
|
516 |
throws_ok |
517 |
{ |
518 |
$patron->extended_attributes( |
519 |
[ |
520 |
{ code => $attribute_type->code, attribute => 'a' }, |
521 |
{ code => $attribute_type->code, attribute => 'b' } |
522 |
] |
523 |
); |
524 |
} |
525 |
'Koha::Exceptions::Patron::Attribute::NonRepeatable', |
526 |
'Exception thrown on non-repeatable attribute'; |
527 |
|
528 |
is( $patron->extended_attributes->count, 0, 'Extended attributes storing rolled back' ); |
529 |
}; |
530 |
|
531 |
subtest 'unique attributes tests' => sub { |
532 |
|
533 |
plan tests => 5; |
534 |
|
535 |
my $patron_1 = $builder->build_object({ class => 'Koha::Patrons' }); |
536 |
my $patron_2 = $builder->build_object({ class => 'Koha::Patrons' }); |
537 |
|
538 |
my $attribute_type_1 = $builder->build_object( |
539 |
{ |
540 |
class => 'Koha::Patron::Attribute::Types', |
541 |
value => { unique => 1 } |
542 |
} |
543 |
); |
544 |
|
545 |
my $attribute_type_2 = $builder->build_object( |
546 |
{ |
547 |
class => 'Koha::Patron::Attribute::Types', |
548 |
value => { unique => 0 } |
549 |
} |
550 |
); |
551 |
|
552 |
is( $patron_1->extended_attributes->count, 0, 'patron_1 has no extended attributes' ); |
553 |
is( $patron_2->extended_attributes->count, 0, 'patron_2 has no extended attributes' ); |
554 |
|
555 |
$patron_1->extended_attributes( |
556 |
[ |
557 |
{ code => $attribute_type_1->code, attribute => 'a' }, |
558 |
{ code => $attribute_type_2->code, attribute => 'a' } |
559 |
] |
560 |
); |
561 |
|
562 |
throws_ok |
563 |
{ |
564 |
$patron_2->extended_attributes( |
565 |
[ |
566 |
{ code => $attribute_type_1->code, attribute => 'a' }, |
567 |
{ code => $attribute_type_2->code, attribute => 'a' } |
568 |
] |
569 |
); |
570 |
} |
571 |
'Koha::Exceptions::Patron::Attribute::UniqueIDConstraint', |
572 |
'Exception thrown on unique attribute'; |
573 |
|
574 |
is( $patron_1->extended_attributes->count, 2, 'Extended attributes stored' ); |
575 |
is( $patron_2->extended_attributes->count, 0, 'Extended attributes storing rolled back' ); |
576 |
}; |
577 |
|
578 |
subtest 'invalid type attributes tests' => sub { |
579 |
|
580 |
plan tests => 3; |
581 |
|
582 |
my $patron = $builder->build_object({ class => 'Koha::Patrons' }); |
583 |
|
584 |
my $attribute_type_1 = $builder->build_object( |
585 |
{ |
586 |
class => 'Koha::Patron::Attribute::Types', |
587 |
value => { repeatable => 0 } |
588 |
} |
589 |
); |
590 |
|
591 |
my $attribute_type_2 = $builder->build_object( |
592 |
{ |
593 |
class => 'Koha::Patron::Attribute::Types' |
594 |
} |
595 |
); |
596 |
|
597 |
my $type_2 = $attribute_type_2->code; |
598 |
$attribute_type_2->delete; |
599 |
|
600 |
is( $patron->extended_attributes->count, 0, 'Patron has no extended attributes' ); |
601 |
|
602 |
throws_ok |
603 |
{ |
604 |
$patron->extended_attributes( |
605 |
[ |
606 |
{ code => $attribute_type_1->code, attribute => 'a' }, |
607 |
{ code => $attribute_type_2->code, attribute => 'b' } |
608 |
] |
609 |
); |
610 |
} |
611 |
'Koha::Exceptions::Patron::Attribute::InvalidType', |
612 |
'Exception thrown on invalid attribute type'; |
613 |
|
614 |
is( $patron->extended_attributes->count, 0, 'Extended attributes storing rolled back' ); |
615 |
}; |
616 |
|
540 |
$schema->storage->txn_rollback; |
617 |
$schema->storage->txn_rollback; |
541 |
}; |
618 |
}; |
542 |
- |
|
|