3 # Copyright 2018 Koha Development team
5 # This file is part of Koha
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
22 use Test::More tests => 1;
25 use Koha::CirculationRules;
28 use t::lib::TestBuilder;
30 my $schema = Koha::Database->new->schema;
31 $schema->storage->txn_begin;
33 my $builder = t::lib::TestBuilder->new;
35 subtest 'set_rule + get_effective_rule' => sub {
38 my $categorycode = $builder->build_object( { class => 'Koha::Patron::Categories' } )->categorycode;
39 my $itemtype = $builder->build_object( { class => 'Koha::ItemTypes' } )->itemtype;
40 my $branchcode = $builder->build_object( { class => 'Koha::Libraries' } )->branchcode;
41 my $rule_name = 'my_rule';
42 my $default_rule_value = 1;
45 Koha::CirculationRules->delete;
47 throws_ok { Koha::CirculationRules->get_effective_rule }
48 'Koha::Exceptions::MissingParameter',
49 "Exception should be raised if get_effective_rule is called without rule_name parameter";
51 $rule = Koha::CirculationRules->get_effective_rule(
53 branchcode => $branchcode,
54 categorycode => $categorycode,
55 itemtype => $itemtype,
56 rule_name => $rule_name,
59 is( $rule, undef, 'Undef should be returned if no rule exist' );
61 Koha::CirculationRules->set_rule(
66 rule_name => $rule_name,
67 rule_value => $default_rule_value,
71 $rule = Koha::CirculationRules->get_effective_rule(
74 categorycode => undef,
76 rule_name => $rule_name,
79 is( $rule->rule_value, $default_rule_value, 'undef means default' );
80 $rule = Koha::CirculationRules->get_effective_rule(
85 rule_name => $rule_name,
89 is( $rule->rule_value, $default_rule_value, '* means default' );
91 Koha::CirculationRules->set_rule(
95 itemtype => $itemtype,
96 rule_name => $rule_name,
101 $rule = Koha::CirculationRules->get_effective_rule(
103 branchcode => $branchcode,
104 categorycode => $categorycode,
105 itemtype => $itemtype,
106 rule_name => $rule_name,
109 is( $rule->rule_value, 2,
110 'More specific rule is returned when itemtype is given' );
112 Koha::CirculationRules->set_rule(
115 categorycode => $categorycode,
117 rule_name => $rule_name,
122 $rule = Koha::CirculationRules->get_effective_rule(
125 branchcode => $branchcode,
126 categorycode => $categorycode,
127 itemtype => $itemtype,
128 rule_name => $rule_name,
131 is( $rule->rule_value, 3,
132 'More specific rule is returned when categorycode exists' );
134 Koha::CirculationRules->set_rule(
137 categorycode => $categorycode,
138 itemtype => $itemtype,
139 rule_name => $rule_name,
143 $rule = Koha::CirculationRules->get_effective_rule(
145 branchcode => $branchcode,
146 categorycode => $categorycode,
147 itemtype => $itemtype,
148 rule_name => $rule_name,
151 is( $rule->rule_value, 4,
152 'More specific rule is returned when categorycode and itemtype exist' );
154 Koha::CirculationRules->set_rule(
156 branchcode => $branchcode,
159 rule_name => $rule_name,
163 $rule = Koha::CirculationRules->get_effective_rule(
165 branchcode => $branchcode,
166 categorycode => $categorycode,
167 itemtype => $itemtype,
168 rule_name => $rule_name,
171 is( $rule->rule_value, 5,
172 'More specific rule is returned when branchcode exists' );
174 Koha::CirculationRules->set_rule(
176 branchcode => $branchcode,
178 itemtype => $itemtype,
179 rule_name => $rule_name,
183 $rule = Koha::CirculationRules->get_effective_rule(
185 branchcode => $branchcode,
186 categorycode => $categorycode,
187 itemtype => $itemtype,
188 rule_name => $rule_name,
191 is( $rule->rule_value, 6,
192 'More specific rule is returned when branchcode and itemtype exists' );
194 Koha::CirculationRules->set_rule(
196 branchcode => $branchcode,
197 categorycode => $categorycode,
199 rule_name => $rule_name,
203 $rule = Koha::CirculationRules->get_effective_rule(
205 branchcode => $branchcode,
206 categorycode => $categorycode,
207 itemtype => $itemtype,
208 rule_name => $rule_name,
211 is( $rule->rule_value, 7,
212 'More specific rule is returned when branchcode and categorycode exist'
215 Koha::CirculationRules->set_rule(
217 branchcode => $branchcode,
218 categorycode => $categorycode,
219 itemtype => $itemtype,
220 rule_name => $rule_name,
224 $rule = Koha::CirculationRules->get_effective_rule(
226 branchcode => $branchcode,
227 categorycode => $categorycode,
228 itemtype => $itemtype,
229 rule_name => $rule_name,
232 is( $rule->rule_value, 8,
233 'More specific rule is returned when branchcode, categorycode and itemtype exist'
236 my $our_branch_rules = Koha::CirculationRules->search({branchcode => $branchcode});
237 is( $our_branch_rules->count, 4, "We added 8 rules");
238 $our_branch_rules->delete;
239 is( $our_branch_rules->count, 0, "We deleted 8 rules");
244 $schema->storage->txn_rollback;