@@ -, +, @@ - http://prntscr.com/cz7ch3 - http://prntscr.com/cz7em4 - http://prntscr.com/cz7dj1 http://prntscr.com/cz7g5q --- Koha/Patron.pm | 2 +- t/db_dependent/Koha/Patrons.t | 60 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) --- a/Koha/Patron.pm +++ a/Koha/Patron.pm @@ -583,7 +583,7 @@ sub is_category_valid { my $patroncategory = $self->category; my ($low,$high) = ($patroncategory->dateofbirthrequired, $patroncategory->upperagelimit); - return (($high && ($age > $high)) or ($age < $low)) ? 0 : 1; + return (defined($age) && (($high && ($age > $high)) or ($age < $low))) ? 0 : 1; } =head3 account --- a/t/db_dependent/Koha/Patrons.t +++ a/t/db_dependent/Koha/Patrons.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 22; +use Test::More tests => 23; use Test::Warn; use Time::Fake; use DateTime; @@ -531,6 +531,64 @@ subtest 'get_age' => sub { $patron->delete; }; +subtest 'is_category_valid' => sub { + plan tests => 10; + + my $today = dt_from_string; + + my $category = $builder->build({ + source => 'Category', + value => { + categorycode => 'AGE_5_10', + dateofbirthrequired => 5, + upperagelimit => 10 + } + }); + $category = Koha::Patron::Categories->find( $category->{categorycode} ); + + my $patron = $builder->build({ + source => 'Borrower', + value => { + categorycode => 'AGE_5_10' + } + }); + $patron = Koha::Patrons->find( $patron->{borrowernumber} ); + + + $patron->dateofbirth( undef ); + is( $patron->is_category_valid, 1, 'Patron with no dateofbirth is always valid for any category'); + + $patron->dateofbirth( $today->clone->add( years => -12, months => -6, days => -1 ) ); + is( $patron->is_category_valid, 0, 'Patron is 12, so his age is above allowed range 5-10 years'); + + $patron->dateofbirth( $today->clone->add( years => -3, months => -6, days => -1 ) ); + is( $patron->is_category_valid, 0, 'Patron is 3, so his age is below allowed range 5-10 years'); + + $patron->dateofbirth( $today->clone->add( years => -7, months => -6, days => -1 ) ); + is( $patron->is_category_valid, 1, 'Patron is 7, so his age perfectly suits allowed range 5-10 years'); + + $patron->dateofbirth( $today->clone->add( years => -5, months => 0, days => 0 ) ); + is( $patron->is_category_valid, 1, 'Patron celebrates the 5th birthday today, so he is allowed for this category'); + + $patron->dateofbirth( $today->clone->add( years => -5, months => 0, days => 1 ) ); + is( $patron->is_category_valid, 0, 'Patron will celebrate the 5th birthday tomorrow, so he is NOT allowed for this category'); + + $patron->dateofbirth( $today->clone->add( years => -5, months => 0, days => -1 ) ); + is( $patron->is_category_valid, 1, 'Patron celebrated the 5th birthday yesterday, so he is allowed for this category'); + + $patron->dateofbirth( $today->clone->add( years => -11, months => 0, days => 0 ) ); + is( $patron->is_category_valid, 0, 'Patron celebrate the 11th birthday today, so he is NOT allowed for this category'); + + $patron->dateofbirth( $today->clone->add( years => -11, months => 0, days => 1 ) ); + is( $patron->is_category_valid, 1, 'Patron will celebrate the 11th birthday tomorrow, so he is allowed for this category'); + + $patron->dateofbirth( $today->clone->add( years => -11, months => 0, days => -1 ) ); + is( $patron->is_category_valid, 0, 'Patron celebrated the 11th birthday yesterday, so he is NOT allowed for this category'); + + $patron->delete; + $category->delete; +}; + subtest 'account' => sub { plan tests => 1; --