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_bibnum, $item_bibitemnum, $itemnumber) = C4
::Items
::AddItem
(
58 homebranch
=> $library,
59 holdingbranch
=> $library,
60 new_status
=> 'new_value',
66 my $item = Koha
::Items
->find( $itemnumber );
67 is
( $item->new_status, 'new_value', q
|AddItem insert the
'new_status' field
| );
69 my ( $tagfield, undef ) = GetMarcFromKohaField
( 'items.itemnumber' );
70 my $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
71 is
( $marc_item->subfield($tagfield, $new_tagfield), 'new_value', q
|Koha mapping is correct
|);
73 # Update the items.new_status field if items.ccode eq 'FIC' => should be updated
78 field
=> 'items.ccode',
84 field
=> 'items.new_status',
85 value
=> 'updated_value',
92 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
94 my $modified_item = Koha
::Items
->find( $itemnumber );
95 is
( $modified_item->new_status, 'updated_value', q
|ToggleNewStatus
: The new_status value is updated
|);
96 $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
97 is
( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q
|ToggleNewStatus
: The new_status value is updated
| );
99 # Update the items.new_status field if items.ccode eq 'DONT_EXIST' => should not be updated
104 field
=> 'items.ccode',
105 value
=> 'DONT_EXIST',
110 field
=> 'items.new_status',
111 value
=> 'new_updated_value',
118 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
120 $modified_item = Koha
::Items
->find( $itemnumber );
121 is
( $modified_item->new_status, 'updated_value', q
|ToggleNewStatus
: The new_status value is
not updated
|);
122 $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
123 is
( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q
|ToggleNewStatus
: The new_status value is
not updated
| );
126 my $dt_today = dt_from_string
;
127 my $days5ago = $dt_today->add_duration( DateTime
::Duration
->new( days
=> -5 ) );
129 C4
::Items
::ModItem
( { dateaccessioned
=> $days5ago }, $biblionumber, $itemnumber );
135 field
=> 'items.ccode',
141 field
=> 'items.new_status',
142 value
=> 'new_updated_value',
148 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
149 $modified_item = Koha
::Items
->find( $itemnumber );
150 is
( $modified_item->new_status, 'updated_value', q
|ToggleNewStatus
: Age
= 10 : The new_status value is
not updated
|);
152 $rules[0]->{age
} = 5;
153 $rules[0]->{substitutions
}[0]{value
} = 'new_updated_value5';
154 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
155 $modified_item = Koha
::Items
->find( $itemnumber );
156 is
( $modified_item->new_status, 'new_updated_value5', q
|ToggleNewStatus
: Age
= 5 : The new_status value is updated
|);
158 $rules[0]->{age
} = '';
159 $rules[0]->{substitutions
}[0]{value
} = 'new_updated_value_empty_string';
160 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
161 $modified_item = Koha
::Items
->find( $itemnumber );
162 is
( $modified_item->new_status, 'new_updated_value_empty_string', q
|ToggleNewStatus
: Age
= '' : The new_status value is updated
|);
164 $rules[0]->{age
} = undef;
165 $rules[0]->{substitutions
}[0]{value
} = 'new_updated_value_undef';
166 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
167 $modified_item = Koha
::Items
->find( $itemnumber );
168 is
( $modified_item->new_status, 'new_updated_value_undef', q
|ToggleNewStatus
: Age
= undef : The new_status value is updated
|);
175 field
=> 'items.ccode',
181 field
=> 'items.new_status',
189 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
191 $modified_item = Koha
::Items
->find( $itemnumber );
192 is
( $modified_item->new_status, '', q
|ToggleNewStatus
: The new_status value is empty
|);
193 $marc_item = C4
::Items
::GetMarcItem
( $biblionumber, $itemnumber );
194 is
( $marc_item->subfield($tagfield, $new_tagfield), undef, q
|ToggleNewStatus
: The new_status field is removed from the item marc
| );
196 # conditions multiple
201 field
=> 'items.ccode',
205 field
=> 'items.homebranch',
211 field
=> 'items.new_status',
212 value
=> 'new_value',
219 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
221 $modified_item = Koha
::Items
->find( $itemnumber );
222 is
( $modified_item->new_status, 'new_value', q
|ToggleNewStatus
: conditions multiple
: all match
, the new_status value is updated
|);
228 field
=> 'items.ccode',
232 field
=> 'items.homebranch',
233 value
=> 'DONT_EXIST',
238 field
=> 'items.new_status',
239 value
=> 'new_updated_value',
246 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
248 $modified_item = Koha
::Items
->find( $itemnumber );
249 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
|);
255 field
=> 'items.ccode',
259 field
=> 'items.homebranch',
260 value
=> "$library|$library2",
265 field
=> 'items.new_status',
266 value
=> 'new_updated_value',
273 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
275 $modified_item = Koha
::Items
->find( $itemnumber );
276 is
( $modified_item->new_status, 'new_updated_value', q
|ToggleNewStatus
: conditions multiple
: the
2 conditions match
, the new_status value is updated
|);
282 field
=> 'biblioitems.itemtype',
283 value
=> 'ITEMTYPE_T',
288 field
=> 'items.new_status',
289 value
=> 'another_new_updated_value',
296 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
298 $modified_item = Koha
::Items
->find( $itemnumber );
299 is
( $modified_item->new_status, 'another_new_updated_value', q
|ToggleNewStatus
: conditions on biblioitems
|);
302 t
::lib
::Mocks
::mock_preference
('CataloguingLog', 1);
303 my $actions_nb = $schema->resultset('ActionLog')->count();
304 C4
::Items
::ToggleNewStatus
( { rules
=> \
@rules } );
305 is
( $schema->resultset('ActionLog')->count(), $actions_nb, q
|ToggleNewStatus
: no substitution does
not generate action logs
|);
308 $cache = Koha
::Caches
->get_instance();
309 $cache->clear_from_cache("MarcStructure-0-$frameworkcode");
310 $cache->clear_from_cache("MarcStructure-1-$frameworkcode");
311 $cache->clear_from_cache("default_value_for_mod_marc-");
312 $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
313 $schema->storage->txn_rollback;