From 38132cabbb88a51b3b457972dc7119eecdc9cfb5 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Fri, 13 Apr 2018 09:38:50 +0200 Subject: [PATCH] Bug 18725: (QA follow-up) Use make_column_dirty instead of status change 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 Signed-off-by: Jonathan Druart --- C4/Letters.pm | 4 ++-- Koha/Object.pm | 2 +- t/db_dependent/Koha/Object.t | 13 +++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/C4/Letters.pm b/C4/Letters.pm index 59b7a25b79..40cd364db8 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -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', diff --git a/Koha/Object.pm b/Koha/Object.pm index 00e0c243a8..1f54273493 100644 --- a/Koha/Object.pm +++ b/Koha/Object.pm @@ -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; diff --git a/t/db_dependent/Koha/Object.t b/t/db_dependent/Koha/Object.t index 125394c234..a0c72e4058 100755 --- a/t/db_dependent/Koha/Object.t +++ b/t/db_dependent/Koha/Object.t @@ -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; }; -- 2.39.5