Bug 16502: Table koha_plugin_com_bywatersolutions_kitchensink_mytable not always...
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Mon, 16 May 2016 15:19:54 +0000 (17:19 +0200)
committerChris Cormack <chrisc@catalyst.net.nz>
Thu, 7 Jul 2016 23:06:29 +0000 (11:06 +1200)
If you run Plugin.t, the above table will still be present (when you
did not enable UseKohaPlugins). This would trigger a warning when
running the test a second time.

Why? The uninstall call does its work not completely due to a small
inconsistency in Koha::Plugins::Handler::delete when calling run
without the enable_plugins parameter.

This patch resolves that inconsistency and also removes an unneeded skip
in Plugin.t in case the KitchenSink module already exists.
Note: This is a small fix. But I wonder if the Handler routines run and
delete should not have been implemented in Koha::Plugins::Base.
Also note that plugins/plugins-uninstall.pl will not be affacted by this
change, since it checks whether the pref is enabled before calling the
delete method.

Test plan:
[1] Do not yet install this patch.
[2] Verify that plugins are enabled in koha-conf.xml.
[3] Disable UseKohaPlugins in System Preferences!
[4] Run t/db_dependent/Plugins.t.
[5] Verify that table koha_plugin_com_bywatersolutions_kitchensink_mytable
    still exists. (It should have been deleted.) Remove it manually.
[6] Apply this patch.
[7] Run the test again.
[8] Verify that the table does not exist.
[9] Run the test again (without warnings).

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Srdjan <srdjan@catalyst.net.nz>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
(cherry picked from commit 4263ac2b92737024d8d620a751babf72b904b73a)
Signed-off-by: Frédéric Demians <f.demians@tamil.fr>
(cherry picked from commit 4ebe7b489c9798d2456bd3de1d95ec6e027b2b21)
Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
(cherry picked from commit 752e31425efa34fa6f21446fb18cf34ba31fc441)
Signed-off-by: Chris Cormack <chrisc@catalyst.net.nz>

Koha/Plugins/Handler.pm
t/db_dependent/Plugins.t

index 187560d..903b446 100644 (file)
@@ -78,11 +78,18 @@ Deletes a plugin
 
 sub delete {
     my ( $class, $args ) = @_;
+
+    return unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} );
+
     my $plugin_class = $args->{'class'};
     my $plugin_dir   = C4::Context->config("pluginsdir");
     my $plugin_path  = "$plugin_dir/" . join( '/', split( '::', $args->{'class'} ) );
 
-    Koha::Plugins::Handler->run( { class => $plugin_class, method => 'uninstall' } );
+    Koha::Plugins::Handler->run({
+        class          => $plugin_class,
+        method         => 'uninstall',
+        enable_plugins => $args->{enable_plugins},
+    });
 
     C4::Context->dbh->do( "DELETE FROM plugin_data WHERE plugin_class = ?", undef, ($plugin_class) );
 
index 3271b1a..6cff239 100755 (executable)
@@ -49,7 +49,7 @@ SKIP: {
     my $plugins_dir = C4::Context->config("pluginsdir");
     skip "plugindir not set", 3 unless defined $plugins_dir;
     skip "plugindir not writable", 3 unless -w $plugins_dir;
-    skip "KitchenSink plugin already installed", 3 if (-f "$plugins_dir/Koha/Plugin/Com/ByWaterSolutions/KitchenSink.pm");
+    # no need to skip further tests if KitchenSink would already exist
 
     my $ae = Archive::Extract->new( archive => "$Bin/KitchenSinkPlugin.kpz", type => 'zip' );
     unless ( $ae->extract( to => $plugins_dir ) ) {
@@ -59,7 +59,6 @@ SKIP: {
     $plugin = Koha::Plugin::Com::ByWaterSolutions::KitchenSink->new({ enable_plugins => 1});
 
     ok( -f $plugins_dir . "/Koha/Plugin/Com/ByWaterSolutions/KitchenSink.pm", "KitchenSink plugin installed successfully" );
-    Koha::Plugins::Handler->delete({ class => "Koha::Plugin::Com::ByWaterSolutions::KitchenSink" });
+    Koha::Plugins::Handler->delete({ class => "Koha::Plugin::Com::ByWaterSolutions::KitchenSink", enable_plugins => 1 });
     ok( !( -f $plugins_dir . "/Koha/Plugin/Com/ByWaterSolutions/KitchenSink.pm" ), "Koha::Plugins::Handler::delete works correctly." );
 }
-