From 02fc6ca6d1b740cf7e0015f190efd5cb7c56883c Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Fri, 8 May 2020 08:39:10 -0300 Subject: [PATCH] Bug 25423: Add Koha::Exceptions::Object::NotInstantiated Signed-off-by: Tomas Cohen Arazi Signed-off-by: Jonathan Druart --- Koha/Exceptions/Object.pm | 8 ++++++++ t/Koha/Exceptions.t | 24 +++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Koha/Exceptions/Object.pm b/Koha/Exceptions/Object.pm index 53bd44ca90..688a97cd5a 100644 --- a/Koha/Exceptions/Object.pm +++ b/Koha/Exceptions/Object.pm @@ -55,6 +55,11 @@ use Exception::Class ( description => 'Invalid data passed', fields => ['type', 'property', 'value'], }, + 'Koha::Exceptions::Object::NotInstantiated' => { + isa => 'Koha::Exceptions::Object', + description => 'Tried to access a method on an uninstantiated object', + fields => ['class','method'] + }, 'Koha::Exceptions::Object::NotInStorage' => { isa => 'Koha::Exceptions::Object', description => 'The object is not in storage yet', @@ -76,6 +81,9 @@ sub full_message { elsif ( $self->isa('Koha::Exceptions::Object::ReadOnlyProperty') ) { $msg = sprintf("Invalid attempt to change readonly property: %s", $self->property ); } + elsif ( $self->isa('Koha::Exceptions::Object::NotInstantiated') ) { + $msg = sprintf("Tried to access the '%s' method, but %s is not instantiated", $self->method, $self->class ); + } } return $msg; diff --git a/t/Koha/Exceptions.t b/t/Koha/Exceptions.t index bb36df3496..a63de79b9b 100644 --- a/t/Koha/Exceptions.t +++ b/t/Koha/Exceptions.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 5; +use Test::More tests => 6; use Test::MockObject; use Test::Exception; @@ -176,3 +176,25 @@ subtest 'Koha::Exceptions::Patron::Relationship tests' => sub { 'Exception is thrown :-D'; is( "$@", 'Manual message exception', 'Exception not stringified if manually passed' ); }; + +subtest 'Koha::Exceptions::Object::NotInstantiated tests' => sub { + + plan tests => 5; + + use_ok('Koha::Exceptions::Object::NotInstantiated'); + + throws_ok + { Koha::Exceptions::Object::NotInstantiated->throw( + method => 'brain_explode', class => 'Koha::JD' ); } + 'Koha::Exceptions::Object::NotInstantiated', + 'Exception is thrown :-D'; + + # stringify the exception + is( "$@", 'Tried to access the \'brain_explode\' method, but Koha::JD is not instantiated', 'Exception stringified correctly' ); + + throws_ok + { Koha::Exceptions::Object::NotInstantiated->throw( "Manual message exception" ) } + 'Koha::Exceptions::Object::NotInstantiated', + 'Exception is thrown :-D'; + is( "$@", 'Manual message exception', 'Exception not stringified if manually passed' ); +}; -- 2.39.5