From e1afa469f8313144c70ae91d7efa356beb8168b8 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Fri, 16 Jun 2017 07:57:14 +0200 Subject: [PATCH] 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 --- Koha/Objects.pm | 3 ++- t/db_dependent/Koha/Objects.t | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Koha/Objects.pm b/Koha/Objects.pm index ff1a7e5ebc..193e494a4c 100644 --- a/Koha/Objects.pm +++ b/Koha/Objects.pm @@ -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 ); diff --git a/t/db_dependent/Koha/Objects.t b/t/db_dependent/Koha/Objects.t index 0f5926de76..f5f9472299 100644 --- a/t/db_dependent/Koha/Objects.t +++ b/t/db_dependent/Koha/Objects.t @@ -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 { -- 2.39.5