4 use Test::More tests => 16;
7 use t::lib::TestBuilder;
11 use Koha::AuthorisedValue;
12 use Koha::AuthorisedValues;
13 use Koha::AuthorisedValueCategories;
14 use Koha::MarcSubfieldStructures;
16 my $schema = Koha::Database->new->schema;
17 $schema->storage->txn_begin;
18 my $builder = t::lib::TestBuilder->new;
20 my @existing_categories = Koha::AuthorisedValues->new->categories;
23 Koha::AuthorisedValueCategory->new({ category_name => 'av_for_testing', is_system => 1 })->store;
24 Koha::AuthorisedValueCategory->new({ category_name => 'aaav_for_testing' })->store;
25 Koha::AuthorisedValueCategory->new({ category_name => 'restricted_for_testing' })->store;
26 my $av1 = Koha::AuthorisedValue->new(
28 category => 'av_for_testing',
29 authorised_value => 'value 1',
30 lib => 'display value 1',
31 lib_opac => 'opac display value 1',
32 imageurl => 'image1.png',
36 my $av2 = Koha::AuthorisedValue->new(
38 category => 'av_for_testing',
39 authorised_value => 'value 2',
40 lib => 'display value 2',
41 lib_opac => 'opac display value 2',
42 imageurl => 'image2.png',
46 my $av3 = Koha::AuthorisedValue->new(
48 category => 'av_for_testing',
49 authorised_value => 'value 3',
50 lib => 'display value 3',
51 lib_opac => 'opac display value 3',
52 imageurl => 'image2.png',
56 my $av4 = Koha::AuthorisedValue->new(
58 category => 'aaav_for_testing',
59 authorised_value => 'value 4',
60 lib => 'display value 4',
61 lib_opac => 'opac display value 4',
62 imageurl => 'image4.png',
65 my $av_empty_string = Koha::AuthorisedValue->new(
67 category => 'restricted_for_testing',
68 authorised_value => undef, # Should have been defaulted to ""
69 lib => 'display value undef',
70 lib_opac => 'opac display value undef',
73 my $av_0 = Koha::AuthorisedValue->new(
75 category => 'restricted_for_testing',
76 authorised_value => 0,
77 lib => 'display value 0',
78 lib_opac => 'opac display value 0',
82 ok( $av1->id(), 'AV 1 is inserted' );
83 ok( $av2->id(), 'AV 2 is inserted' );
84 ok( $av3->id(), 'AV 3 is inserted' );
85 ok( $av4->id(), 'AV 4 is inserted' );
87 { # delete is_system AV categories
89 Koha::AuthorisedValueCategories->find('av_for_testing')->delete
93 $_->isa('Koha::Exceptions::CannotDeleteDefault'),
94 'A system AV category cannot be deleted'
99 Koha::AuthorisedValueCategories->search->delete
103 $_->isa('Koha::Exceptions::CannotDeleteDefault'),
104 'system AV categories cannot be deleted'
109 is( $av3->opac_description, 'opac display value 3', 'Got correction opac description if lib_opac is set' );
111 is( $av3->opac_description, 'display value 3', 'Got correction opac description if lib_opac is *not* set' );
113 my @authorised_values =
114 Koha::AuthorisedValues->new()->search( { category => 'av_for_testing' } )->as_list;
115 is( @authorised_values, 3, "Get correct number of values" );
117 my $branchcode1 = $builder->build({ source => 'Branch' })->{branchcode};
118 my $branchcode2 = $builder->build({ source => 'Branch' })->{branchcode};
120 $av1->add_library_limit( $branchcode1 );
122 @authorised_values = Koha::AuthorisedValues->search_with_library_limits( { category => 'av_for_testing' }, {}, $branchcode1 )->as_list;
123 is( @authorised_values, 3, "Search including value with a branch limit ( branch can use the limited value ) gives correct number of results" );
125 @authorised_values = Koha::AuthorisedValues->search_with_library_limits( { category => 'av_for_testing' }, {}, $branchcode2 )->as_list;
126 is( @authorised_values, 2, "Search including value with a branch limit ( branch *cannot* use the limited value ) gives correct number of results" );
128 $av1->del_library_limit( $branchcode1 );
129 @authorised_values = Koha::AuthorisedValues->search_with_library_limits( { category => 'av_for_testing' }, {}, $branchcode2 )->as_list;
130 is( @authorised_values, 3, "Branch limitation deleted successfully" );
132 $av1->add_library_limit( $branchcode1 );
133 $av1->library_limits( [ $branchcode1, $branchcode2 ] );
135 my $limits = $av1->library_limits->as_list;
136 is( @$limits, 2, 'library_limits functions correctly both as setter and getter' );
138 my @categories = Koha::AuthorisedValues->new->categories;
139 is( @categories, @existing_categories+3, 'There should have 3 categories inserted' );
142 [ sort { uc $a cmp uc $b } @categories ],
143 'categories must be ordered by category names'
146 subtest 'search_by_*_field + find_by_koha_field + get_description + authorised_values' => sub {
149 my $test_cat = Koha::AuthorisedValueCategories->find('TEST');
150 $test_cat->delete if $test_cat;
151 my $mss = Koha::MarcSubfieldStructures->search( { tagfield => 952, tagsubfield => 'c', frameworkcode => '' } );
152 $mss->delete if $mss;
153 $mss = Koha::MarcSubfieldStructures->search( { tagfield => 952, tagsubfield => 'c', frameworkcode => 'ACQ' } );
154 $mss->delete if $mss;
155 $mss = Koha::MarcSubfieldStructures->search( { tagfield => 952, tagsubfield => 'd', frameworkcode => '' } );
156 $mss->delete if $mss;
157 $mss = Koha::MarcSubfieldStructures->search( { tagfield => 952, tagsubfield => '5', frameworkcode => '' } );
158 $mss->delete if $mss;
159 Koha::AuthorisedValueCategory->new( { category_name => 'TEST' } )->store;
160 Koha::AuthorisedValueCategory->new( { category_name => 'ANOTHER_4_TESTS' } )->store;
161 Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => 'c', frameworkcode => '', authorised_value => 'TEST', kohafield => 'items.location' } )->store;
162 Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => 'c', frameworkcode => 'ACQ', authorised_value => 'TEST', kohafield => 'items.location' } )->store;
163 Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => 'd', frameworkcode => '', authorised_value => 'ANOTHER_4_TESTS', kohafield => 'items.another_field' } )->store;
164 Koha::MarcSubfieldStructure->new( { tagfield => 952, tagsubfield => '5', frameworkcode => '', authorised_value => 'restricted_for_testing', kohafield => 'items.restricted' } )->store;
165 Koha::AuthorisedValue->new( { category => 'TEST', authorised_value => 'location_1', lib => 'location_1' } )->store;
166 Koha::AuthorisedValue->new( { category => 'TEST', authorised_value => 'location_2', lib => 'location_2' } )->store;
167 Koha::AuthorisedValue->new( { category => 'TEST', authorised_value => 'location_3', lib => 'location_3' } )->store;
168 Koha::AuthorisedValue->new( { category => 'ANOTHER_4_TESTS', authorised_value => 'an_av' } )->store;
169 Koha::AuthorisedValue->new( { category => 'ANOTHER_4_TESTS', authorised_value => 'another_av' } )->store;
170 subtest 'search_by_marc_field' => sub {
173 $avs = Koha::AuthorisedValues->search_by_marc_field();
175 $avs = Koha::AuthorisedValues->search_by_marc_field({ frameworkcode => '' });
177 $avs = Koha::AuthorisedValues->search_by_marc_field({ tagfield => 952, tagsubfield => 'c'});
178 is( $avs->count, 3, 'default fk');
179 is( $avs->next->authorised_value, 'location_1', );
181 subtest 'search_by_koha_field' => sub {
184 $avs = Koha::AuthorisedValues->search_by_koha_field();
186 $avs = Koha::AuthorisedValues->search_by_koha_field( { kohafield => 'items.location' } );
187 is( $avs->count, 3, );
188 is( $avs->next->authorised_value, 'location_1', );
191 subtest 'find_by_koha_field' => sub {
193 # Test authorised_value = 0
195 $av = Koha::AuthorisedValues->find_by_koha_field( { kohafield => 'items.restricted', authorised_value => 0 } );
196 is( $av->lib, $av_0->lib, );
197 # Test authorised_value = ""
198 $av = Koha::AuthorisedValues->find_by_koha_field( { kohafield => 'items.restricted', authorised_value => '' } );
199 is( $av->lib, $av_empty_string->lib, );
200 # Test authorised_value = undef => we do not want to retrieve anything
201 $av = Koha::AuthorisedValues->find_by_koha_field( { kohafield => 'items.restricted', authorised_value => undef } );
204 subtest 'get_description_by_koha_field' => sub {
208 # Test authorised_value = 0
209 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field(
210 { kohafield => 'items.restricted', authorised_value => 0 } );
211 is_deeply( $descriptions,
212 { lib => $av_0->lib, opac_description => $av_0->lib_opac },
215 # Test authorised_value = ""
216 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field(
217 { kohafield => 'items.restricted', authorised_value => '' } );
221 lib => $av_empty_string->lib,
222 opac_description => $av_empty_string->lib_opac
226 # Test authorised_value = undef => we do not want to retrieve anything
227 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field(
228 { kohafield => 'items.restricted', authorised_value => undef } );
229 is_deeply( $descriptions, {}, ) ; # This could be arguable, we could return undef instead
231 # No authorised_value
232 $descriptions = Koha::AuthorisedValues->get_description_by_koha_field(
233 { kohafield => 'items.restricted', authorised_value => "does not exist" } );
234 is_deeply( $descriptions, {}, ) ; # This could be arguable, we could return undef instead
236 subtest 'get_descriptions_by_koha_field' => sub {
238 my @descriptions = Koha::AuthorisedValues->get_descriptions_by_koha_field( { kohafield => 'items.restricted' } );
243 authorised_value => $av_0->authorised_value,
245 opac_description => $av_0->lib_opac
248 authorised_value => '',
249 lib => $av_empty_string->lib,
250 opac_description => $av_empty_string->lib_opac
255 subtest 'authorised_values' => sub {
259 $schema->storage->txn_begin;
261 my $authorised_value_category =
262 $builder->build_object(
264 class => 'Koha::AuthorisedValueCategories',
266 category_name => 'test_avs'
271 is( $authorised_value_category->authorised_values->count, 0, "no authorised values yet" );
273 my $av1 = Koha::AuthorisedValue->new(
275 category => 'test_avs',
276 authorised_value => 'value 1',
277 lib => 'display value 1',
278 lib_opac => 'opac display value 1',
279 imageurl => 'image1.png',
282 is( $authorised_value_category->authorised_values->count, 1, "one authorised value" );
284 $schema->storage->txn_rollback;
288 $schema->storage->txn_rollback;