Bug 18725: (QA follow-up) Use make_column_dirty instead of status change
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Fri, 13 Apr 2018 07:38:50 +0000 (09:38 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 16 Apr 2018 16:07:22 +0000 (13:07 -0300)
Moving the status to the invalid 'processing' might well have unwanted
side-effects. (The status column will be set to empty string and we have
a problem if it is not processed.)

This patch allows pass-through of DBIX's make_column_dirty in
Koha::Object (simple tests included) and uses it to force an update.
If the update does not return true, it still exits.

Test plan:
[1] Read the changes.
[2] Run t/db_dependent/Koha/Object.t

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
C4/Letters.pm
Koha/Object.pm
t/db_dependent/Koha/Object.t

index 59b7a25..40cd364 100644 (file)
@@ -1065,9 +1065,9 @@ sub SendQueuedMessages {
     my $unsent_messages = _get_unsent_messages( $which_unsent_messages );
     MESSAGE: foreach my $message ( @$unsent_messages ) {
         my $message_object = Koha::Notice::Messages->find( $message->{message_id} );
-        $message_object->status('processing');
         # If this fails the database is unwritable and we won't manage to send a message that continues to be marked 'pending'
-        return unless $message_object->store();
+        $message_object->make_column_dirty('status');
+        return unless $message_object->store;
 
         # warn Data::Dumper->Dump( [ $message ], [ 'message' ] );
         warn sprintf( 'sending %s message to patron: %s',
index 00e0c24..1f54273 100644 (file)
@@ -390,7 +390,7 @@ sub AUTOLOAD {
         }
     }
 
-    my @known_methods = qw( is_changed id in_storage get_column discard_changes update related_resultset );
+    my @known_methods = qw( is_changed id in_storage get_column discard_changes update related_resultset make_column_dirty );
 
     Koha::Exceptions::Object::MethodNotCoveredByTests->throw( "The method $method is not covered by tests!" ) unless grep {/^$method$/} @known_methods;
 
index 125394c..a0c72e4 100755 (executable)
@@ -43,8 +43,8 @@ BEGIN {
 my $schema  = Koha::Database->new->schema;
 my $builder = t::lib::TestBuilder->new();
 
-subtest 'is_changed' => sub {
-    plan tests => 6;
+subtest 'is_changed / make_column_dirty' => sub {
+    plan tests => 9;
 
     $schema->storage->txn_begin;
 
@@ -70,6 +70,15 @@ subtest 'is_changed' => sub {
     $object->store();
     is( $object->is_changed(), 0, "Object no longer marked as changed after being stored" );
 
+    # Test make_column_dirty
+    $object->make_column_dirty('firstname');
+    is( $object->is_changed, 1, "Object is changed after make dirty" );
+    $object->store;
+    is( $object->is_changed, 0, "Store clears dirty mark" );
+    $object->make_column_dirty('firstname');
+    $object->discard_changes;
+    is( $object->is_changed, 0, "Discard clears dirty mark too" );
+
     $schema->storage->txn_rollback;
 };