#!/usr/bin/perl
use Modern::Perl;
-use Test::More tests => 16;
+use Test::More tests => 17;
use MARC::Record;
use MARC::Field;
use DateTime;
use DateTime::Duration;
-use C4::Biblio;
+use C4::Items qw( GetMarcItem ToggleNewStatus );
+use C4::Biblio qw( AddBiblio GetMarcFromKohaField );
use C4::Context;
-use C4::Items;
use Koha::DateUtils;
+use Koha::Items;
+use t::lib::Mocks;
use t::lib::TestBuilder;
my $schema = Koha::Database->new->schema;
);
my ($biblionumber, undef) = C4::Biblio::AddBiblio($record, $frameworkcode);
-my ($item_bibnum, $item_bibitemnum, $itemnumber) = C4::Items::AddItem(
+my $item = $builder->build_sample_item(
{
- homebranch => $library,
- holdingbranch => $library,
- new_status => 'new_value',
- ccode => 'FIC',
- },
- $biblionumber
+ biblionumber => $biblionumber,
+ library => $library,
+ new_status => 'new_value',
+ ccode => 'FIC',
+ }
);
+my $itemnumber = $item->itemnumber;
+is ( $item->new_status, 'new_value', q|AddItem insert the 'new_status' field| );
-my $item = C4::Items::GetItem( $itemnumber );
-is ( $item->{new_status}, 'new_value', q|AddItem insert the 'new_status' field| );
-
-my ( $tagfield, undef ) = GetMarcFromKohaField('items.itemnumber', $frameworkcode);
+my ( $tagfield, undef ) = GetMarcFromKohaField( 'items.itemnumber' );
my $marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
is( $marc_item->subfield($tagfield, $new_tagfield), 'new_value', q|Koha mapping is correct|);
C4::Items::ToggleNewStatus( { rules => \@rules } );
-my $modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'updated_value', q|ToggleNewStatus: The new_status value is updated|);
+my $modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'updated_value', q|ToggleNewStatus: The new_status value is updated|);
$marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
is( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q|ToggleNewStatus: The new_status value is updated| );
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'updated_value', q|ToggleNewStatus: The new_status value is not updated|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'updated_value', q|ToggleNewStatus: The new_status value is not updated|);
$marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
is( $marc_item->subfield($tagfield, $new_tagfield), 'updated_value', q|ToggleNewStatus: The new_status value is not updated| );
# Play with age
-$item = C4::Items::GetItem( $itemnumber );
my $dt_today = dt_from_string;
my $days5ago = $dt_today->add_duration( DateTime::Duration->new( days => -5 ) );
-C4::Items::ModItem( { dateaccessioned => $days5ago }, $biblionumber, $itemnumber );
-$item = C4::Items::GetItem( $itemnumber );
+$modified_item->dateaccessioned($days5ago)->store;
@rules = (
{
},
);
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'updated_value', q|ToggleNewStatus: Age = 10 : The new_status value is not updated|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'updated_value', q|ToggleNewStatus: Age = 10 : The new_status value is not updated|);
$rules[0]->{age} = 5;
$rules[0]->{substitutions}[0]{value} = 'new_updated_value5';
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'new_updated_value5', q|ToggleNewStatus: Age = 5 : The new_status value is updated|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'new_updated_value5', q|ToggleNewStatus: Age = 5 : The new_status value is updated|);
$rules[0]->{age} = '';
$rules[0]->{substitutions}[0]{value} = 'new_updated_value_empty_string';
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'new_updated_value_empty_string', q|ToggleNewStatus: Age = '' : The new_status value is updated|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'new_updated_value_empty_string', q|ToggleNewStatus: Age = '' : The new_status value is updated|);
$rules[0]->{age} = undef;
$rules[0]->{substitutions}[0]{value} = 'new_updated_value_undef';
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'new_updated_value_undef', q|ToggleNewStatus: Age = undef : The new_status value is updated|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'new_updated_value_undef', q|ToggleNewStatus: Age = undef : The new_status value is updated|);
# Field deletion
@rules = (
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, '', q|ToggleNewStatus: The new_status value is empty|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, '', q|ToggleNewStatus: The new_status value is empty|);
$marc_item = C4::Items::GetMarcItem( $biblionumber, $itemnumber );
is( $marc_item->subfield($tagfield, $new_tagfield), undef, q|ToggleNewStatus: The new_status field is removed from the item marc| );
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'new_value', q|ToggleNewStatus: conditions multiple: all match, the new_status value is updated|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'new_value', q|ToggleNewStatus: conditions multiple: all match, the new_status value is updated|);
@rules = (
{
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-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|);
+$modified_item = Koha::Items->find( $itemnumber );
+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|);
@rules = (
{
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'new_updated_value', q|ToggleNewStatus: conditions multiple: the 2 conditions match, the new_status value is updated|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'new_updated_value', q|ToggleNewStatus: conditions multiple: the 2 conditions match, the new_status value is updated|);
@rules = (
{
C4::Items::ToggleNewStatus( { rules => \@rules } );
-$modified_item = C4::Items::GetItem( $itemnumber );
-is( $modified_item->{new_status}, 'another_new_updated_value', q|ToggleNewStatus: conditions on biblioitems|);
+$modified_item = Koha::Items->find( $itemnumber );
+is( $modified_item->new_status, 'another_new_updated_value', q|ToggleNewStatus: conditions on biblioitems|);
-# Clear cache
+# Run twice
+t::lib::Mocks::mock_preference('CataloguingLog', 1);
+my $actions_nb = $schema->resultset('ActionLog')->count();
+C4::Items::ToggleNewStatus( { rules => \@rules } );
+is( $schema->resultset('ActionLog')->count(), $actions_nb, q|ToggleNewStatus: no substitution does not generate action logs|);
+
+# Cleanup
$cache = Koha::Caches->get_instance();
$cache->clear_from_cache("MarcStructure-0-$frameworkcode");
$cache->clear_from_cache("MarcStructure-1-$frameworkcode");
$cache->clear_from_cache("default_value_for_mod_marc-");
$cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode");
+$schema->storage->txn_rollback;