Bugzilla – Attachment 91244 Details for
Bug 22709
Add hooks to notify plugins of biblio and item changes
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 22709: Unit tests
Bug-22709-Unit-tests.patch (text/plain), 5.69 KB, created by
Josef Moravec
on 2019-07-03 21:19:24 UTC
(
hide
)
Description:
Bug 22709: Unit tests
Filename:
MIME Type:
Creator:
Josef Moravec
Created:
2019-07-03 21:19:24 UTC
Size:
5.69 KB
patch
obsolete
>From 771beb685b2299c48750779d25240d6305f53074 Mon Sep 17 00:00:00 2001 >From: Tomas Cohen Arazi <tomascohen@theke.io> >Date: Fri, 21 Jun 2019 17:09:56 -0300 >Subject: [PATCH] Bug 22709: Unit tests > >This patch introduces tests for new plugin hooks added to >C4::Biblio::{Add|Mod|Del}Biblio and C4::Items::{Add|Mod|Del}Item. > >They are tested together as for creating an item you need to first create >a biblio and tests looks basically the same. > >The testing strategy is >- Make sure the plugin is passed the right params >- Throw an exception at plugin-level, to be trapped by the C4::Biblio >and C4::Items lib, and converted into a warning. So we test for the >warning. >- Also, the fact that C4::Biblio and C4::Items warns, means the >exception was cought, and then Koha won't break on faulty plugins or >fatal errors from plugins. > >Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> > >Signed-off-by: Josef Moravec <josef.moravec@gmail.com> >--- > t/db_dependent/Biblio_and_Items_plugin_hooks.t | 83 ++++++++++++++++++++++++++ > t/lib/Koha/Plugin/Test.pm | 30 ++++++++++ > 2 files changed, 113 insertions(+) > create mode 100755 t/db_dependent/Biblio_and_Items_plugin_hooks.t > >diff --git a/t/db_dependent/Biblio_and_Items_plugin_hooks.t b/t/db_dependent/Biblio_and_Items_plugin_hooks.t >new file mode 100755 >index 0000000000..2d5602ada6 >--- /dev/null >+++ b/t/db_dependent/Biblio_and_Items_plugin_hooks.t >@@ -0,0 +1,83 @@ >+#!/usr/bin/perl >+ >+# This file is part of Koha. >+# >+# Koha is free software; you can redistribute it and/or modify it under the >+# terms of the GNU General Public License as published by the Free Software >+# Foundation; either version 3 of the License, or (at your option) any later >+# version. >+# >+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY >+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR >+# A PARTICULAR PURPOSE. See the GNU General Public License for more details. >+# >+# You should have received a copy of the GNU General Public License along >+# with Koha; if not, see <http://www.gnu.org/licenses>. >+ >+use Modern::Perl; >+ >+use Test::More tests => 4; >+use Test::Warn; >+ >+use File::Basename; >+ >+use C4::Items; >+ >+use t::lib::Mocks; >+use t::lib::TestBuilder; >+ >+BEGIN { >+ # Mock pluginsdir before loading Plugins module >+ my $path = dirname(__FILE__) . '/../lib'; >+ t::lib::Mocks::mock_config( 'pluginsdir', $path ); >+ >+ use_ok('Koha::Plugins'); >+ use_ok('Koha::Plugins::Handler'); >+ use_ok('Koha::Plugin::Test'); >+} >+ >+my $schema = Koha::Database->new->schema; >+my $builder = t::lib::TestBuilder->new; >+ >+t::lib::Mocks::mock_preference( 'UseKohaPlugins', 1 ); >+ >+subtest 'after_biblio_action() and after_item_action() hooks tests' => sub { >+ >+ plan tests => 6; >+ >+ $schema->storage->txn_begin; >+ >+ my $plugins = Koha::Plugins->new; >+ $plugins->InstallPlugins; >+ >+ my $plugin = Koha::Plugin::Test->new; >+ >+ my $biblio_id; >+ >+ warning_like { $biblio_id = C4::Biblio::AddBiblio( MARC::Record->new(), '' ); } >+ qr/after_biblio_action called with action: create, ref: Koha::Biblio/, >+ 'AddBiblio calls the hook with action=create'; >+ >+ warning_like { C4::Biblio::ModBiblio( MARC::Record->new(), $biblio_id, '' ); } >+ qr/after_biblio_action called with action: modify, ref: Koha::Biblio/, >+ 'ModBiblio calls the hook with action=modify'; >+ >+ my $item; >+ warning_like { $item = $builder->build_sample_item({ biblionumber => $biblio_id }); } >+ qr/after_item_action called with action: create, ref: Koha::Item/, >+ 'AddItem calls the hook with action=create'; >+ >+ warning_like { C4::Items::ModItem({ location => 'shelves' }, $biblio_id, $item->itemnumber); } >+ qr/after_item_action called with action: modify, ref: Koha::Item/, >+ 'ModItem calls the hook with action=modify'; >+ >+ warning_like { C4::Items::DelItem({ itemnumber => $item->itemnumber }); } >+ qr/after_item_action called with action: delete/, >+ 'DelItem calls the hook with action=delete, item_id passed'; >+ >+ warning_like { C4::Biblio::DelBiblio( $biblio_id ); } >+ qr/after_biblio_action called with action: delete/, >+ 'DelBiblio calls the hook with action=delete biblio_id passed'; >+ >+ $schema->storage->txn_rollback; >+}; >diff --git a/t/lib/Koha/Plugin/Test.pm b/t/lib/Koha/Plugin/Test.pm >index 764b5a6b2b..e34b61d5d1 100644 >--- a/t/lib/Koha/Plugin/Test.pm >+++ b/t/lib/Koha/Plugin/Test.pm >@@ -3,6 +3,7 @@ package Koha::Plugin::Test; > ## It's good practice to use Modern::Perl > use Modern::Perl; > >+use Koha::Exceptions::Exception; > use Mojo::JSON qw(decode_json); > > ## Required for all plugins >@@ -124,6 +125,35 @@ sub api_namespace { > return "testplugin"; > } > >+sub after_biblio_action { >+ my ( $self, $params ) = @_; >+ my $action = $params->{action} // ''; >+ my $biblio = $params->{biblio}; >+ my $biblio_id = $params->{biblio_id}; >+ >+ if ( $action ne 'delete' ) { >+ Koha::Exceptions::Exception->throw("after_biblio_action called with action: $action, ref: " . ref($biblio) ); >+ } >+ else { >+ Koha::Exceptions::Exception->throw("after_biblio_action called with action: $action") if $biblio_id; >+ } >+} >+ >+ >+sub after_item_action { >+ my ( $self, $params ) = @_; >+ my $action = $params->{action} // ''; >+ my $item = $params->{item}; >+ my $item_id = $params->{item_id}; >+ >+ if ( $action ne 'delete' ) { >+ Koha::Exceptions::Exception->throw("after_item_action called with action: $action, ref: " . ref($item) ); >+ } >+ else { >+ Koha::Exceptions::Exception->throw("after_item_action called with action: $action" ) if $item_id; >+ } >+} >+ > sub api_routes { > my ( $self, $args ) = @_; > >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 22709
:
90950
|
90951
|
91186
|
91223
|
91224
|
91225
|
91226
| 91244 |
91245
|
91246
|
91247