Bugzilla – Attachment 117710 Details for
Bug 27857
Koha::Patron->extended_attributes skips checks
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 27857: Regression tests
Bug-27857-Regression-tests.patch (text/plain), 10.15 KB, created by
Tomás Cohen Arazi (tcohen)
on 2021-03-04 12:43:18 UTC
(
hide
)
Description:
Bug 27857: Regression tests
Filename:
MIME Type:
Creator:
Tomás Cohen Arazi (tcohen)
Created:
2021-03-04 12:43:18 UTC
Size:
10.15 KB
patch
obsolete
>From 64293aa4c6b2dfc4f9a129205c57d2fe881770ea Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@theke.io> >Date: Thu, 4 Mar 2021 09:34:12 -0300 >Subject: [PATCH] Bug 27857: Regression tests > >This patch adds regression tests for the changed behavior. >Koha::Patron->extended_attributes will now throw exceptions and rollback >on invalid attributes. > >The existing tests are amended so they don't try to deal with skipping >bad attributes. > >Specific subtests are added for error situations. > >To test: >1. Apply this patch >2. Run: > $ kshell > k$ prove t/db_dependent/Koha/Patron.t >=> FAIL: Tests fail because the new behavior is not implemented. >--- > t/db_dependent/Koha/Patron.t | 179 +++++++++++++++++++++++++---------- > 1 file changed, 128 insertions(+), 51 deletions(-) > >diff --git a/t/db_dependent/Koha/Patron.t b/t/db_dependent/Koha/Patron.t >index 7dc56d5b8f1..f5f33e0d8a0 100755 >--- a/t/db_dependent/Koha/Patron.t >+++ b/t/db_dependent/Koha/Patron.t >@@ -368,7 +368,9 @@ subtest 'is_superlibrarian() tests' => sub { > }; > > subtest 'extended_attributes' => sub { >+ > plan tests => 14; >+ > my $schema = Koha::Database->new->schema; > $schema->storage->txn_begin; > >@@ -395,10 +397,6 @@ subtest 'extended_attributes' => sub { > > my $attribute_type3 = $builder->build_object({ class => 'Koha::Patron::Attribute::Types' }); > >- my $deleted_attribute_type = $builder->build_object({ class => 'Koha::Patron::Attribute::Types' }); >- my $deleted_attribute_type_code = $deleted_attribute_type->code; >- $deleted_attribute_type->delete; >- > my $new_library = $builder->build( { source => 'Branch' } ); > my $attribute_type_limited = Koha::Patron::Attribute::Type->new( > { code => 'my code3', description => 'my description3' } )->store; >@@ -427,10 +425,6 @@ subtest 'extended_attributes' => sub { > { > attribute => 'my attribute limited 2', > code => $attribute_type_limited->code(), >- }, >- { >- attribute => 'my nonexistent attribute 2', >- code => $deleted_attribute_type_code, > } > ]; > >@@ -441,10 +435,7 @@ subtest 'extended_attributes' => sub { > $patron_1->extended_attributes->filter_by_branch_limitations->delete; > $patron_2->extended_attributes->filter_by_branch_limitations->delete; > $patron_1->extended_attributes($attributes_for_1); >- >- warning_like { >- $patron_2->extended_attributes($attributes_for_2); >- } [ qr/a foreign key constraint fails/ ], 'nonexistent attribute should have not exploded but print a warning'; >+ $patron_2->extended_attributes($attributes_for_2); > > my $extended_attributes_for_1 = $patron_1->extended_attributes; > is( $extended_attributes_for_1->count, 3, 'There should be 3 attributes now for patron 1'); >@@ -452,65 +443,36 @@ subtest 'extended_attributes' => sub { > my $extended_attributes_for_2 = $patron_2->extended_attributes; > is( $extended_attributes_for_2->count, 2, 'There should be 2 attributes now for patron 2'); > >- my $attribute_12 = $extended_attributes_for_2->search({ code => $attribute_type1->code }); >- is( $attribute_12->next->attribute, 'my attribute12', 'search by code should return the correct attribute' ); >+ my $attribute_12 = $extended_attributes_for_2->search({ code => $attribute_type1->code })->next; >+ is( $attribute_12->attribute, 'my attribute12', 'search by code should return the correct attribute' ); > > $attribute_12 = $patron_2->get_extended_attribute( $attribute_type1->code ); > is( $attribute_12->attribute, 'my attribute12', 'Koha::Patron->get_extended_attribute should return the correct attribute value' ); > >- warning_is { >- $extended_attributes_for_2 = $patron_2->extended_attributes->merge_with( >- [ >- { >- attribute => 'my attribute12 XXX', >- code => $attribute_type1->code(), >- }, >- { >- attribute => 'my nonexistent attribute 2', >- code => $deleted_attribute_type_code, >- }, >- { >- attribute => 'my attribute 3', # Adding a new attribute using merge_with >- code => $attribute_type3->code, >- }, >- ] >- ); >- } >- "Cannot merge element: unrecognized code = '$deleted_attribute_type_code'", >- "Trying to merge_with using a nonexistent attribute code should display a warning"; >- >- is( @$extended_attributes_for_2, 3, 'There should be 3 attributes now for patron 3'); > my $expected_attributes_for_2 = [ > { > code => $attribute_type1->code(), >- attribute => 'my attribute12 XXX', >+ attribute => 'my attribute12', > }, > { > code => $attribute_type_limited->code(), > attribute => 'my attribute limited 2', >- }, >- { >- attribute => 'my attribute 3', >- code => $attribute_type3->code, >- }, >+ } > ]; > # Sorting them by code > $expected_attributes_for_2 = [ sort { $a->{code} cmp $b->{code} } @$expected_attributes_for_2 ]; >+ my @extended_attributes_for_2 = $extended_attributes_for_2->as_list; > > is_deeply( > [ > { >- code => $extended_attributes_for_2->[0]->{code}, >- attribute => $extended_attributes_for_2->[0]->{attribute} >- }, >- { >- code => $extended_attributes_for_2->[1]->{code}, >- attribute => $extended_attributes_for_2->[1]->{attribute} >+ code => $extended_attributes_for_2[0]->code, >+ attribute => $extended_attributes_for_2[0]->attribute > }, > { >- code => $extended_attributes_for_2->[2]->{code}, >- attribute => $extended_attributes_for_2->[2]->{attribute} >- }, >+ code => $extended_attributes_for_2[1]->code, >+ attribute => $extended_attributes_for_2[1]->attribute >+ } > ], > $expected_attributes_for_2 > ); >@@ -537,5 +499,120 @@ subtest 'extended_attributes' => sub { > #$limited_value = $patron_1->get_extended_attribute( $attribute_type_limited->code ); > #is( $limited_value, undef, ); > >+ subtest 'non-repeatable attributes tests' => sub { >+ >+ plan tests => 3; >+ >+ my $patron = $builder->build_object({ class => 'Koha::Patrons' }); >+ my $attribute_type = $builder->build_object( >+ { >+ class => 'Koha::Patron::Attribute::Types', >+ value => { repeatable => 0 } >+ } >+ ); >+ >+ is( $patron->extended_attributes->count, 0, 'Patron has no extended attributes' ); >+ >+ throws_ok >+ { >+ $patron->extended_attributes( >+ [ >+ { code => $attribute_type->code, attribute => 'a' }, >+ { code => $attribute_type->code, attribute => 'b' } >+ ] >+ ); >+ } >+ 'Koha::Exceptions::Patron::Attribute::NonRepeatable', >+ 'Exception thrown on non-repeatable attribute'; >+ >+ is( $patron->extended_attributes->count, 0, 'Extended attributes storing rolled back' ); >+ }; >+ >+ subtest 'unique attributes tests' => sub { >+ >+ plan tests => 5; >+ >+ my $patron_1 = $builder->build_object({ class => 'Koha::Patrons' }); >+ my $patron_2 = $builder->build_object({ class => 'Koha::Patrons' }); >+ >+ my $attribute_type_1 = $builder->build_object( >+ { >+ class => 'Koha::Patron::Attribute::Types', >+ value => { unique => 1 } >+ } >+ ); >+ >+ my $attribute_type_2 = $builder->build_object( >+ { >+ class => 'Koha::Patron::Attribute::Types', >+ value => { unique => 0 } >+ } >+ ); >+ >+ is( $patron_1->extended_attributes->count, 0, 'patron_1 has no extended attributes' ); >+ is( $patron_2->extended_attributes->count, 0, 'patron_2 has no extended attributes' ); >+ >+ $patron_1->extended_attributes( >+ [ >+ { code => $attribute_type_1->code, attribute => 'a' }, >+ { code => $attribute_type_2->code, attribute => 'a' } >+ ] >+ ); >+ >+ throws_ok >+ { >+ $patron_2->extended_attributes( >+ [ >+ { code => $attribute_type_1->code, attribute => 'a' }, >+ { code => $attribute_type_2->code, attribute => 'a' } >+ ] >+ ); >+ } >+ 'Koha::Exceptions::Patron::Attribute::UniqueIDConstraint', >+ 'Exception thrown on unique attribute'; >+ >+ is( $patron_1->extended_attributes->count, 2, 'Extended attributes stored' ); >+ is( $patron_2->extended_attributes->count, 0, 'Extended attributes storing rolled back' ); >+ }; >+ >+ subtest 'invalid type attributes tests' => sub { >+ >+ plan tests => 3; >+ >+ my $patron = $builder->build_object({ class => 'Koha::Patrons' }); >+ >+ my $attribute_type_1 = $builder->build_object( >+ { >+ class => 'Koha::Patron::Attribute::Types', >+ value => { repeatable => 0 } >+ } >+ ); >+ >+ my $attribute_type_2 = $builder->build_object( >+ { >+ class => 'Koha::Patron::Attribute::Types' >+ } >+ ); >+ >+ my $type_2 = $attribute_type_2->code; >+ $attribute_type_2->delete; >+ >+ is( $patron->extended_attributes->count, 0, 'Patron has no extended attributes' ); >+ >+ throws_ok >+ { >+ $patron->extended_attributes( >+ [ >+ { code => $attribute_type_1->code, attribute => 'a' }, >+ { code => $attribute_type_2->code, attribute => 'b' } >+ ] >+ ); >+ } >+ 'Koha::Exceptions::Patron::Attribute::InvalidType', >+ 'Exception thrown on invalid attribute type'; >+ >+ is( $patron->extended_attributes->count, 0, 'Extended attributes storing rolled back' ); >+ }; >+ > $schema->storage->txn_rollback; > }; >-- >2.30.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 27857
:
117709
|
117710
|
117711
|
117938
|
117945
|
117946
|
117947
|
117948
|
117953
|
117954
|
117955
|
117956
|
117957
|
119009
|
119038
|
119040
|
119443
|
119937
|
119938