From 385a51b7c5bf3c0f2bca965dcad24fa4c100757c Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Mon, 28 Sep 2020 10:49:24 -0300 Subject: [PATCH] Bug 26555: Add ->messages and ->add_message to Koha::Object This patch adds a way to make Koha::Object-derived classes to carry messages around. This targets non-fatal errors, or around action flags for the caller, to avoid complex exception handling on the controllers when it is not expected to be fatal. To test: 1. Apply this patchset 2. Run: $ kshell k$ prove t/db_dependent/Koha/Object.t => SUCCESS: Tests pass! 3. Sign off :-D Signed-off-by: David Nind Signed-off-by: Martin Renvoize --- Koha/Object.pm | 43 ++++++++++++++++++++++++++++++++++++ t/db_dependent/Koha/Object.t | 23 ++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/Koha/Object.pm b/Koha/Object.pm index bb2a5d8ee8a..da9315dcc87 100644 --- a/Koha/Object.pm +++ b/Koha/Object.pm @@ -28,6 +28,7 @@ use Try::Tiny; use Koha::Database; use Koha::Exceptions::Object; use Koha::DateUtils; +use Koha::Object::Message; =head1 NAME @@ -77,6 +78,8 @@ sub new { $schema->resultset( $class->_type() )->new($attributes); } + $self->{_messages} = []; + croak("No _type found! Koha::Object must be subclassed!") unless $class->_type(); @@ -332,6 +335,46 @@ sub get_from_storage { return $object_class->_new_from_dbic($stored_object); } +=head3 $object->messages + + my @messages = @{ $object->messages }; + +Returns the (probably non-fatal) messages that were recorded on the object. + +=cut + +sub messages { + my ( $self ) = @_; + return $self->{_messages}; +} + +=head3 $object->add_message + + try { + + } + catch { + if ( ) { + Koha::Exception->throw... + } + + # This is a non fatal error, notify the caller + $self->add_message({ message => $error, type => 'error' }); + } + return $self; + +Adds a message. + +=cut + +sub add_message { + my ( $self, $params ) = @_; + + push @{ $self->{_messages} }, Koha::Object::Message->new($params); + + return $self; +} + =head3 $object->TO_JSON Returns an unblessed representation of the object, suitable for JSON output. diff --git a/t/db_dependent/Koha/Object.t b/t/db_dependent/Koha/Object.t index cae049cbd29..90315331133 100755 --- a/t/db_dependent/Koha/Object.t +++ b/t/db_dependent/Koha/Object.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 20; +use Test::More tests => 21; use Test::Exception; use Test::Warn; use DateTime; @@ -867,3 +867,24 @@ subtest 'set_or_blank' => sub { $schema->storage->txn_rollback; }; + +subtest 'messages() and add_message() tests' => sub { + + plan tests => 6; + + my $patron = Koha::Patron->new; + + my @messages = @{ $patron->messages }; + is( scalar @messages, 0, 'No messages' ); + + $patron->add_message({ message => "message_1" }); + $patron->add_message({ message => "message_2" }); + + @messages = @{ $patron->messages }; + + is( scalar @messages, 2, 'Messages are returned' ); + is( ref($messages[0]), 'Koha::Object::Message', 'Right type returned' ); + is( ref($messages[1]), 'Koha::Object::Message', 'Right type returned' ); + is( $messages[0]->message, 'message_1', 'Right message recorded' ); + is( $messages[1]->message, 'message_2', 'Right message recorded' ); +}; -- 2.28.0