use strict; use warnings; use Test::More tests => 9; use DateTime; use Time::HiRes; use Time::Warp qw|to time|; # Redefine "now" so that we can warp it. no warnings 'redefine'; local *DateTime::now = sub { shift->from_epoch( epoch => (scalar time), @_ ) }; use warnings 'redefine'; use lib qw(t/lib); use DBIC::Test; my $schema = DBIC::Test->init_schema; my $row; my $last_week = DateTime->now() - DateTime::Duration->new( weeks => 1 ); my $t = time(); Time::HiRes::sleep (int ($t) + 1 - $t); $row = $schema->resultset('DBIC::Test::Schema::TestDatetime') ->create({ display_name => 'test record', t_created => $last_week }); my $time = $row->t_updated; ok $row->t_created, 'created timestamp'; ok $row->t_updated, 'updated timestamp'; is $row->t_created, $last_week, 'create timestamp'; isnt $row->t_updated, $row->t_created, 'update and create timestamp'; to(time + 60); $row->update({ display_name => 'updating test record' }); is $row->display_name, 'updating test record', 'update record'; isnt $row->t_updated, $time, 'timestamp update'; $time = $row->t_updated; to(time + 60); $row->update({ display_name => 'updating test record again', t_updated => $last_week }); is $row->display_name, 'updating test record again', 'update record'; isnt $row->t_updated, $time, 'timestamp update'; is $row->t_updated, $row->t_created, 'timestamp update is create now';