From 6618ca3d3f58b3b0b3717bd0add27c7ea56c9d3e Mon Sep 17 00:00:00 2001 From: Lari Taskula Date: Thu, 15 Dec 2016 17:58:39 +0200 Subject: [PATCH] [SIGNED-OFF] Bug 17783: Test to confirm correct effective issuing rule selection This patch adds a test to cover the validity of effective issuing rule selection in correct order. To test: 1. Run t/db_dependent/Koha/IssuingRules.t Signed-off-by: Josef Moravec --- t/db_dependent/Koha/IssuingRules.t | 172 +++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 t/db_dependent/Koha/IssuingRules.t diff --git a/t/db_dependent/Koha/IssuingRules.t b/t/db_dependent/Koha/IssuingRules.t new file mode 100644 index 0000000..1d48fff --- /dev/null +++ b/t/db_dependent/Koha/IssuingRules.t @@ -0,0 +1,172 @@ +#!/usr/bin/perl + +# Copyright 2016 Koha-Suomi Oy +# +# 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 => 1; + +use Koha::IssuingRules; + +use t::lib::TestBuilder; + +my $schema = Koha::Database->new->schema; +$schema->storage->txn_begin; + +my $builder = t::lib::TestBuilder->new; + +subtest 'get_effective_issuing_rule' => sub { + plan tests => 1; + + my $patron = $builder->build({ source => 'Borrower' }); + my $item = $builder->build({ source => 'Item' }); + + my $categorycode = $patron->{'categorycode'}; + my $itemtype = $item->{'itype'}; + my $branchcode = $item->{'homebranch'}; + + subtest 'Get effective issuing rule in correct order' => sub { + plan tests => 18; + + my $rule; + Koha::IssuingRules->delete; + ok(!Koha::IssuingRules->search->count, 'There are no issuing rules.'); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + is($rule, undef, 'When I attempt to get effective issuing rule, then undef' + .' is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => '*', + categorycode => '*', + itemtype => '*', + })->store, 'Given I added an issuing rule branchcode => *, categorycode => *, itemtype => *,'); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, '*', '*', '*'), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => '*', + categorycode => '*', + itemtype => $itemtype, + })->store, "Given I added an issuing rule branchcode => *, categorycode => *, itemtype => $itemtype,"); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, '*', '*', $itemtype), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => '*', + categorycode => $categorycode, + itemtype => '*', + })->store, "Given I added an issuing rule branchcode => *, categorycode => $categorycode, itemtype => *,"); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, '*', $categorycode, '*'), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => '*', + categorycode => $categorycode, + itemtype => $itemtype, + })->store, "Given I added an issuing rule branchcode => *, categorycode => $categorycode, itemtype => $itemtype,"); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, '*', $categorycode, $itemtype), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => $branchcode, + categorycode => '*', + itemtype => '*', + })->store, "Given I added an issuing rule branchcode => $branchcode, categorycode => '*', itemtype => '*',"); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, $branchcode, '*', '*'), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => $branchcode, + categorycode => '*', + itemtype => $itemtype, + })->store, "Given I added an issuing rule branchcode => $branchcode, categorycode => '*', itemtype => $itemtype,"); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, $branchcode, '*', $itemtype), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => '*', + })->store, "Given I added an issuing rule branchcode => $branchcode, categorycode => $categorycode, itemtype => '*',"); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, $branchcode, $categorycode, '*'), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + + ok(Koha::IssuingRule->new({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + })->store, "Given I added an issuing rule branchcode => $branchcode, categorycode => $categorycode, itemtype => $itemtype,"); + $rule = Koha::IssuingRules->get_effective_issuing_rule({ + branchcode => $branchcode, + categorycode => $categorycode, + itemtype => $itemtype, + }); + ok(_row_match($rule, $branchcode, $categorycode, $itemtype), 'When I attempt to get effective issuing rule,' + .' then the above one is returned.'); + }; +}; + +sub _row_match { + my ($rule, $branchcode, $categorycode, $itemtype) = @_; + + return $rule->branchcode eq $branchcode && $rule->categorycode eq $categorycode + && $rule->itemtype eq $itemtype; +} + +$schema->storage->txn_rollback; + +1; -- 2.1.4