Bug 18361: [QA Follow-up] Resolve warning on undef values supplied

The following warning was raised in Letters.t:
DBIx::Class::ResultSource::_minimal_valueset_satisfying_constraint():
NULL/undef values supplied for requested unique constraint 'primary' (NULL
values in column(s): 'id'). This is almost certainly not what you wanted,
though you can set DBIC_NULLABLE_KEY_NOWARN to disable this warning.

This warning is triggered by this line in C4/Letters.pm:
    Koha::SMS::Providers->find( $member->{'sms_provider_id'} );
As you already guessed, the sms_provider_id returns undef.

Resolved in sub find by testing if there are parameters and if so, they
should not be all undefined. (In most cases there will be only one
parameter; but this report is about composite keys.)

Added a trivial test case in Objects.t too.

Test plan:
Run t/db_dependent/Koha/Object.t
Run t/db_dependent/Koha/Objects.t
Run t/db_dependent/Letters.t

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
This commit is contained in:
Marcel de Rooy 2017-06-16 07:57:14 +02:00 committed by Jonathan Druart
parent e1f943b999
commit e1afa469f8
2 changed files with 9 additions and 2 deletions

View File

@ -20,6 +20,7 @@ package Koha::Objects;
use Modern::Perl;
use Carp;
use List::MoreUtils qw( none );
use Koha::Database;
@ -86,7 +87,7 @@ sub find {
croak 'Cannot use "->find" in list context' if wantarray;
return unless @pars;
return if !@pars || none { defined($_) } @pars;
my $result = $self->_resultset()->find( @pars );

View File

@ -45,13 +45,19 @@ my $borrowernumber_exists = grep { /^borrowernumber$/ } @columns;
is( $borrowernumber_exists, 1, 'Koha::Objects->columns should return the table columns' );
subtest 'find' => sub {
plan tests => 2;
plan tests => 4;
my $patron = $builder->build({source => 'Borrower'});
my $patron_object = Koha::Patrons->find( $patron->{borrowernumber} );
is( $patron_object->borrowernumber, $patron->{borrowernumber}, '->find should return the correct object' );
eval { my @patrons = Koha::Patrons->find( $patron->{borrowernumber} ); };
like( $@, qr|^Cannot use "->find" in list context|, "->find should not be called in list context to avoid side-effects" );
# Test sending undef to find; should not generate a warning
warning_is { $patron = Koha::Patrons->find( undef ); }
"", "Sending undef does not trigger a DBIx warning";
warning_is { $patron = Koha::Patrons->find( undef, undef ); }
"", "Sending two undefs does not trigger a DBIx warning too";
};
subtest 'update' => sub {