From df06449b66119fbf671b87be00d53fe579d18dd5 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Mon, 14 Jan 2013 08:23:46 -0500 Subject: [PATCH] Bug 7804 - Add Koha Plugin System - Unit Tests Tests Ok ~/kohaclone$ perl t/db_dependent/Plugins.t 1..15 ok 1 - use Koha::Plugins; ok 2 - use Koha::Plugins::Handler; ok 3 - use Koha::Plugins::Base; ok 4 - use Koha::Plugin::Test; ok 5 - Test can_load ok 6 - Test plugin class isa Koha::Plugin::Test ok 7 - Test plugin parent class isa Koha::Plugins::Base ok 8 - Test plugin can report ok 9 - Test plugin can tool ok 10 - Test plugin can configure ok 11 - Test plugin can install ok 12 - Test plugin can install ok 13 - Test $plugin->get_metadata() ok 14 - Test $plugin->get_qualified_table_name() ok 15 - Test $plugin->get_plugin_http_path() (and all others as well) Signed-off-by: Bernardo Gonzalez Kriegel Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall --- Koha/Plugins.pm | 4 +- Koha/Plugins/Base.pm | 4 +- Koha/Plugins/Handler.pm | 5 ++- t/Koha/Plugin/Test.pm | 53 ++++++++++++++++++++++++++++++++++++++++++++++ t/db_dependent/Plugins.t | 39 +++++++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 t/Koha/Plugin/Test.pm create mode 100755 t/db_dependent/Plugins.t diff --git a/Koha/Plugins.pm b/Koha/Plugins.pm index 797f600..bc4a3bb 100644 --- a/Koha/Plugins.pm +++ b/Koha/Plugins.pm @@ -26,8 +26,6 @@ use C4::Context; use C4::Output; BEGIN { - die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") ); - push @INC, C4::Context->config("pluginsdir"); } @@ -40,6 +38,8 @@ Koha::Plugins - Module for loading and managing plugins. sub new { my ( $class, $args ) = @_; + die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); + $args->{'pluginsdir'} = C4::Context->config("pluginsdir"); return bless( $args, $class ); diff --git a/Koha/Plugins/Base.pm b/Koha/Plugins/Base.pm index f1cff3b..0e1aedc 100644 --- a/Koha/Plugins/Base.pm +++ b/Koha/Plugins/Base.pm @@ -27,8 +27,6 @@ use C4::Context; use C4::Auth; BEGIN { - die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") ); - push @INC, C4::Context->config("pluginsdir"); } @@ -41,6 +39,8 @@ C4::Plugins::Base - Base Module for plugins sub new { my ( $class, $args ) = @_; + die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); + $args->{'class'} = $class; $args->{'template'} = Template->new( { ABSOLUTE => 1 } ); diff --git a/Koha/Plugins/Handler.pm b/Koha/Plugins/Handler.pm index 7ecdb79..d2f324a 100644 --- a/Koha/Plugins/Handler.pm +++ b/Koha/Plugins/Handler.pm @@ -26,8 +26,6 @@ use Module::Load::Conditional qw(can_load); use C4::Context; BEGIN { - die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") ); - push @INC, C4::Context->config("pluginsdir"); } @@ -52,6 +50,9 @@ Runs a plugin sub run { my ( $class, $args ) = @_; + + die('Plugins not enabled in config') unless ( C4::Context->config("enable_plugins") || $args->{'enable_plugins'} ); + my $plugin_class = $args->{'class'}; my $plugin_method = $args->{'method'}; my $cgi = $args->{'cgi'}; diff --git a/t/Koha/Plugin/Test.pm b/t/Koha/Plugin/Test.pm new file mode 100644 index 0000000..d34a6eb --- /dev/null +++ b/t/Koha/Plugin/Test.pm @@ -0,0 +1,53 @@ +package Koha::Plugin::Test; + +## It's good practive to use Modern::Perl +use Modern::Perl; + +## Required for all plugins +use base qw(Koha::Plugins::Base); + +our $VERSION = 1.01; +our $metadata = { + name => 'Test Plugin', + author => 'Kyle M Hall', + description => 'Test plugin', + date_authored => '2013-01-14', + date_updated => '2013-01-14', + minimum_version => '3.11', + maximum_version => undef, + version => $VERSION, +}; + +## This is the minimum code required for a plugin's 'new' method +## More can be added, but none should be removed +sub new { + my ( $class, $args ) = @_; + $args->{'metadata'} = $metadata; + my $self = $class->SUPER::new($args); + return $self; +} + +sub report { + my ( $self, $args ) = @_; + return 1; +} + +sub tool { + my ( $self, $args ) = @_; + return 1; +} + +sub configure { + my ( $self, $args ) = @_; + return 1; +} + +sub install { + my ( $self, $args ) = @_; + return 1; +} + +sub uninstall { + my ( $self, $args ) = @_; + return 1; +} diff --git a/t/db_dependent/Plugins.t b/t/db_dependent/Plugins.t new file mode 100755 index 0000000..52495ea --- /dev/null +++ b/t/db_dependent/Plugins.t @@ -0,0 +1,39 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 15; +use File::Basename; + +use Module::Load::Conditional qw(can_load); + +use C4::Context; + +BEGIN { + push( @INC, dirname(__FILE__) . '/..' ); + + use_ok('Koha::Plugins'); + use_ok('Koha::Plugins::Handler'); + use_ok('Koha::Plugins::Base'); + use_ok('Koha::Plugin::Test'); +} + +ok( can_load( modules => { "Koha::Plugin::Test" => undef } ), 'Test can_load' ); + +my $plugin = Koha::Plugin::Test->new({ enable_plugins => 1}); + +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('configure'), 'Test plugin can configure' ); +ok( $plugin->can('install'), 'Test plugin can install' ); +ok( $plugin->can('uninstall'), 'Test plugin can install' ); + +my $metadata = $plugin->get_metadata(); +ok( $metadata->{'name'} eq 'Test Plugin', 'Test $plugin->get_metadata()' ); + +ok( $plugin->get_qualified_table_name('mytable') eq 'koha_plugin_test_mytable', 'Test $plugin->get_qualified_table_name()' ); +ok( $plugin->get_plugin_http_path() eq '/plugin/Koha/Plugin/Test', 'Test $plugin->get_plugin_http_path()' ); \ No newline at end of file -- 1.7.2.5