From 7a8e342e7689e5966a9c575d22b26a7f2d77c30c Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Tue, 11 Feb 2025 11:02:37 -0300 Subject: [PATCH] Bug 39092: Unit tests Signed-off-by: David Nind Signed-off-by: Pedro Amorim --- t/db_dependent/Koha/Plugins/ILL/Backends.t | 68 ++++++++++++++++++++++ t/lib/plugins/Koha/Plugin/BackendClass.pm | 38 ++++++++++++ t/lib/plugins/Koha/Plugin/ILL/TestClass.pm | 42 +++++++++++++ 3 files changed, 148 insertions(+) create mode 100755 t/db_dependent/Koha/Plugins/ILL/Backends.t create mode 100644 t/lib/plugins/Koha/Plugin/BackendClass.pm create mode 100644 t/lib/plugins/Koha/Plugin/ILL/TestClass.pm diff --git a/t/db_dependent/Koha/Plugins/ILL/Backends.t b/t/db_dependent/Koha/Plugins/ILL/Backends.t new file mode 100755 index 00000000000..992677ce6e0 --- /dev/null +++ b/t/db_dependent/Koha/Plugins/ILL/Backends.t @@ -0,0 +1,68 @@ +#!/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 File::Basename; +use Test::More tests => 4; + +use t::lib::Mocks; +use t::lib::TestBuilder; + +use Koha::Database; + +BEGIN { + # Mock pluginsdir before loading Plugins module + my $path = dirname(__FILE__) . '/../../../../lib/plugins'; + t::lib::Mocks::mock_config( 'pluginsdir', $path ); + + use_ok('Koha::Plugins'); + use_ok('Koha::Plugins::Handler'); + use_ok('Koha::Plugin::BackendClass'); +} + +my $schema = Koha::Database->new->schema; +my $builder = t::lib::TestBuilder->new; + +t::lib::Mocks::mock_config( 'enable_plugins', 1 ); + +subtest 'get_backend_plugin(), new_ill_backend() and load_backend() tests' => sub { + + plan tests => 6; + + $schema->storage->txn_begin; + + my $plugins = Koha::Plugins->new; + $plugins->InstallPlugins; + + my $plugin = Koha::ILL::Request->new->get_backend_plugin('BackendClass'); + + is( + ref($plugin), 'Koha::Plugin::BackendClass', + 'Returns our Test Plugin which implements the Test Plugin backend' + ); + my $backend = $plugin->new_ill_backend(); + is( ref($backend), 'Koha::Plugin::ILL::TestClass', 'Returns the right object class' ); + + my $request = Koha::ILL::Request->new->load_backend('BackendClass'); + ok( $request->{_plugin}, 'Instantiated plugin stored for later use' ); + is( ref( $request->{_plugin} ), 'Koha::Plugin::BackendClass', 'Class is correct' ); + + ok( $request->{_my_backend}, 'Instantiated backend stored for later use' ); + is( ref( $request->{_my_backend} ), 'Koha::Plugin::ILL::TestClass', 'Returns the right object class' ); + + Koha::Plugins::Methods->delete; + $schema->storage->txn_rollback; +}; diff --git a/t/lib/plugins/Koha/Plugin/BackendClass.pm b/t/lib/plugins/Koha/Plugin/BackendClass.pm new file mode 100644 index 00000000000..67372a60fd2 --- /dev/null +++ b/t/lib/plugins/Koha/Plugin/BackendClass.pm @@ -0,0 +1,38 @@ +package Koha::Plugin::BackendClass; + +use Modern::Perl; + +use base qw(Koha::Plugins::Base); + +our $VERSION = "v1.01"; +our $metadata = { + name => 'BackendClass', + author => 'Koha Community', + description => 'Plugin testing backends as their own class', + date_authored => '2013-01-14', + date_updated => '2013-01-14', + minimum_version => '3.11', + maximum_version => undef, + version => $VERSION, + namespace => 'backend_class', +}; + +sub new { + my ( $class, $args ) = @_; + $args->{'metadata'} = $metadata; + my $self = $class->SUPER::new($args); + return $self; +} + +sub ill_backend { + my ($self) = @_; + return 'BackendClass'; +} + +sub new_ill_backend { + my ( $self, $args ) = @_; + require Koha::Plugin::ILL::TestClass; + return Koha::Plugin::ILL::TestClass->new($args); +} + +1; diff --git a/t/lib/plugins/Koha/Plugin/ILL/TestClass.pm b/t/lib/plugins/Koha/Plugin/ILL/TestClass.pm new file mode 100644 index 00000000000..caad5fbbfb7 --- /dev/null +++ b/t/lib/plugins/Koha/Plugin/ILL/TestClass.pm @@ -0,0 +1,42 @@ +package Koha::Plugin::ILL::TestClass; + +# 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; + +=head1 NAME + +Koha::Plugin::ILL::TestClass - Dummy ILL backend class + +=head1 API + +=head2 Class methods + +=head3 new + + my $backend = Koha::Plugin::ILL::TestClass->new; + +Constructor. + +=cut + +sub new { + my ( $class, $args ) = @_; + my $self = \$args; + bless( $self, $class ); + return $self; +} + +1; -- 2.39.5