From d25f3e84374ec8d7c85f8ed805102f67c0a73d77 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Fri, 12 Jul 2019 11:45:25 +0100 Subject: [PATCH] Bug 22709: (RM follow-up) Clean up plugin tests The plugin tests were failing due to failed rollbacks and run order. This patch moves them into their own directory and adds a reset test to restore the original state of the plugin system after the tests have run. Signed-off-by: Martin Renvoize --- t/db_dependent/KitchenSinkPlugin.kpz | Bin 81187 -> 0 bytes .../Koha/Plugins/Biblio_and_Items_plugin_hooks.t | 85 +++++ t/db_dependent/Koha/Plugins/KitchenSinkPlugin.kpz | Bin 0 -> 81187 bytes t/db_dependent/Koha/Plugins/Plugins.t | 328 ++++++++++++++++++++ t/db_dependent/Koha/Plugins/z_reset.t | 28 ++ t/db_dependent/Plugins.t | 324 ------------------- .../Plugins/Biblio_and_Items_plugin_hooks.t | 85 ----- 7 files changed, 441 insertions(+), 409 deletions(-) delete mode 100644 t/db_dependent/KitchenSinkPlugin.kpz create mode 100755 t/db_dependent/Koha/Plugins/Biblio_and_Items_plugin_hooks.t create mode 100644 t/db_dependent/Koha/Plugins/KitchenSinkPlugin.kpz create mode 100755 t/db_dependent/Koha/Plugins/Plugins.t create mode 100644 t/db_dependent/Koha/Plugins/z_reset.t delete mode 100755 t/db_dependent/Plugins.t delete mode 100755 t/db_dependent/Plugins/Biblio_and_Items_plugin_hooks.t diff --git a/t/db_dependent/KitchenSinkPlugin.kpz b/t/db_dependent/KitchenSinkPlugin.kpz deleted file mode 100644 index de4a172d2107b391d6f085b0b089e07e16528b7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81187 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 UX6In6Yn#Atf&{2KD8rEcKS0V<<^TWy diff --git a/t/db_dependent/Koha/Plugins/Biblio_and_Items_plugin_hooks.t b/t/db_dependent/Koha/Plugins/Biblio_and_Items_plugin_hooks.t new file mode 100755 index 0000000..3a89ba1 --- /dev/null +++ b/t/db_dependent/Koha/Plugins/Biblio_and_Items_plugin_hooks.t @@ -0,0 +1,85 @@ +#!/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 . + +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 ); +t::lib::Mocks::mock_config( 'enable_plugins', 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->enable; + + 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; + Koha::Plugins::Methods->delete; +}; diff --git a/t/db_dependent/Koha/Plugins/KitchenSinkPlugin.kpz b/t/db_dependent/Koha/Plugins/KitchenSinkPlugin.kpz new file mode 100644 index 0000000000000000000000000000000000000000..de4a172d2107b391d6f085b0b089e07e16528b7e GIT binary patch literal 81187 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 UX6In6Yn#Atf&{2KD8rEcKS0V<<^TWy literal 0 HcmV?d00001 diff --git a/t/db_dependent/Koha/Plugins/Plugins.t b/t/db_dependent/Koha/Plugins/Plugins.t new file mode 100755 index 0000000..178c544 --- /dev/null +++ b/t/db_dependent/Koha/Plugins/Plugins.t @@ -0,0 +1,328 @@ +#!/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 . + +use Modern::Perl; + +use Archive::Extract; +use CGI; +use Cwd qw(abs_path); +use File::Basename; +use File::Spec; +use File::Temp qw( tempdir tempfile ); +use FindBin qw($Bin); +use Module::Load::Conditional qw(can_load); +use Test::MockModule; +use Test::More tests => 51; + +use C4::Context; +use Koha::Database; +use Koha::Plugins::Methods; + +use t::lib::Mocks; + +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::Plugins::Base'); + use_ok('Koha::Plugin::Test'); +} + +my $schema = Koha::Database->new->schema; + +subtest 'GetPlugins() tests' => sub { + + plan tests => 2; + + $schema->storage->txn_begin; + # Temporarily remove any installed plugins data + Koha::Plugins::Methods->delete; + + my $plugins = Koha::Plugins->new({ enable_plugins => 1 }); + $plugins->InstallPlugins; + + my @plugins = $plugins->GetPlugins({ method => 'report', all => 1 }); + + my @names = map { $_->get_metadata()->{'name'} } @plugins; + is( scalar grep( /^Test Plugin$/, @names), 1, "Koha::Plugins::GetPlugins functions correctly" ); + + @plugins = $plugins->GetPlugins({ metadata => { my_example_tag => 'find_me' }, all => 1 }); + @names = map { $_->get_metadata()->{'name'} } @plugins; + is( scalar @names, 2, "Only two plugins found via a metadata tag" ); + + $schema->storage->txn_rollback; +}; + +subtest 'Version upgrade tests' => sub { + + plan tests => 1; + + $schema->storage->txn_begin; + + my $plugin = Koha::Plugin::Test->new( { enable_plugins => 1, cgi => CGI->new } ); + + # make sure there's no version on the DB + $schema->resultset('PluginData') + ->search( { plugin_class => $plugin->{class}, plugin_key => '__INSTALLED_VERSION__' } ) + ->delete; + + $plugin = Koha::Plugin::Test->new( { enable_plugins => 1, cgi => CGI->new } ); + my $version = $plugin->retrieve_data('__INSTALLED_VERSION__'); + + is( $version, $plugin->get_metadata->{version}, 'Version has been populated correctly' ); + + $schema->storage->txn_rollback; +}; + +subtest 'is_enabled() tests' => sub { + + plan tests => 3; + $schema->storage->txn_begin; + + # Make sure there's no previous installs or leftovers on DB + Koha::Plugins::Methods->delete; + $schema->resultset('PluginData')->delete; + + my $plugin = Koha::Plugin::Test->new({ enable_plugins => 1, cgi => CGI->new }); + ok( $plugin->is_enabled, 'Plugins enabled by default' ); + + # disable + $plugin->disable; + ok( !$plugin->is_enabled, 'Calling ->disable disables the plugin' ); + + # enable + $plugin->enable; + ok( $plugin->is_enabled, 'Calling ->enable enabled the plugin' ); + + $schema->storage->txn_rollback; +}; + +$schema->storage->txn_begin; +Koha::Plugins::Methods->delete; + +Koha::Plugins->new( { enable_plugins => 1 } )->InstallPlugins(); + +ok( Koha::Plugins::Methods->search( { plugin_class => 'Koha::Plugin::Test' } )->count, 'Test plugin methods added to database' ); +is( Koha::Plugins::Methods->search({ plugin_class => 'Koha::Plugin::Test', plugin_method => '_private_sub' })->count, 0, 'Private methods are skipped' ); + +my $mock_plugin = Test::MockModule->new( 'Koha::Plugin::Test' ); +$mock_plugin->mock( 'test_template', sub { + my ( $self, $file ) = @_; + my $template = $self->get_template({ file => $file }); + $template->param( filename => $file ); + return $template->output; +}); + +ok( can_load( modules => { "Koha::Plugin::Test" => undef } ), 'Test can_load' ); + +my $plugin = Koha::Plugin::Test->new({ enable_plugins => 1, cgi => CGI->new }); + +isa_ok( $plugin, "Koha::Plugin::Test", 'Test plugin class' ); +isa_ok( $plugin, "Koha::Plugins::Base", 'Test plugin parent class' ); + +ok( $plugin->can('report'), 'Test plugin can report' ); +ok( $plugin->can('tool'), 'Test plugin can tool' ); +ok( $plugin->can('to_marc'), 'Test plugin can to_marc' ); +ok( $plugin->can('intranet_catalog_biblio_enhancements'), 'Test plugin can intranet_catalog_biblio_enhancements'); +ok( $plugin->can('intranet_catalog_biblio_enhancements_toolbar_button'), 'Test plugin can intranet_catalog_biblio_enhancements_toolbar_button' ); +ok( $plugin->can('opac_online_payment'), 'Test plugin can opac_online_payment' ); +ok( $plugin->can('opac_online_payment_begin'), 'Test plugin can opac_online_payment_begin' ); +ok( $plugin->can('opac_online_payment_end'), 'Test plugin can opac_online_payment_end' ); +ok( $plugin->can('opac_head'), 'Test plugin can opac_head' ); +ok( $plugin->can('opac_js'), 'Test plugin can opac_js' ); +ok( $plugin->can('intranet_head'), 'Test plugin can intranet_head' ); +ok( $plugin->can('intranet_js'), 'Test plugin can intranet_js' ); +ok( $plugin->can('configure'), 'Test plugin can configure' ); +ok( $plugin->can('install'), 'Test plugin can install' ); +ok( $plugin->can('upgrade'), 'Test plugin can upgrade' ); +ok( $plugin->can('uninstall'), 'Test plugin can install' ); + +is( Koha::Plugins::Handler->run({ class => "Koha::Plugin::Test", method => 'report', enable_plugins => 1 }), "Koha::Plugin::Test::report", 'Test run plugin report method' ); + +my $metadata = $plugin->get_metadata(); +is( $metadata->{'name'}, 'Test Plugin', 'Test $plugin->get_metadata()' ); + +is( $plugin->get_qualified_table_name('mytable'), 'koha_plugin_test_mytable', 'Test $plugin->get_qualified_table_name()' ); +is( $plugin->get_plugin_http_path(), '/plugin/Koha/Plugin/Test', 'Test $plugin->get_plugin_http_path()' ); + +# test absolute path change in get_template with Koha::Plugin::Test +# using the mock set before +# we also add tmpdir as an approved template dir +t::lib::Mocks::mock_config( 'pluginsdir', [ C4::Context->temporary_directory ] ); +my ( $fh, $fn ) = tempfile( SUFFIX => '.tt', UNLINK => 1, DIR => C4::Context->temporary_directory ); +print $fh 'I am [% filename %]'; +close $fh; +my $classname = ref($plugin); +like( $plugin->test_template($fn), qr/^I am $fn/, 'Template works' ); + +my $result = $plugin->enable; +is( ref($result), 'Koha::Plugin::Test' ); + +# testing GetPlugins +my @plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({ + method => 'report' +}); + +my @names = map { $_->get_metadata()->{'name'} } @plugins; +is( scalar grep( /^Test Plugin$/, @names), 1, "Koha::Plugins::GetPlugins functions correctly" ); +@plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({ + metadata => { my_example_tag => 'find_me' }, +}); + +@names = map { $_->get_metadata()->{'name'} } @plugins; +is( scalar grep( /^Test Plugin$/, @names), 1, "GetPlugins also found Test Plugin via a metadata tag" ); + +$result = $plugin->disable; +is( ref($result), 'Koha::Plugin::Test' ); + +@plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins(); +@names = map { $_->get_metadata()->{'name'} } @plugins; +is( scalar grep( /^Test Plugin$/, @names), 0, "GetPlugins does not found disabled Test Plugin" ); + +@plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({ all => 1 }); +@names = map { $_->get_metadata()->{'name'} } @plugins; +is( scalar grep( /^Test Plugin$/, @names), 1, "With all param, GetPlugins found disabled Test Plugin" ); + +for my $pass ( 1 .. 2 ) { + my $plugins_dir; + my $module_name = 'Koha::Plugin::Com::ByWaterSolutions::KitchenSink'; + my $pm_path = 'Koha/Plugin/Com/ByWaterSolutions/KitchenSink.pm'; + if ( $pass == 1 ) { + my $plugins_dir1 = tempdir( CLEANUP => 1 ); + t::lib::Mocks::mock_config('pluginsdir', $plugins_dir1); + $plugins_dir = $plugins_dir1; + push @INC, $plugins_dir1; + } else { + my $plugins_dir1 = tempdir( CLEANUP => 1 ); + my $plugins_dir2 = tempdir( CLEANUP => 1 ); + t::lib::Mocks::mock_config('pluginsdir', [ $plugins_dir2, $plugins_dir1 ]); + $plugins_dir = $plugins_dir2; + pop @INC; + push @INC, $plugins_dir2; + push @INC, $plugins_dir1; + } + my $full_pm_path = $plugins_dir . '/' . $pm_path; + + my $ae = Archive::Extract->new( archive => "$Bin/KitchenSinkPlugin.kpz", type => 'zip' ); + unless ( $ae->extract( to => $plugins_dir ) ) { + warn "ERROR: " . $ae->error; + } + use_ok('Koha::Plugin::Com::ByWaterSolutions::KitchenSink'); + $plugin = Koha::Plugin::Com::ByWaterSolutions::KitchenSink->new({ enable_plugins => 1}); + my $table = $plugin->get_qualified_table_name( 'mytable' ); + + ok( -f $plugins_dir . "/Koha/Plugin/Com/ByWaterSolutions/KitchenSink.pm", "KitchenSink plugin installed successfully" ); + $INC{$pm_path} = $full_pm_path; # FIXME I do not really know why, but if this is moved before the $plugin constructor, it will fail with Can't locate object method "new" via package "Koha::Plugin::Com::ByWaterSolutions::KitchenSink" + Koha::Plugins->new( { enable_plugins => 1 } )->InstallPlugins(); + Koha::Plugins::Handler->delete({ class => "Koha::Plugin::Com::ByWaterSolutions::KitchenSink", enable_plugins => 1 }); + my $sth = C4::Context->dbh->table_info( undef, undef, $table, 'TABLE' ); + my $info = $sth->fetchall_arrayref; + is( @$info, 0, "Table $table does no longer exist" ); + ok( !( -f $full_pm_path ), "Koha::Plugins::Handler::delete works correctly." ); +} + +subtest 'output and output_html tests' => sub { + + plan tests => 6; + + # Trick stdout to be able to test + local *STDOUT; + my $stdout; + open STDOUT, '>', \$stdout; + + my $plugin = Koha::Plugin::Test->new({ enable_plugins => 1, cgi => CGI->new }); + $plugin->test_output; + + like($stdout, qr/Cache-control: no-cache/, 'force_no_caching sets Cache-control as desired'); + like($stdout, qr{Content-Type: application/json; charset=UTF-8}, 'Correct content-type'); + like($stdout, qr{¡Hola output!}, 'Correct data'); + + # reset the stdout buffer + $stdout = ''; + close STDOUT; + open STDOUT, '>', \$stdout; + + $plugin->test_output_html; + + like($stdout, qr/Cache-control: no-cache/, 'force_no_caching sets Cache-control as desired'); + like($stdout, qr{Content-Type: text/html; charset=UTF-8}, 'Correct content-type'); + like($stdout, qr{¡Hola output_html!}, 'Correct data'); +}; + +subtest 'Test _version_compare' => sub { + + plan tests => 12; + + t::lib::Mocks::mock_config( 'enable_plugins', 1 ); + + is( Koha::Plugins::Base::_version_compare( '1.1.1', '2.2.2' ), -1, "1.1.1 is less then 2.2.2" ); + is( Koha::Plugins::Base::_version_compare( '2.2.2', '1.1.1' ), 1, "1.1.1 is greater then 2.2.2" ); + is( Koha::Plugins::Base::_version_compare( '1.1.1', '1.1.1' ), 0, "1.1.1 is equal to 1.1.1" ); + is( Koha::Plugins::Base::_version_compare( '1.01.001', '1.1.1' ), 0, "1.01.001 is equal to 1.1.1" ); + is( Koha::Plugins::Base::_version_compare( '1', '1.0.0' ), 0, "1 is equal to 1.0.0" ); + is( Koha::Plugins::Base::_version_compare( '1.0', '1.0.0' ), 0, "1.0 is equal to 1.0.0" ); + + # OO tests + my $plugin = Koha::Plugin::Test->new; + is( $plugin->_version_compare( '1.1.1', '2.2.2' ), -1, "1.1.1 is less then 2.2.2" ); + is( $plugin->_version_compare( '2.2.2', '1.1.1' ), 1, "1.1.1 is greater then 2.2.2" ); + is( $plugin->_version_compare( '1.1.1', '1.1.1' ), 0, "1.1.1 is equal to 1.1.1" ); + is( $plugin->_version_compare( '1.01.001', '1.1.1' ), 0, "1.01.001 is equal to 1.1.1" ); + is( $plugin->_version_compare( '1', '1.0.0' ), 0, "1 is equal to 1.0.0" ); + is( $plugin->_version_compare( '1.0', '1.0.0' ), 0, "1.0 is equal to 1.0.0" ); +}; + +subtest 'bundle_path() tests' => sub { + + plan tests => 1; + + t::lib::Mocks::mock_config( 'enable_plugins', 1 ); + + my @current_dir = File::Spec->splitdir(abs_path(__FILE__)); + # remote Plugins.t + pop @current_dir; + # remove /Plugins + pop @current_dir; + # remove /Koha + pop @current_dir; + # remove db_dependent + pop @current_dir; + + my $plugin = Koha::Plugin::Test->new; + + is( $plugin->bundle_path, File::Spec->catdir(@current_dir) . '/lib/Koha/Plugin/Test' ); + +}; + +subtest 'new() tests' => sub { + + plan tests => 2; + + t::lib::Mocks::mock_config( 'pluginsdir', [ C4::Context->temporary_directory ] ); + t::lib::Mocks::mock_config( 'enable_plugins', 0 ); + + my $result = Koha::Plugins->new(); + is( $result, undef, 'calling new() on disabled plugins returns undef' ); + + $result = Koha::Plugins->new({ enable_plugins => 1 }); + is( ref($result), 'Koha::Plugins', 'calling new with enable_plugins makes it override the config' ); +}; + +$schema->storage->txn_rollback; +Koha::Plugins::Methods->delete; diff --git a/t/db_dependent/Koha/Plugins/z_reset.t b/t/db_dependent/Koha/Plugins/z_reset.t new file mode 100644 index 0000000..302873a --- /dev/null +++ b/t/db_dependent/Koha/Plugins/z_reset.t @@ -0,0 +1,28 @@ +#!/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 . + +use Modern::Perl; +use C4::Context; +use Koha::Plugins; +use Koha::Plugins::Methods; + +use Test::More tests => 1; + +my $plugins = Koha::Plugins->new()->InstallPlugins; + +ok( 1, 'Plugins reset' ); + +1; diff --git a/t/db_dependent/Plugins.t b/t/db_dependent/Plugins.t deleted file mode 100755 index 052b7ea..0000000 --- a/t/db_dependent/Plugins.t +++ /dev/null @@ -1,324 +0,0 @@ -#!/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 . - -use Modern::Perl; - -use Archive::Extract; -use CGI; -use Cwd qw(abs_path); -use File::Basename; -use File::Spec; -use File::Temp qw( tempdir tempfile ); -use FindBin qw($Bin); -use Module::Load::Conditional qw(can_load); -use Test::MockModule; -use Test::More tests => 51; - -use C4::Context; -use Koha::Database; -use Koha::Plugins::Methods; - -use t::lib::Mocks; - -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::Plugins::Base'); - use_ok('Koha::Plugin::Test'); -} - -my $schema = Koha::Database->new->schema; - -subtest 'GetPlugins() tests' => sub { - - plan tests => 2; - - $schema->storage->txn_begin; - # Temporarily remove any installed plugins data - Koha::Plugins::Methods->delete; - - my $plugins = Koha::Plugins->new({ enable_plugins => 1 }); - $plugins->InstallPlugins; - - my @plugins = $plugins->GetPlugins({ method => 'report', all => 1 }); - - my @names = map { $_->get_metadata()->{'name'} } @plugins; - is( scalar grep( /^Test Plugin$/, @names), 1, "Koha::Plugins::GetPlugins functions correctly" ); - - @plugins = $plugins->GetPlugins({ metadata => { my_example_tag => 'find_me' }, all => 1 }); - @names = map { $_->get_metadata()->{'name'} } @plugins; - is( scalar @names, 2, "Only two plugins found via a metadata tag" ); - - $schema->storage->txn_rollback; -}; - -subtest 'Version upgrade tests' => sub { - - plan tests => 1; - - $schema->storage->txn_begin; - - my $plugin = Koha::Plugin::Test->new( { enable_plugins => 1, cgi => CGI->new } ); - - # make sure there's no version on the DB - $schema->resultset('PluginData') - ->search( { plugin_class => $plugin->{class}, plugin_key => '__INSTALLED_VERSION__' } ) - ->delete; - - $plugin = Koha::Plugin::Test->new( { enable_plugins => 1, cgi => CGI->new } ); - my $version = $plugin->retrieve_data('__INSTALLED_VERSION__'); - - is( $version, $plugin->get_metadata->{version}, 'Version has been populated correctly' ); - - $schema->storage->txn_rollback; -}; - -subtest 'is_enabled() tests' => sub { - - plan tests => 3; - $schema->storage->txn_begin; - - # Make sure there's no previous installs or leftovers on DB - Koha::Plugins::Methods->delete; - $schema->resultset('PluginData')->delete; - - my $plugin = Koha::Plugin::Test->new({ enable_plugins => 1, cgi => CGI->new }); - ok( $plugin->is_enabled, 'Plugins enabled by default' ); - - # disable - $plugin->disable; - ok( !$plugin->is_enabled, 'Calling ->disable disables the plugin' ); - - # enable - $plugin->enable; - ok( $plugin->is_enabled, 'Calling ->enable enabled the plugin' ); - - $schema->storage->txn_rollback; -}; - -$schema->storage->txn_begin; -Koha::Plugins::Methods->delete; - -Koha::Plugins->new( { enable_plugins => 1 } )->InstallPlugins(); - -ok( Koha::Plugins::Methods->search( { plugin_class => 'Koha::Plugin::Test' } )->count, 'Test plugin methods added to database' ); -is( Koha::Plugins::Methods->search({ plugin_class => 'Koha::Plugin::Test', plugin_method => '_private_sub' })->count, 0, 'Private methods are skipped' ); - -my $mock_plugin = Test::MockModule->new( 'Koha::Plugin::Test' ); -$mock_plugin->mock( 'test_template', sub { - my ( $self, $file ) = @_; - my $template = $self->get_template({ file => $file }); - $template->param( filename => $file ); - return $template->output; -}); - -ok( can_load( modules => { "Koha::Plugin::Test" => undef } ), 'Test can_load' ); - -my $plugin = Koha::Plugin::Test->new({ enable_plugins => 1, cgi => CGI->new }); - -isa_ok( $plugin, "Koha::Plugin::Test", 'Test plugin class' ); -isa_ok( $plugin, "Koha::Plugins::Base", 'Test plugin parent class' ); - -ok( $plugin->can('report'), 'Test plugin can report' ); -ok( $plugin->can('tool'), 'Test plugin can tool' ); -ok( $plugin->can('to_marc'), 'Test plugin can to_marc' ); -ok( $plugin->can('intranet_catalog_biblio_enhancements'), 'Test plugin can intranet_catalog_biblio_enhancements'); -ok( $plugin->can('intranet_catalog_biblio_enhancements_toolbar_button'), 'Test plugin can intranet_catalog_biblio_enhancements_toolbar_button' ); -ok( $plugin->can('opac_online_payment'), 'Test plugin can opac_online_payment' ); -ok( $plugin->can('opac_online_payment_begin'), 'Test plugin can opac_online_payment_begin' ); -ok( $plugin->can('opac_online_payment_end'), 'Test plugin can opac_online_payment_end' ); -ok( $plugin->can('opac_head'), 'Test plugin can opac_head' ); -ok( $plugin->can('opac_js'), 'Test plugin can opac_js' ); -ok( $plugin->can('intranet_head'), 'Test plugin can intranet_head' ); -ok( $plugin->can('intranet_js'), 'Test plugin can intranet_js' ); -ok( $plugin->can('configure'), 'Test plugin can configure' ); -ok( $plugin->can('install'), 'Test plugin can install' ); -ok( $plugin->can('upgrade'), 'Test plugin can upgrade' ); -ok( $plugin->can('uninstall'), 'Test plugin can install' ); - -is( Koha::Plugins::Handler->run({ class => "Koha::Plugin::Test", method => 'report', enable_plugins => 1 }), "Koha::Plugin::Test::report", 'Test run plugin report method' ); - -my $metadata = $plugin->get_metadata(); -is( $metadata->{'name'}, 'Test Plugin', 'Test $plugin->get_metadata()' ); - -is( $plugin->get_qualified_table_name('mytable'), 'koha_plugin_test_mytable', 'Test $plugin->get_qualified_table_name()' ); -is( $plugin->get_plugin_http_path(), '/plugin/Koha/Plugin/Test', 'Test $plugin->get_plugin_http_path()' ); - -# test absolute path change in get_template with Koha::Plugin::Test -# using the mock set before -# we also add tmpdir as an approved template dir -t::lib::Mocks::mock_config( 'pluginsdir', [ C4::Context->temporary_directory ] ); -my ( $fh, $fn ) = tempfile( SUFFIX => '.tt', UNLINK => 1, DIR => C4::Context->temporary_directory ); -print $fh 'I am [% filename %]'; -close $fh; -my $classname = ref($plugin); -like( $plugin->test_template($fn), qr/^I am $fn/, 'Template works' ); - -my $result = $plugin->enable; -is( ref($result), 'Koha::Plugin::Test' ); - -# testing GetPlugins -my @plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({ - method => 'report' -}); - -my @names = map { $_->get_metadata()->{'name'} } @plugins; -is( scalar grep( /^Test Plugin$/, @names), 1, "Koha::Plugins::GetPlugins functions correctly" ); -@plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({ - metadata => { my_example_tag => 'find_me' }, -}); - -@names = map { $_->get_metadata()->{'name'} } @plugins; -is( scalar grep( /^Test Plugin$/, @names), 1, "GetPlugins also found Test Plugin via a metadata tag" ); - -$result = $plugin->disable; -is( ref($result), 'Koha::Plugin::Test' ); - -@plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins(); -@names = map { $_->get_metadata()->{'name'} } @plugins; -is( scalar grep( /^Test Plugin$/, @names), 0, "GetPlugins does not found disabled Test Plugin" ); - -@plugins = Koha::Plugins->new({ enable_plugins => 1 })->GetPlugins({ all => 1 }); -@names = map { $_->get_metadata()->{'name'} } @plugins; -is( scalar grep( /^Test Plugin$/, @names), 1, "With all param, GetPlugins found disabled Test Plugin" ); - -for my $pass ( 1 .. 2 ) { - my $plugins_dir; - my $module_name = 'Koha::Plugin::Com::ByWaterSolutions::KitchenSink'; - my $pm_path = 'Koha/Plugin/Com/ByWaterSolutions/KitchenSink.pm'; - if ( $pass == 1 ) { - my $plugins_dir1 = tempdir( CLEANUP => 1 ); - t::lib::Mocks::mock_config('pluginsdir', $plugins_dir1); - $plugins_dir = $plugins_dir1; - push @INC, $plugins_dir1; - } else { - my $plugins_dir1 = tempdir( CLEANUP => 1 ); - my $plugins_dir2 = tempdir( CLEANUP => 1 ); - t::lib::Mocks::mock_config('pluginsdir', [ $plugins_dir2, $plugins_dir1 ]); - $plugins_dir = $plugins_dir2; - pop @INC; - push @INC, $plugins_dir2; - push @INC, $plugins_dir1; - } - my $full_pm_path = $plugins_dir . '/' . $pm_path; - - my $ae = Archive::Extract->new( archive => "$Bin/KitchenSinkPlugin.kpz", type => 'zip' ); - unless ( $ae->extract( to => $plugins_dir ) ) { - warn "ERROR: " . $ae->error; - } - use_ok('Koha::Plugin::Com::ByWaterSolutions::KitchenSink'); - $plugin = Koha::Plugin::Com::ByWaterSolutions::KitchenSink->new({ enable_plugins => 1}); - my $table = $plugin->get_qualified_table_name( 'mytable' ); - - ok( -f $plugins_dir . "/Koha/Plugin/Com/ByWaterSolutions/KitchenSink.pm", "KitchenSink plugin installed successfully" ); - $INC{$pm_path} = $full_pm_path; # FIXME I do not really know why, but if this is moved before the $plugin constructor, it will fail with Can't locate object method "new" via package "Koha::Plugin::Com::ByWaterSolutions::KitchenSink" - Koha::Plugins->new( { enable_plugins => 1 } )->InstallPlugins(); - Koha::Plugins::Handler->delete({ class => "Koha::Plugin::Com::ByWaterSolutions::KitchenSink", enable_plugins => 1 }); - my $sth = C4::Context->dbh->table_info( undef, undef, $table, 'TABLE' ); - my $info = $sth->fetchall_arrayref; - is( @$info, 0, "Table $table does no longer exist" ); - ok( !( -f $full_pm_path ), "Koha::Plugins::Handler::delete works correctly." ); -} - -subtest 'output and output_html tests' => sub { - - plan tests => 6; - - # Trick stdout to be able to test - local *STDOUT; - my $stdout; - open STDOUT, '>', \$stdout; - - my $plugin = Koha::Plugin::Test->new({ enable_plugins => 1, cgi => CGI->new }); - $plugin->test_output; - - like($stdout, qr/Cache-control: no-cache/, 'force_no_caching sets Cache-control as desired'); - like($stdout, qr{Content-Type: application/json; charset=UTF-8}, 'Correct content-type'); - like($stdout, qr{¡Hola output!}, 'Correct data'); - - # reset the stdout buffer - $stdout = ''; - close STDOUT; - open STDOUT, '>', \$stdout; - - $plugin->test_output_html; - - like($stdout, qr/Cache-control: no-cache/, 'force_no_caching sets Cache-control as desired'); - like($stdout, qr{Content-Type: text/html; charset=UTF-8}, 'Correct content-type'); - like($stdout, qr{¡Hola output_html!}, 'Correct data'); -}; - -subtest 'Test _version_compare' => sub { - - plan tests => 12; - - t::lib::Mocks::mock_config( 'enable_plugins', 1 ); - - is( Koha::Plugins::Base::_version_compare( '1.1.1', '2.2.2' ), -1, "1.1.1 is less then 2.2.2" ); - is( Koha::Plugins::Base::_version_compare( '2.2.2', '1.1.1' ), 1, "1.1.1 is greater then 2.2.2" ); - is( Koha::Plugins::Base::_version_compare( '1.1.1', '1.1.1' ), 0, "1.1.1 is equal to 1.1.1" ); - is( Koha::Plugins::Base::_version_compare( '1.01.001', '1.1.1' ), 0, "1.01.001 is equal to 1.1.1" ); - is( Koha::Plugins::Base::_version_compare( '1', '1.0.0' ), 0, "1 is equal to 1.0.0" ); - is( Koha::Plugins::Base::_version_compare( '1.0', '1.0.0' ), 0, "1.0 is equal to 1.0.0" ); - - # OO tests - my $plugin = Koha::Plugin::Test->new; - is( $plugin->_version_compare( '1.1.1', '2.2.2' ), -1, "1.1.1 is less then 2.2.2" ); - is( $plugin->_version_compare( '2.2.2', '1.1.1' ), 1, "1.1.1 is greater then 2.2.2" ); - is( $plugin->_version_compare( '1.1.1', '1.1.1' ), 0, "1.1.1 is equal to 1.1.1" ); - is( $plugin->_version_compare( '1.01.001', '1.1.1' ), 0, "1.01.001 is equal to 1.1.1" ); - is( $plugin->_version_compare( '1', '1.0.0' ), 0, "1 is equal to 1.0.0" ); - is( $plugin->_version_compare( '1.0', '1.0.0' ), 0, "1.0 is equal to 1.0.0" ); -}; - -subtest 'bundle_path() tests' => sub { - - plan tests => 1; - - t::lib::Mocks::mock_config( 'enable_plugins', 1 ); - - my @current_dir = File::Spec->splitdir(abs_path(__FILE__)); - # remote Plugins.t - pop @current_dir; - # remove db_dependent - pop @current_dir; - - my $plugin = Koha::Plugin::Test->new; - - is( $plugin->bundle_path, File::Spec->catdir(@current_dir) . '/lib/Koha/Plugin/Test' ); - -}; - -subtest 'new() tests' => sub { - - plan tests => 2; - - t::lib::Mocks::mock_config( 'pluginsdir', [ C4::Context->temporary_directory ] ); - t::lib::Mocks::mock_config( 'enable_plugins', 0 ); - - my $result = Koha::Plugins->new(); - is( $result, undef, 'calling new() on disabled plugins returns undef' ); - - $result = Koha::Plugins->new({ enable_plugins => 1 }); - is( ref($result), 'Koha::Plugins', 'calling new with enable_plugins makes it override the config' ); -}; - -$schema->storage->txn_rollback; -Koha::Plugins::Methods->delete; diff --git a/t/db_dependent/Plugins/Biblio_and_Items_plugin_hooks.t b/t/db_dependent/Plugins/Biblio_and_Items_plugin_hooks.t deleted file mode 100755 index a841e2c..0000000 --- a/t/db_dependent/Plugins/Biblio_and_Items_plugin_hooks.t +++ /dev/null @@ -1,85 +0,0 @@ -#!/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 . - -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 ); -t::lib::Mocks::mock_config( 'enable_plugins', 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->enable; - - 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; - Koha::Plugins::Methods->delete; -}; -- 1.7.2.5