Lines 397-403
subtest "to_api() tests" => sub {
Link Here
|
397 |
'Koha::Exceptions::Object::MethodNotCoveredByTests', |
397 |
'Koha::Exceptions::Object::MethodNotCoveredByTests', |
398 |
'Unknown method exception thrown if is_count not specified'; |
398 |
'Unknown method exception thrown if is_count not specified'; |
399 |
|
399 |
|
400 |
subtest 'unprivileged request tests' => sub { |
400 |
subtest 'public request tests' => sub { |
401 |
|
401 |
|
402 |
my @all_attrs = Koha::Libraries->columns(); |
402 |
my @all_attrs = Koha::Libraries->columns(); |
403 |
my $public_attrs = { map { $_ => 1 } @{ Koha::Library->public_read_list() } }; |
403 |
my $public_attrs = { map { $_ => 1 } @{ Koha::Library->public_read_list() } }; |
Lines 535-550
subtest "to_api() tests" => sub {
Link Here
|
535 |
$schema->storage->txn_rollback; |
535 |
$schema->storage->txn_rollback; |
536 |
}; |
536 |
}; |
537 |
|
537 |
|
538 |
subtest 'accessible usage tests' => sub { |
538 |
subtest 'unprivileged requests redaction tests' => sub { |
539 |
|
539 |
|
540 |
plan tests => 2; |
540 |
my @all_attrs = Koha::Patrons->columns(); |
|
|
541 |
my $unredacted_attrs = { map { $_ => 1 } @{ Koha::Patron->unredact_list() } }; |
542 |
my $mapping = Koha::Patron->to_api_mapping; |
543 |
my @mapped_to_null = grep { !defined( $mapping->{$_} ) } keys %{$mapping}; |
544 |
|
545 |
plan tests => ( scalar @all_attrs * 3 ) - scalar @mapped_to_null; |
541 |
|
546 |
|
542 |
$schema->storage->txn_begin; |
547 |
$schema->storage->txn_begin; |
543 |
|
548 |
|
544 |
my $library_1 = $builder->build_object( { class => 'Koha::Libraries' } ); |
549 |
my $library_1 = $builder->build_object( { class => 'Koha::Libraries' } ); |
545 |
my $library_2 = $builder->build_object( { class => 'Koha::Libraries' } ); |
550 |
my $library_2 = $builder->build_object( { class => 'Koha::Libraries' } ); |
546 |
|
551 |
|
547 |
my $patron = $builder->build_object( |
552 |
my $api_consumer = $builder->build_object( |
548 |
{ |
553 |
{ |
549 |
class => 'Koha::Patrons', |
554 |
class => 'Koha::Patrons', |
550 |
value => { |
555 |
value => { |
Lines 554-573
subtest "to_api() tests" => sub {
Link Here
|
554 |
} |
559 |
} |
555 |
); |
560 |
); |
556 |
|
561 |
|
557 |
my $patron_1 = $builder->build_object( |
562 |
my $patron_1 = |
558 |
{ class => 'Koha::Patrons', value => { branchcode => $library_1->id } } |
563 |
$builder->build_object( { class => 'Koha::Patrons', value => { branchcode => $library_1->id } } ); |
559 |
); |
564 |
my $patron_2 = |
560 |
my $patron_2 = $builder->build_object( |
565 |
$builder->build_object( { class => 'Koha::Patrons', value => { branchcode => $library_2->id } } ); |
561 |
{ class => 'Koha::Patrons', value => { branchcode => $library_2->id } } |
|
|
562 |
); |
563 |
|
566 |
|
564 |
t::lib::Mocks::mock_userenv( { patron => $patron } ); |
567 |
t::lib::Mocks::mock_userenv( { patron => $api_consumer } ); |
565 |
|
568 |
|
566 |
is( |
569 |
my $visible_user = $patron_1->to_api( { user => $api_consumer } ); |
567 |
$patron_1->to_api( { user => $patron } )->{firstname}, $patron_1->firstname, |
570 |
my $redacted_user = $patron_2->to_api( { user => $api_consumer } ); |
568 |
'Returns unredacted object hash' |
571 |
|
569 |
); |
572 |
foreach my $attr (@all_attrs) { |
570 |
is( $patron_2->to_api( { user => $patron } )->{firstname}, undef, 'Returns redacted object hash' ); |
573 |
my $mapped = exists $mapping->{$attr} ? $mapping->{$attr} : $attr; |
|
|
574 |
if ( defined($mapped) ) { |
575 |
ok( |
576 |
exists $visible_user->{$mapped}, |
577 |
"Mapped attribute '$attr' is present" |
578 |
); |
579 |
if ( exists $unredacted_attrs->{$attr} ) { |
580 |
is( |
581 |
$visible_user->{$mapped}, $patron_1->TO_JSON->{$attr}, |
582 |
"Unredacted attribute '$attr' is visible when user is accessible" |
583 |
); |
584 |
is( |
585 |
$redacted_user->{$mapped}, $patron_2->TO_JSON->{$attr}, |
586 |
"Unredacted attribute '$attr' is visible when user is inaccessible" |
587 |
); |
588 |
} else { |
589 |
is( |
590 |
$visible_user->{$mapped}, $patron_1->TO_JSON->{$attr}, |
591 |
"Redacted attribute '$attr' is visible when user is accessible" |
592 |
); |
593 |
is( |
594 |
$redacted_user->{$mapped}, undef, |
595 |
"Redacted attribute '$attr' is undefined when user is inaccessible" |
596 |
); |
597 |
} |
598 |
} else { |
599 |
ok( |
600 |
!exists $visible_user->{$attr}, |
601 |
"Mapped to null attribute '$attr' is not present when accessible" |
602 |
); |
603 |
ok( |
604 |
!exists $redacted_user->{$attr}, |
605 |
"Mapped to null attribute '$attr' is not present when inaccessible" |
606 |
); |
607 |
} |
608 |
} |
571 |
|
609 |
|
572 |
$schema->storage->txn_rollback; |
610 |
$schema->storage->txn_rollback; |
573 |
}; |
611 |
}; |
574 |
- |
|
|