From add792e92d5cdfa260e0f7d9d582d074168bc246 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Tue, 18 Aug 2020 13:26:29 +0100 Subject: [PATCH] Bug 18501: (QA follow-up) Add test of *_on functionality This patch adds a test for the *_on trigger functionality to ensure matching behaviour before and after the triggers change. --- t/db_dependent/Koha/Items.t | 49 ++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/t/db_dependent/Koha/Items.t b/t/db_dependent/Koha/Items.t index d04559a16d..7517932e89 100644 --- a/t/db_dependent/Koha/Items.t +++ b/t/db_dependent/Koha/Items.t @@ -21,6 +21,7 @@ use Modern::Perl; use Test::More tests => 11; use Test::Exception; +use Time::Fake; use C4::Circulation; use C4::Context; @@ -64,7 +65,8 @@ my $retrieved_item_1 = Koha::Items->find( $new_item_1->itemnumber ); is( $retrieved_item_1->barcode, $new_item_1->barcode, 'Find a item by id should return the correct item' ); subtest 'store' => sub { - plan tests => 4; + plan tests => 5; + my $biblio = $builder->build_sample_biblio; my $today = dt_from_string->set( hour => 0, minute => 0, second => 0 ); my $item = Koha::Item->new( @@ -82,6 +84,51 @@ subtest 'store' => sub { is( $item->itype, $biblio->biblioitem->itemtype, 'items.itype must have been set to biblioitem.itemtype is not given'); is( $item->permanent_location, $item->location, 'permanent_location must have been set to location if not given' ); $item->delete; + + subtest '*_on updates' => sub { + plan tests => 9; + + # Once the '_on' value is set (triggered by the related field turning from false to true) + # it should not be re-set for any changes outside of the related field being 'unset'. + + my @fields = qw( itemlost withdrawn damaged ); + my $today = dt_from_string(); + my $yesterday = $today->clone()->subtract( days => 1 ); + + for my $field ( @fields ) { + my $item = $builder->build_sample_item( + { + itemlost => 0, + itemlost_on => undef, + withdrawn => 0, + withdrawn_on => undef, + damaged => 0, + damaged_on => undef + } + ); + my $field_on = $field . '_on'; + + # Set field for the first time + Time::Fake->offset( $yesterday->epoch ); + $item->$field(1)->store; + $item->get_from_storage; + is($item->$field_on, DateTime::Format::MySQL->format_datetime($yesterday), $field_on . " was set upon first truthy setting"); + + # Update the field to a new 'true' value + Time::Fake->offset( $today->epoch ); + $item->$field(2)->store; + $item->get_from_storage; + is($item->$field_on, DateTime::Format::MySQL->format_datetime($yesterday), $field_on . " was not updated upon second truthy setting"); + + # Update the field to a new 'false' value + $item->$field(0)->store; + $item->get_from_storage; + is($item->$field_on, undef, $field_on . " was unset upon untruthy setting"); + + Time::Fake->reset; + } + }; + }; subtest 'get_transfer' => sub { -- 2.20.1