4 use Test
::More tests
=> 15;
6 use t
::lib
::TestBuilder
;
10 use Koha
::AuthorisedValue
;
11 use Koha
::AuthorisedValues
;
12 use Koha
::AuthorisedValueCategories
;
13 use Koha
::MarcSubfieldStructures
;
15 my $schema = Koha
::Database
->new->schema;
16 $schema->storage->txn_begin;
17 my $builder = t
::lib
::TestBuilder
->new;
19 Koha
::AuthorisedValues
->delete;
20 Koha
::AuthorisedValueCategories
->delete;
23 Koha
::AuthorisedValueCategory
->new({ category_name
=> 'av_for_testing' })->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 is
( $av3->opac_description, 'opac display value 3', 'Got correction opac description if lib_opac is set' );
89 is
( $av3->opac_description, 'display value 3', 'Got correction opac description if lib_opac is *not* set' );
91 my @authorised_values =
92 Koha
::AuthorisedValues
->new()->search( { category
=> 'av_for_testing' } );
93 is
( @authorised_values, 3, "Get correct number of values" );
95 my $branchcode1 = $builder->build({ source
=> 'Branch' })->{branchcode
};
96 my $branchcode2 = $builder->build({ source
=> 'Branch' })->{branchcode
};
98 $av1->add_library_limit( $branchcode1 );
100 @authorised_values = Koha
::AuthorisedValues
->new()->search( { category
=> 'av_for_testing', branchcode
=> $branchcode1 } );
101 is
( @authorised_values, 3, "Search including value with a branch limit ( branch can use the limited value ) gives correct number of results" );
103 @authorised_values = Koha
::AuthorisedValues
->new()->search( { category
=> 'av_for_testing', branchcode
=> $branchcode2 } );
104 is
( @authorised_values, 2, "Search including value with a branch limit ( branch *cannot* use the limited value ) gives correct number of results" );
106 $av1->del_library_limit( $branchcode1 );
107 @authorised_values = Koha
::AuthorisedValues
->new()->search( { category
=> 'av_for_testing', branchcode
=> $branchcode2 } );
108 is
( @authorised_values, 3, "Branch limitation deleted successfully" );
110 $av1->add_library_limit( $branchcode1 );
111 $av1->library_limits( [ $branchcode1, $branchcode2 ] );
113 my $limits = $av1->library_limits->as_list;
114 is
( @
$limits, 2, 'library_limits functions correctly both as setter and getter' );
116 my @categories = Koha
::AuthorisedValues
->new->categories;
117 is
( @categories, 3, 'There should have 2 categories inserted' );
118 is
( $categories[0], $av4->category, 'The first category should be correct (ordered by category name)' );
119 is
( $categories[1], $av1->category, 'The second category should be correct (ordered by category name)' );
121 subtest
'search_by_*_field + find_by_koha_field + get_description' => sub {
123 my $loc_cat = Koha
::AuthorisedValueCategories
->find('LOC');
124 $loc_cat->delete if $loc_cat;
125 my $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> '' } );
126 $mss->delete if $mss;
127 $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> 'ACQ' } );
128 $mss->delete if $mss;
129 $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> 'd', frameworkcode
=> '' } );
130 $mss->delete if $mss;
131 $mss = Koha
::MarcSubfieldStructures
->search( { tagfield
=> 952, tagsubfield
=> '5', frameworkcode
=> '' } );
132 $mss->delete if $mss;
133 Koha
::AuthorisedValueCategory
->new( { category_name
=> 'LOC' } )->store;
134 Koha
::AuthorisedValueCategory
->new( { category_name
=> 'ANOTHER_4_TESTS' } )->store;
135 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> '', authorised_value
=> 'LOC', kohafield
=> 'items.location' } )->store;
136 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> 'c', frameworkcode
=> 'ACQ', authorised_value
=> 'LOC', kohafield
=> 'items.location' } )->store;
137 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> 'd', frameworkcode
=> '', authorised_value
=> 'ANOTHER_4_TESTS', kohafield
=> 'items.another_field' } )->store;
138 Koha
::MarcSubfieldStructure
->new( { tagfield
=> 952, tagsubfield
=> '5', frameworkcode
=> '', authorised_value
=> 'restricted_for_testing', kohafield
=> 'items.restricted' } )->store;
139 Koha
::AuthorisedValue
->new( { category
=> 'LOC', authorised_value
=> 'location_1' } )->store;
140 Koha
::AuthorisedValue
->new( { category
=> 'LOC', authorised_value
=> 'location_2' } )->store;
141 Koha
::AuthorisedValue
->new( { category
=> 'LOC', authorised_value
=> 'location_3' } )->store;
142 Koha
::AuthorisedValue
->new( { category
=> 'ANOTHER_4_TESTS', authorised_value
=> 'an_av' } )->store;
143 Koha
::AuthorisedValue
->new( { category
=> 'ANOTHER_4_TESTS', authorised_value
=> 'another_av' } )->store;
144 subtest
'search_by_marc_field' => sub {
147 $avs = Koha
::AuthorisedValues
->search_by_marc_field();
149 $avs = Koha
::AuthorisedValues
->search_by_marc_field({ frameworkcode
=> '' });
151 $avs = Koha
::AuthorisedValues
->search_by_marc_field({ tagfield
=> 952, tagsubfield
=> 'c'});
152 is
( $avs->count, 3, 'default fk');
153 is
( $avs->next->authorised_value, 'location_1', );
155 subtest
'search_by_koha_field' => sub {
158 $avs = Koha
::AuthorisedValues
->search_by_koha_field();
160 $avs = Koha
::AuthorisedValues
->search_by_koha_field( { kohafield
=> 'items.location', tagfield
=> 952, tagsubfield
=> 'c' } );
161 is
( $avs->count, 3, );
162 is
( $avs->next->authorised_value, 'location_1', );
165 subtest
'find_by_koha_field' => sub {
167 # Test authorised_value = 0
169 $av = Koha
::AuthorisedValues
->find_by_koha_field( { kohafield
=> 'items.restricted', authorised_value
=> 0 } );
170 is
( $av->lib, $av_0->lib, );
171 # Test authorised_value = ""
172 $av = Koha
::AuthorisedValues
->find_by_koha_field( { kohafield
=> 'items.restricted', authorised_value
=> '' } );
173 is
( $av->lib, $av_empty_string->lib, );
174 # Test authorised_value = undef => we do not want to retrieve anything
175 $av = Koha
::AuthorisedValues
->find_by_koha_field( { kohafield
=> 'items.restricted', authorised_value
=> undef } );
178 subtest
'get_description_by_koha_field' => sub {
182 # Test authorised_value = 0
183 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
184 { kohafield
=> 'items.restricted', authorised_value
=> 0 } );
185 is_deeply
( $descriptions,
186 { lib
=> $av_0->lib, opac_description
=> $av_0->lib_opac },
189 # Test authorised_value = ""
190 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
191 { kohafield
=> 'items.restricted', authorised_value
=> '' } );
195 lib
=> $av_empty_string->lib,
196 opac_description
=> $av_empty_string->lib_opac
200 # Test authorised_value = undef => we do not want to retrieve anything
201 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
202 { kohafield
=> 'items.restricted', authorised_value
=> undef } );
203 is_deeply
( $descriptions, {}, ) ; # This could be arguable, we could return undef instead
205 # No authorised_value
206 $descriptions = Koha
::AuthorisedValues
->get_description_by_koha_field(
207 { kohafield
=> 'items.restricted', authorised_value
=> "does not exist" } );
208 is_deeply
( $descriptions, {}, ) ; # This could be arguable, we could return undef instead
210 subtest
'get_descriptions_by_koha_field' => sub {
212 my @descriptions = Koha
::AuthorisedValues
->get_descriptions_by_koha_field( { kohafield
=> 'items.restricted' } );
217 authorised_value
=> '',
218 lib
=> $av_empty_string->lib,
219 opac_description
=> $av_empty_string->lib_opac
222 authorised_value
=> $av_0->authorised_value,
224 opac_description
=> $av_0->lib_opac
231 $schema->storage->txn_rollback;