Bug 18361: [QA Follow-up] Resolve warning on undef values supplied
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Fri, 16 Jun 2017 05:57:14 +0000 (07:57 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 16 Jun 2017 14:52:18 +0000 (11:52 -0300)
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>
Koha/Objects.pm
t/db_dependent/Koha/Objects.t

index ff1a7e5..193e494 100644 (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 );
 
index 0f5926d..f5f9472 100644 (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 {