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 <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
This commit is contained in:
Tomás Cohen Arazi 2020-09-28 10:49:24 -03:00 committed by Jonathan Druart
parent aa69ef6972
commit d576f887c1
2 changed files with 65 additions and 1 deletions

View file

@ -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 {
<some action that might fail>
}
catch {
if ( <fatal condition> ) {
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.

View file

@ -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' );
};