Bug 20443: Handle non existent attribute when importing patrons
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 20 Mar 2020 08:38:03 +0000 (09:38 +0100)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 23 Mar 2020 13:49:24 +0000 (13:49 +0000)
There is much more to do here, but this patch has the same behavior than
before: a warn is displayed in the log, the UI is not aware of it

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Koha/Patron.pm
t/db_dependent/Koha/Patrons.t

index 9a06db3..4cd9099 100644 (file)
@@ -1467,7 +1467,14 @@ sub extended_attributes {
 
                 # Insert the new ones
                 for my $attribute (@$attributes) {
-                    $self->_result->create_related('borrower_attributes', $attribute);
+                    eval {
+                        $self->_result->create_related('borrower_attributes', $attribute);
+                    };
+                    # FIXME We should:
+                    # 1 - Raise an exception
+                    # 2 - Execute in a transaction and don't save
+                    #  or Insert anyway but display a message on the UI
+                    warn $@ if $@;
                 }
             }
         );
index 8a66a3d..a6ab9dc 100644 (file)
@@ -2021,7 +2021,7 @@ subtest 'anonymize' => sub {
 $schema->storage->txn_rollback;
 
 subtest 'extended_attributes' => sub {
-    plan tests => 10;
+    plan tests => 11;
     my $schema = Koha::Database->new->schema;
     $schema->storage->txn_begin;
 
@@ -2046,6 +2046,10 @@ subtest 'extended_attributes' => sub {
         }
     )->store;
 
+    my $deleted_attribute_type = $builder->build_object({ class => 'Koha::Patron::Attribute::Types' });
+    my $deleted_attribute_type_code = $deleted_attribute_type->code;
+    $deleted_attribute_type->delete;
+
     my $new_library = $builder->build( { source => 'Branch' } );
     my $attribute_type_limited = Koha::Patron::Attribute::Type->new(
         { code => 'my code3', description => 'my description3' } )->store;
@@ -2074,6 +2078,10 @@ subtest 'extended_attributes' => sub {
         {
             attribute => 'my attribute limited 2',
             code => $attribute_type_limited->code(),
+        },
+        {
+            attribute => 'my nonexistent attribute 2',
+            code => $deleted_attribute_type_code,
         }
     ];
 
@@ -2084,7 +2092,13 @@ subtest 'extended_attributes' => sub {
     $patron_1->extended_attributes->filter_by_branch_limitations->delete;
     $patron_2->extended_attributes->filter_by_branch_limitations->delete;
     $patron_1->extended_attributes($attributes_for_1);
-    $patron_2->extended_attributes($attributes_for_2);
+
+    my $print_error = $schema->storage->dbh->{PrintError};
+    $schema->storage->dbh->{PrintError} = 0;
+    warning_like {
+        $patron_2->extended_attributes($attributes_for_2);
+    } [ qr/a foreign key constraint fails/, qr/a foreign key constraint fails/ ], 'nonexistent attribute should have not exploded but print a warning';
+    $schema->storage->dbh->{PrintError} = $print_error;
 
     my $extended_attributes_for_1 = $patron_1->extended_attributes;
     is( $extended_attributes_for_1->count, 3, 'There should be 3 attributes now for patron 1');