4 use Test
::More tests
=> 17;
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' } );
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
->new()->search( { category
=> 'av_for_testing', branchcode
=> $branchcode1 } );
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
->new()->search( { category
=> 'av_for_testing', branchcode
=> $branchcode2 } );
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
->new()->search( { category
=> 'av_for_testing', branchcode
=> $branchcode2 } );
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' );
140 is
( $categories[0], $av4->category, 'The first category should be correct (ordered by category name)' );
141 is
( $categories[1], $av1->category, 'The second category should be correct (ordered by category name)' );
143 subtest
'search_by_*_field + find_by_koha_field + get_description' => sub {
146 my $test_cat = Koha
::AuthorisedValueCategories
->find('TEST');
147 $test_cat->delete if $test_cat;
148 my $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> '' } );
149 $mss->delete if $mss;
150 $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> 'ACQ' } );
151 $mss->delete if $mss;
152 $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> 'd', frameworkcode
=> '' } );
153 $mss->delete if $mss;
154 $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> '5', frameworkcode
=> '' } );
155 $mss->delete if $mss;
156 Koha
::AuthorisedValueCategory
->new( { category_name
=> 'TEST' } )->store;
157 Koha
::AuthorisedValueCategory
->new( { category_name
=> 'ANOTHER_4_TESTS' } )->store;
158 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> '', authorised_value
=> 'TEST', kohafield
=> 'items.location' } )->store;
159 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> 'ACQ', authorised_value
=> 'TEST', kohafield
=> 'items.location' } )->store;
160 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> 'd', frameworkcode
=> '', authorised_value
=> 'ANOTHER_4_TESTS', kohafield
=> 'items.another_field' } )->store;
161 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> '5', frameworkcode
=> '', authorised_value
=> 'restricted_for_testing', kohafield
=> 'items.restricted' } )->store;
162 Koha
::AuthorisedValue
->new( { category
=> 'TEST', authorised_value
=> 'location_1' } )->store;
163 Koha
::AuthorisedValue
->new( { category
=> 'TEST', authorised_value
=> 'location_2' } )->store;
164 Koha
::AuthorisedValue
->new( { category
=> 'TEST', authorised_value
=> 'location_3' } )->store;
165 Koha
::AuthorisedValue
->new( { category
=> 'ANOTHER_4_TESTS', authorised_value
=> 'an_av' } )->store;
166 Koha
::AuthorisedValue
->new( { category
=> 'ANOTHER_4_TESTS', authorised_value
=> 'another_av' } )->store;
167 subtest
'search_by_marc_field' => sub {
170 $avs = Koha
::AuthorisedValues
->search_by_marc_field();
172 $avs = Koha
::AuthorisedValues
->search_by_marc_field({ frameworkcode
=> '' });
174 $avs = Koha
::AuthorisedValues
->search_by_marc_field({ tagfield
=> 952, tagsubfield
=> 'c'});
175 is
( $avs->count, 3, 'default fk');
176 is
( $avs->next->authorised_value, 'location_1', );
178 subtest
'search_by_koha_field' => sub {
181 $avs = Koha
::AuthorisedValues
->search_by_koha_field();
183 $avs = Koha
::AuthorisedValues
->search_by_koha_field( { kohafield
=> 'items.location', tagfield
=> 952, tagsubfield
=> 'c' } );
184 is
( $avs->count, 3, );
185 is
( $avs->next->authorised_value, 'location_1', );
188 subtest
'find_by_koha_field' => sub {
190 # Test authorised_value = 0
192 $av = Koha
::AuthorisedValues
->find_by_koha_field( { kohafield
=> 'items.restricted', authorised_value
=> 0 } );
193 is
( $av->lib, $av_0->lib, );
194 # Test authorised_value = ""
195 $av = Koha
::AuthorisedValues
->find_by_koha_field( { kohafield
=> 'items.restricted', authorised_value
=> '' } );
196 is
( $av->lib, $av_empty_string->lib, );
197 # Test authorised_value = undef => we do not want to retrieve anything
198 $av = Koha
::AuthorisedValues
->find_by_koha_field( { kohafield
=> 'items.restricted', authorised_value
=> undef } );
201 subtest
'get_description_by_koha_field' => sub {
205 # Test authorised_value = 0
206 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
207 { kohafield
=> 'items.restricted', authorised_value
=> 0 } );
208 is_deeply
( $descriptions,
209 { lib
=> $av_0->lib, opac_description
=> $av_0->lib_opac },
212 # Test authorised_value = ""
213 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
214 { kohafield
=> 'items.restricted', authorised_value
=> '' } );
218 lib
=> $av_empty_string->lib,
219 opac_description
=> $av_empty_string->lib_opac
223 # Test authorised_value = undef => we do not want to retrieve anything
224 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
225 { kohafield
=> 'items.restricted', authorised_value
=> undef } );
226 is_deeply
( $descriptions, {}, ) ; # This could be arguable, we could return undef instead
228 # No authorised_value
229 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
230 { kohafield
=> 'items.restricted', authorised_value
=> "does not exist" } );
231 is_deeply
( $descriptions, {}, ) ; # This could be arguable, we could return undef instead
233 subtest
'get_descriptions_by_koha_field' => sub {
235 my @descriptions = Koha
::AuthorisedValues
->get_descriptions_by_koha_field( { kohafield
=> 'items.restricted' } );
240 authorised_value
=> '',
241 lib
=> $av_empty_string->lib,
242 opac_description
=> $av_empty_string->lib_opac
245 authorised_value
=> $av_0->authorised_value,
247 opac_description
=> $av_0->lib_opac
254 $schema->storage->txn_rollback;