4 use Test
::More tests
=> 17;
8 use DateTime
::Duration
;
16 use t
::lib
::TestBuilder
;
18 my $schema = Koha
::Database
->new->schema;
19 $schema->storage->txn_begin;
20 my $dbh = C4
::Context
->dbh;
22 my $builder = t
::lib
::TestBuilder
->new;
25 my $library = $builder->build( { source
=> 'Branch' })->{branchcode
};
26 my $library2 = $builder->build( { source
=> 'Branch' })->{branchcode
};
28 my $frameworkcode = ''; # Use Default for Koha to MARC mappings
30 DELETE FROM marc_subfield_structure
31 WHERE
( kohafield
= 'items.new_status' OR kohafield
= 'items.stocknumber' )
33 |, undef, $frameworkcode);
35 my $new_tagfield = 'i';
37 INSERT INTO marc_subfield_structure
(tagfield
, tagsubfield
, kohafield
, frameworkcode
)
38 VALUES
( 952, ?
, 'items.new_status', ?
)
39 |, undef, $new_tagfield, $frameworkcode);
42 my $cache = Koha
::Caches
->get_instance();
43 $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
44 $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
45 $cache->clear_from_cache("default_value_for_mod_marc-");
46 $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
48 my $record = MARC
::Record
->new();
49 $record->append_fields(
50 MARC
::Field
->new('100', ' ', ' ', a
=> 'Moffat, Steven'),
51 MARC
::Field
->new('245', ' ', ' ', a
=> 'Silence in the library'),
52 MARC
::Field
->new('942', ' ', ' ', c
=> 'ITEMTYPE_T'),
54 my ($biblionumber, undef) = C4
::Biblio
::AddBiblio
($record, $frameworkcode);
56 my $item = $builder->build_sample_item(
58 biblionumber
=> $biblionumber,
60 new_status
=> 'new_value',
64 my $itemnumber = $item->itemnumber;
65 is
( $item->new_status, 'new_value', q
|AddItem insert the
'new_status' field
| );
67 my ( $tagfield, undef ) = GetMarcFromKohaField
( 'items.itemnumber' );
68 my $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
69 is
( $marc_item->subfield($tagfield, $new_tagfield), 'new_value', q
|Koha mapping is correct
|);
71 # Update the items.new_status field if items.ccode eq 'FIC' => should be updated
76 field
=> 'items.ccode',
82 field
=> 'items.new_status',
83 value
=> 'updated_value',
90 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
92 my $modified_item = Koha
::Items
->find( $itemnumber );
93 is
( $modified_item->new_status, 'updated_value', q
|ToggleNewStatus
: The new_status value is updated
|);
94 $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
95 is
( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q
|ToggleNewStatus
: The new_status value is updated
| );
97 # Update the items.new_status field if items.ccode eq 'DONT_EXIST' => should not be updated
102 field
=> 'items.ccode',
103 value
=> 'DONT_EXIST',
108 field
=> 'items.new_status',
109 value
=> 'new_updated_value',
116 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
118 $modified_item = Koha
::Items
->find( $itemnumber );
119 is
( $modified_item->new_status, 'updated_value', q
|ToggleNewStatus
: The new_status value is
not updated
|);
120 $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
121 is
( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q
|ToggleNewStatus
: The new_status value is
not updated
| );
124 my $dt_today = dt_from_string
;
125 my $days5ago = $dt_today->add_duration( DateTime
::Duration
->new( days
=> -5 ) );
127 $modified_item->dateaccessioned($days5ago)->store;
133 field
=> 'items.ccode',
139 field
=> 'items.new_status',
140 value
=> 'new_updated_value',
146 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
147 $modified_item = Koha
::Items
->find( $itemnumber );
148 is
( $modified_item->new_status, 'updated_value', q
|ToggleNewStatus
: Age
= 10 : The new_status value is
not updated
|);
150 $rules[0]->{age
} = 5;
151 $rules[0]->{substitutions
}[0]{value
} = 'new_updated_value5';
152 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
153 $modified_item = Koha
::Items
->find( $itemnumber );
154 is
( $modified_item->new_status, 'new_updated_value5', q
|ToggleNewStatus
: Age
= 5 : The new_status value is updated
|);
156 $rules[0]->{age
} = '';
157 $rules[0]->{substitutions
}[0]{value
} = 'new_updated_value_empty_string';
158 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
159 $modified_item = Koha
::Items
->find( $itemnumber );
160 is
( $modified_item->new_status, 'new_updated_value_empty_string', q
|ToggleNewStatus
: Age
= '' : The new_status value is updated
|);
162 $rules[0]->{age
} = undef;
163 $rules[0]->{substitutions
}[0]{value
} = 'new_updated_value_undef';
164 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
165 $modified_item = Koha
::Items
->find( $itemnumber );
166 is
( $modified_item->new_status, 'new_updated_value_undef', q
|ToggleNewStatus
: Age
= undef : The new_status value is updated
|);
173 field
=> 'items.ccode',
179 field
=> 'items.new_status',
187 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
189 $modified_item = Koha
::Items
->find( $itemnumber );
190 is
( $modified_item->new_status, '', q
|ToggleNewStatus
: The new_status value is empty
|);
191 $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
192 is
( $marc_item->subfield($tagfield, $new_tagfield), undef, q
|ToggleNewStatus
: The new_status field is removed from the item marc
| );
194 # conditions multiple
199 field
=> 'items.ccode',
203 field
=> 'items.homebranch',
209 field
=> 'items.new_status',
210 value
=> 'new_value',
217 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
219 $modified_item = Koha
::Items
->find( $itemnumber );
220 is
( $modified_item->new_status, 'new_value', q
|ToggleNewStatus
: conditions multiple
: all match
, the new_status value is updated
|);
226 field
=> 'items.ccode',
230 field
=> 'items.homebranch',
231 value
=> 'DONT_EXIST',
236 field
=> 'items.new_status',
237 value
=> 'new_updated_value',
244 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
246 $modified_item = Koha
::Items
->find( $itemnumber );
247 is
( $modified_item->new_status, 'new_value', q
|ToggleNewStatus
: conditions multiple
: at least
1 condition does
not match
, the new_status value is
not updated
|);
253 field
=> 'items.ccode',
257 field
=> 'items.homebranch',
258 value
=> "$library|$library2",
263 field
=> 'items.new_status',
264 value
=> 'new_updated_value',
271 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
273 $modified_item = Koha
::Items
->find( $itemnumber );
274 is
( $modified_item->new_status, 'new_updated_value', q
|ToggleNewStatus
: conditions multiple
: the
2 conditions match
, the new_status value is updated
|);
280 field
=> 'biblioitems.itemtype',
281 value
=> 'ITEMTYPE_T',
286 field
=> 'items.new_status',
287 value
=> 'another_new_updated_value',
294 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
296 $modified_item = Koha
::Items
->find( $itemnumber );
297 is
( $modified_item->new_status, 'another_new_updated_value', q
|ToggleNewStatus
: conditions on biblioitems
|);
300 t
::lib
::Mocks
::mock_preference
('CataloguingLog', 1);
301 my $actions_nb = $schema->resultset('ActionLog')->count();
302 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
303 is
( $schema->resultset('ActionLog')->count(), $actions_nb, q
|ToggleNewStatus
: no substitution does
not generate action logs
|);
306 $cache = Koha
::Caches
->get_instance();
307 $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
308 $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
309 $cache->clear_from_cache("default_value_for_mod_marc-");
310 $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
311 $schema->storage->txn_rollback;