diff options
Diffstat (limited to 'rt/t/lifecycles/dates.t')
-rw-r--r-- | rt/t/lifecycles/dates.t | 317 |
1 files changed, 317 insertions, 0 deletions
diff --git a/rt/t/lifecycles/dates.t b/rt/t/lifecycles/dates.t new file mode 100644 index 000000000..d8a27f613 --- /dev/null +++ b/rt/t/lifecycles/dates.t @@ -0,0 +1,317 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use Data::Dumper; + +BEGIN {require 't/lifecycles/utils.pl'}; + +my $general = RT::Test->load_or_create_queue( + Name => 'General', +); +ok $general && $general->id, 'loaded or created a queue'; + +my $delivery = RT::Test->load_or_create_queue( + Name => 'delivery', + Lifecycle => 'delivery', +); +ok $delivery && $delivery->id, 'loaded or created a queue'; + +my $tstatus = sub { + DBIx::SearchBuilder::Record::Cachable->FlushCache; + my $ticket = RT::Ticket->new( RT->SystemUser ); + $ticket->Load( $_[0] ); + return $ticket->Status; +}; + +my ($baseurl, $m) = RT::Test->started_ok; +ok $m->login, 'logged in'; + +diag "check basic API"; +{ + my $schema = $general->Lifecycle; + isa_ok($schema, 'RT::Lifecycle'); + is $schema->Name, 'default', "it's a default schema"; + + $schema = $delivery->Lifecycle; + isa_ok($schema, 'RT::Lifecycle'); + is $schema->Name, 'delivery', "it's a delivery schema"; +} + +diag "dates on create for default schema"; +{ + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'open', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'resolved', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; + } + + my $test_date = '2008-11-28 12:00:00'; + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'open', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'resolved', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } +} + +diag "dates on create for delivery schema"; +{ + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->Unix , 0, 'started is not set'; + is $ticket->ResolvedObj->Unix, 0, 'resolved is not set'; + + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $txn, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + ); + ok $id, 'created a ticket'; + diag($msg); + is $ticket->Status, 'ordered', "Status is ordered"; + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + ok $ticket->StartedObj->Unix > 0, 'started is set to ' .$ticket->StartedObj->AsString ; + is $ticket->ResolvedObj->Unix, 0, 'resolved is not set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + ); + ok $id, 'created a ticket'; + + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + + ($statusval,$statusmsg) = $ticket->SetStatus('delivered'); + ok($statusval,$statusmsg); + + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; + } + + my $test_date = '2008-11-28 12:00:00'; + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $statusmsg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + } + { + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Started => $test_date, + Resolved => $test_date, + ); + ok $id, 'created a ticket'; + my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); + ok($statusval,$statusmsg); + ($statusval,$statusmsg) = $ticket->SetStatus('delivered'); + ok($statusval,$statusmsg); + is $ticket->StartedObj->ISO, $test_date, 'started is set'; + TODO: { + local $TODO = "we should decide if we set resolved repeatedly"; + is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; + }; + } +} + +diag "dates on status change for default schema"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + (my $status, $msg) = $ticket->SetStatus('open'); + ok $status, 'changed status' or diag "error: $msg"; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + my $started = $ticket->StartedObj->Unix; + + ($status, $msg) = $ticket->SetStatus('stalled'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetStatus('open'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetStatus('resolved'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; +} + +diag "dates on status change for delivery schema"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $delivery->id, + Subject => 'test', + Status => 'ordered', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + (my $status, $msg) = $ticket->SetStatus('delayed'); + ok $status, 'changed status' or diag "error: $msg"; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + my $started = $ticket->StartedObj->Unix; + + ($status, $msg) = $ticket->SetStatus('on way'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetStatus('delivered'); + ok $status, 'changed status' or diag "error: $msg"; + is $ticket->StartedObj->Unix, $started, 'started is set and the same'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; +} + +diag "add partial map between general->delivery"; +{ + my $schemas = RT->Config->Get('Lifecycles'); + $schemas->{'__maps__'} = { + 'default -> delivery' => { + new => 'on way', + }, + 'delivery -> default' => { + 'on way' => 'resolved', + }, + }; + RT::Lifecycle->FillCache; +} + +diag "check date changes on moving a ticket"; +{ + my $ticket = RT::Ticket->new( RT->SystemUser ); + my ($id, $msg) = $ticket->Create( + Queue => $general->id, + Subject => 'test', + Status => 'new', + ); + ok $id, 'created a ticket'; + ok $ticket->StartedObj->Unix <= 0, 'started is not set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + (my $status, $msg) = $ticket->SetQueue( $delivery->id ); + ok $status, "moved ticket between queues with different schemas"; + is $ticket->Status, 'on way', 'status has been changed'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix <= 0, 'resolved is not set'; + + ($status, $msg) = $ticket->SetQueue( $general->id ); + ok $status, "moved ticket between queues with different schemas"; + is $ticket->Status, 'resolved', 'status has been changed'; + ok $ticket->StartedObj->Unix > 0, 'started is set'; + ok $ticket->ResolvedObj->Unix > 0, 'resolved is set'; +} |