use strict; use warnings; use Test::More tests => 26; use Jifty::Test::Dist; my ( $user_foo, $user_bar ); my $has_mock_time; eval "use Test::MockTime qw/set_relative_time/"; $has_mock_time = 1 unless $@; $user_foo = TestApp::Plugin::ActorMetadata::Model::User->new; $user_foo->create( name => 'foo', email => 'foo@example.com' ); ok( $user_foo->id, 'created user foo' ); $user_bar = TestApp::Plugin::ActorMetadata::Model::User->new; $user_bar->create( name => 'bar', email => 'bar@example.com' ); ok( $user_bar->id, 'created user bar' ); # create a post with current user foo my $post = TestApp::Plugin::ActorMetadata::Model::Post->new( current_user => $user_foo ); $post->create( title => 'foo' ); ok( $post->id, 'created a post' ); is( $post->created_by->id, $user_foo->id, 'created_by is set' ); # see Jifty::Plugin::ActorMetadata::Mixin::Model::ActorMetadata is( $post->updated_by->id, $user_foo->id, 'updated_by is set' ); my $now = Jifty::DateTime->now; my $created_on = $post->created_on; ok( abs( $created_on->epoch - $now->epoch < 2 ), 'created_on is set' ); ok( abs( $post->updated_on->epoch - $now->epoch < 2 ), 'created_on is set' ); mysleep( 3 ); # just let time pass # update by foo $post->set_title( 'foo 2' ); is( $post->title, 'foo 2', 'updated title' ); is( $post->created_by->id, $user_foo->id, 'created_by is not updated' ); is( $post->created_on->epoch, $created_on->epoch, 'created_on is not updated' ); is( $post->updated_by->id, $user_foo->id, 'updated_by is not updated' ); ok( abs( $post->updated_on->epoch - Jifty::DateTime->now->epoch ) < 1 , 'update_on is updated correctly' ); mysleep( 3 ); # update by bar $now = Jifty::DateTime->now; $post->current_user($user_bar); $post->set_title( 'bar' ); is( $post->title, 'bar', 'updated title' ); is( $post->created_by->id, $user_foo->id, 'created_by is not updated' ); is( $post->created_on->epoch, $created_on->epoch, 'created_on is not updated' ); is( $post->updated_by->id, $user_bar->id, 'updated_by is not updated' ); ok( $post->updated_on->epoch >= $now->epoch, 'update_on is updated' ); # creator and created are columns of comment, post doesn't have those for my $method (qw/creator created/) { ok( !$post->can($method), "no method $method" ); } my $comment = TestApp::Plugin::ActorMetadata::Model::Comment->new( current_user => $user_foo ); $now = Jifty::DateTime->now; $comment->create(); ok( $comment->id, 'created a comment' ); is( $comment->creator->id, $user_foo->id, 'creator is set' ); ok( abs( $comment->created->epoch - $now->epoch < 2 ), 'created is set' ); for my $method (qw/created_by created_on updated_by updated_on/) { ok( !$comment->can($method), "no method $method" ); } sub mysleep { my $second = shift; if ( $has_mock_time ) { set_relative_time( $second ); } else { sleep $second; } }