--- /dev/null
+#!/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';
+}