From 4babe8dbb94c62033a1c59a5692c5136d601069f Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Thu, 7 Oct 2021 15:16:01 -0300 Subject: [PATCH] Bug 29157: Regression tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This patch implements regression tests for the filed bug. Signed-off-by: Tomas Cohen Arazi Signed-off-by: David Nind Signed-off-by: Eric Phetteplace Signed-off-by: Joonas Kylmälä --- t/db_dependent/Koha/Object.t | 152 ++++++++++++++++++-------------- t/db_dependent/api/v1/patrons.t | 6 ++ 2 files changed, 94 insertions(+), 64 deletions(-) diff --git a/t/db_dependent/Koha/Object.t b/t/db_dependent/Koha/Object.t index c3de0be3de..8004c26446 100755 --- a/t/db_dependent/Koha/Object.t +++ b/t/db_dependent/Koha/Object.t @@ -520,81 +520,105 @@ subtest 'new_from_api() tests' => sub { subtest 'attributes_from_api() tests' => sub { - plan tests => 12; + plan tests => 2; - my $patron = Koha::Patron->new(); + subtest 'date and date-time handling tests' => sub { - my $attrs = $patron->attributes_from_api( - { - updated_on => '2019-12-27T14:53:00', - } - ); + plan tests => 12; - ok( exists $attrs->{updated_on}, - 'No translation takes place if no mapping' ); - is( - ref( $attrs->{updated_on} ), - 'DateTime', - 'Given a string, a timestamp field is converted into a DateTime object' - ); + my $patron = Koha::Patron->new(); - $attrs = $patron->attributes_from_api( - { - last_seen => '2019-12-27T14:53:00' - } - ); + my $attrs = $patron->attributes_from_api( + { + updated_on => '2019-12-27T14:53:00', + last_seen => '2019-12-27T14:53:00', + date_of_birth => '2019-12-27', + } + ); - ok( exists $attrs->{lastseen}, - 'Translation takes place because of the defined mapping' ); - is( - ref( $attrs->{lastseen} ), - 'DateTime', - 'Given a string, a datetime field is converted into a DateTime object' - ); + ok( exists $attrs->{updated_on}, + 'No translation takes place if no mapping' ); + is( + ref( $attrs->{updated_on} ), + 'DateTime', + 'Given a string, a timestamp field is converted into a DateTime object' + ); - $attrs = $patron->attributes_from_api( - { - date_of_birth => '2019-12-27' - } - ); + ok( exists $attrs->{lastseen}, + 'Translation takes place because of the defined mapping' ); + is( + ref( $attrs->{lastseen} ), + 'DateTime', + 'Given a string, a datetime field is converted into a DateTime object' + ); - ok( exists $attrs->{dateofbirth}, - 'Translation takes place because of the defined mapping' ); - is( - ref( $attrs->{dateofbirth} ), - 'DateTime', - 'Given a string, a date field is converted into a DateTime object' - ); + ok( exists $attrs->{dateofbirth}, + 'Translation takes place because of the defined mapping' ); + is( + ref( $attrs->{dateofbirth} ), + 'DateTime', + 'Given a string, a date field is converted into a DateTime object' + ); - throws_ok - { - $attrs = $patron->attributes_from_api( - { - date_of_birth => '20141205', - } - ); - } - 'Koha::Exceptions::BadParameter', - 'Bad date throws an exception'; + $attrs = $patron->attributes_from_api( + { + last_seen => undef, + date_of_birth => undef, + } + ); - is( - $@->parameter, - 'date_of_birth', - 'Exception parameter is the API field name, not the DB one' - ); + ok( exists $attrs->{lastseen}, + 'undef parameter is not skipped (Bug 29157)' ); + is( + $attrs->{lastseen}, + undef, + 'Given undef, a datetime field is set to undef (Bug 29157)' + ); - # Booleans - $attrs = $patron->attributes_from_api( - { - incorrect_address => Mojo::JSON->true, - patron_card_lost => Mojo::JSON->false, - } - ); + ok( exists $attrs->{dateofbirth}, + 'undef parameter is not skipped (Bug 29157)' ); + is( + $attrs->{dateofbirth}, + undef, + 'Given undef, a date field is set to undef (Bug 29157)' + ); + + throws_ok + { + $attrs = $patron->attributes_from_api( + { + date_of_birth => '20141205', + } + ); + } + 'Koha::Exceptions::BadParameter', + 'Bad date throws an exception'; + + is( + $@->parameter, + 'date_of_birth', + 'Exception parameter is the API field name, not the DB one' + ); + }; + + subtest 'booleans handling tests' => sub { - ok( exists $attrs->{gonenoaddress}, 'Attribute gets translated' ); - is( $attrs->{gonenoaddress}, 1, 'Boolean correctly translated to integer (true => 1)' ); - ok( exists $attrs->{lost}, 'Attribute gets translated' ); - is( $attrs->{lost}, 0, 'Boolean correctly translated to integer (false => 0)' ); + plan tests => 4; + + my $patron = Koha::Patron->new; + + my $attrs = $patron->attributes_from_api( + { + incorrect_address => Mojo::JSON->true, + patron_card_lost => Mojo::JSON->false, + } + ); + + ok( exists $attrs->{gonenoaddress}, 'Attribute gets translated' ); + is( $attrs->{gonenoaddress}, 1, 'Boolean correctly translated to integer (true => 1)' ); + ok( exists $attrs->{lost}, 'Attribute gets translated' ); + is( $attrs->{lost}, 0, 'Boolean correctly translated to integer (false => 0)' ); + }; }; subtest "Test update method" => sub { diff --git a/t/db_dependent/api/v1/patrons.t b/t/db_dependent/api/v1/patrons.t index dbe6c1bbc5..6f38a92b59 100755 --- a/t/db_dependent/api/v1/patrons.t +++ b/t/db_dependent/api/v1/patrons.t @@ -475,6 +475,12 @@ subtest 'update() tests' => sub { $newpatron->{ userid } = "user" . $patron_1->id.$patron_2->id; $newpatron->{ surname } = "user" . $patron_1->id.$patron_2->id; + ## Trying to set to null on specially handled cases + # Special case: a date + $newpatron->{ date_of_birth } = undef; + # Special case: a date-time + $newpatron->{ last_seen } = undef; + my $result = $t->put_ok( "//$userid:$password@/api/v1/patrons/" . $patron_2->borrowernumber => json => $newpatron ) ->status_is(200, 'Patron updated successfully'); -- 2.20.1