From 3a24bbfe730fbe1bae30b172625a14647b029661 Mon Sep 17 00:00:00 2001 From: Andrew Isherwood Date: Tue, 2 Oct 2018 14:56:53 +0100 Subject: [PATCH] Bug 20750: Add unit tests --- t/Log.t | 1 + t/db_dependent/Illrequest/Logger.t | 155 +++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+) create mode 100644 t/db_dependent/Illrequest/Logger.t diff --git a/t/Log.t b/t/Log.t index 601b909974..14a5673d9b 100755 --- a/t/Log.t +++ b/t/Log.t @@ -16,6 +16,7 @@ BEGIN { t::lib::Mocks::mock_preference('BorrowersLog', 1); t::lib::Mocks::mock_preference('CataloguingLog', 1); t::lib::Mocks::mock_preference('IssueLog', 1); +t::lib::Mocks::mock_preference('IllLog', 1); t::lib::Mocks::mock_preference('ReturnLog', 1); t::lib::Mocks::mock_preference('SubscriptionLog', 1); t::lib::Mocks::mock_preference('LetterLog', 1); diff --git a/t/db_dependent/Illrequest/Logger.t b/t/db_dependent/Illrequest/Logger.t new file mode 100644 index 0000000000..a88fc7c485 --- /dev/null +++ b/t/db_dependent/Illrequest/Logger.t @@ -0,0 +1,155 @@ + +#!/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 Koha::Database; + +use Test::More tests => 2; +use Test::MockModule; +use Test::MockObject; +use t::lib::Mocks; + +my $schema = Koha::Database->new->schema; + +# A mock response from C4::Log::GetLogs() +my $logs = [ + { + info => '{"log_origin": "core"}', + action => 'STATUS_CHANGE', + timestamp => 1538478742 + }, + { + info => '{"log_origin": "core"}', + action => 'STATUS_CHANGE', + timestamp => 1538478732 + }, + { + info => '{"log_origin": "core"}', + action => 'STATUS_CHANGE', + timestamp => 1538478752 + } +]; +# Mock the modules we use +my $c4_log = Test::MockModule->new('C4::Log'); +$c4_log->mock('logaction', sub { 1 }); +$c4_log->mock('GetLogs', sub { return $logs; }); +my $c4_tpl = Test::MockModule->new('C4::Templates'); +$c4_tpl->mock('_get_template_file', + sub { return ('htdocs', 'theme', 'lang', 'base/'); }); + +use_ok('Koha::Illrequest::Logger'); + +subtest 'Basics' => sub { + + plan tests => 10; + + $schema->storage->txn_begin; + + my $logger = Koha::Illrequest::Logger->new; + + # new() + # + ok( defined($logger), 'new() returned something' ); + ok( $logger->isa('Koha::Illrequest::Logger'), + 'new() returns the correct object' ); + is_deeply($logger->{data}, {modulename => 'ILL'}, + 'new() setting modulename'); + + # This is an incomplete data hashref, we use it to + # test validation of the data before logging + my $log_obj = { + modulename => 'modulename', + actionname => 'actionname', + infos => 'infos' + }; + + # set_data() + # + $logger->set_data($log_obj); + is_deeply($logger->{data}->{actionname}, 'actionname', + 'set_data() setter works'); + + # log_something() + # + # Do we only log when the pref is set (currently unset) + is($logger->log_something(), '', + 'logaction() not being called without pref being set'); + + # Set the pref + t::lib::Mocks::mock_preference( 'IllLog', 1 ); + # We should not log without all the required data, we are still + # using the incomplete hashref + is($logger->log_something(), '', + 'logaction() being called when data is incomplete'); + + # Fix the data hashref, then test that logging occurs + $log_obj->{objectnumber} = 'objectnumber'; + $logger->set_data($log_obj); + is($logger->log_something(), 1, + 'logaction() being called when pref is set and data is complete'); + + # log_maybe() + # + is($logger->log_maybe({}, {}), '', + 'log_maybe() does not log with incomplete data'); + + # get_log_template() + # + is( + $logger->get_log_template( + {}, + { origin => 'core', 'action' => 'STATUS_CHANGE' } + ), + 'base/status_change.tt', + 'get_log_template() fetches correct core template' + ); + + # get_request_logs + # + my $res_obj = [ + { + 'template' => 'mock', + 'info' => { 'log_origin' => 'core' }, + 'timestamp' => 1538478752, + 'action' => 'STATUS_CHANGE' + }, + { + 'template' => 'mock', + 'action' => 'STATUS_CHANGE', + 'timestamp' => 1538478742, + 'info' => { 'log_origin' => 'core' } + }, + { + 'template' => 'mock', + 'action' => 'STATUS_CHANGE', + 'info' => { 'log_origin' => 'core' }, + 'timestamp' => 1538478732 + } + ]; + my $me_mock = Test::MockModule->new('Koha::Illrequest::Logger'); + $me_mock->mock('get_log_template', sub { return 'mock'; }); + my $mock_req = Test::MockObject->new(); + $mock_req->mock('id', sub { 1 }); + is_deeply($logger->get_request_logs($mock_req), $res_obj, + 'get_request_logs() returns logs property structured and sorted'); + + $schema->storage->txn_rollback; +}; + +1; -- 2.11.0