1use strict; 2use warnings; 3 4BEGIN {require './t/lifecycles/utils.pl'}; 5 6my $general = RT::Test->load_or_create_queue( 7 Name => 'General', 8); 9ok $general && $general->id, 'loaded or created a queue'; 10 11my $delivery = RT::Test->load_or_create_queue( 12 Name => 'delivery', 13 Lifecycle => 'delivery', 14); 15ok $delivery && $delivery->id, 'loaded or created a queue'; 16 17my $tstatus = sub { 18 DBIx::SearchBuilder::Record::Cachable->FlushCache; 19 my $ticket = RT::Ticket->new( RT->SystemUser ); 20 $ticket->Load( $_[0] ); 21 return $ticket->Status; 22}; 23 24diag "check basic API"; 25{ 26 my $schema = $general->LifecycleObj; 27 isa_ok($schema, 'RT::Lifecycle'); 28 is $schema->Name, 'default', "it's a default schema"; 29 30 $schema = $delivery->LifecycleObj; 31 isa_ok($schema, 'RT::Lifecycle'); 32 is $schema->Name, 'delivery', "it's a delivery schema"; 33} 34 35diag "dates on create for default schema"; 36{ 37 { 38 my $ticket = RT::Ticket->new( RT->SystemUser ); 39 my ($id, $msg) = $ticket->Create( 40 Queue => $general->id, 41 Subject => 'test', 42 Status => 'new', 43 ); 44 ok $id, 'created a ticket'; 45 ok !$ticket->StartedObj->IsSet, 'started is not set'; 46 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 47 } 48 { 49 my $ticket = RT::Ticket->new( RT->SystemUser ); 50 my ($id, $msg) = $ticket->Create( 51 Queue => $general->id, 52 Subject => 'test', 53 Status => 'open', 54 ); 55 ok $id, 'created a ticket'; 56 ok $ticket->StartedObj->IsSet, 'started is set'; 57 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 58 } 59 { 60 my $ticket = RT::Ticket->new( RT->SystemUser ); 61 my ($id, $msg) = $ticket->Create( 62 Queue => $general->id, 63 Subject => 'test', 64 Status => 'resolved', 65 ); 66 ok $id, 'created a ticket'; 67 ok $ticket->StartedObj->IsSet, 'started is set'; 68 ok $ticket->ResolvedObj->IsSet, 'resolved is set'; 69 } 70 71 my $test_date = '2008-11-28 12:00:00'; 72 { 73 my $ticket = RT::Ticket->new( RT->SystemUser ); 74 my ($id, $msg) = $ticket->Create( 75 Queue => $general->id, 76 Subject => 'test', 77 Status => 'new', 78 Started => $test_date, 79 Resolved => $test_date, 80 ); 81 ok $id, 'created a ticket'; 82 is $ticket->StartedObj->ISO, $test_date, 'started is set'; 83 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; 84 } 85 { 86 my $ticket = RT::Ticket->new( RT->SystemUser ); 87 my ($id, $msg) = $ticket->Create( 88 Queue => $general->id, 89 Subject => 'test', 90 Status => 'open', 91 Started => $test_date, 92 Resolved => $test_date, 93 ); 94 ok $id, 'created a ticket'; 95 is $ticket->StartedObj->ISO, $test_date, 'started is set'; 96 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; 97 } 98 { 99 my $ticket = RT::Ticket->new( RT->SystemUser ); 100 my ($id, $msg) = $ticket->Create( 101 Queue => $general->id, 102 Subject => 'test', 103 Status => 'resolved', 104 Started => $test_date, 105 Resolved => $test_date, 106 ); 107 ok $id, 'created a ticket'; 108 is $ticket->StartedObj->ISO, $test_date, 'started is set'; 109 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; 110 } 111} 112 113diag "dates on create for delivery schema"; 114{ 115 { 116 my $ticket = RT::Ticket->new( RT->SystemUser ); 117 my ($id, $msg) = $ticket->Create( 118 Queue => $delivery->id, 119 Subject => 'test', 120 Status => 'ordered', 121 ); 122 ok $id, 'created a ticket'; 123 is $ticket->StartedObj->Unix , 0, 'started is not set'; 124 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set'; 125 126 } 127 { 128 my $ticket = RT::Ticket->new( RT->SystemUser ); 129 my ($id, $txn, $msg) = $ticket->Create( 130 Queue => $delivery->id, 131 Subject => 'test', 132 ); 133 ok $id, 'created a ticket'; 134 diag($msg); 135 is $ticket->Status, 'ordered', "Status is ordered"; 136 my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); 137 ok($statusval,$statusmsg); 138 ok $ticket->StartedObj->IsSet, 'started is set to ' .$ticket->StartedObj->AsString ; 139 is $ticket->ResolvedObj->Unix, 0, 'resolved is not set'; 140 } 141 { 142 my $ticket = RT::Ticket->new( RT->SystemUser ); 143 my ($id, $msg) = $ticket->Create( 144 Queue => $delivery->id, 145 Subject => 'test', 146 ); 147 ok $id, 'created a ticket'; 148 149 my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); 150 ok($statusval,$statusmsg); 151 152 ($statusval,$statusmsg) = $ticket->SetStatus('delivered'); 153 ok($statusval,$statusmsg); 154 155 ok $ticket->StartedObj->IsSet, 'started is set'; 156 ok $ticket->ResolvedObj->IsSet, 'resolved is set'; 157 } 158 159 my $test_date = '2008-11-28 12:00:00'; 160 { 161 my $ticket = RT::Ticket->new( RT->SystemUser ); 162 my ($id, $statusmsg) = $ticket->Create( 163 Queue => $delivery->id, 164 Subject => 'test', 165 Status => 'ordered', 166 Started => $test_date, 167 Resolved => $test_date, 168 ); 169 ok $id, 'created a ticket'; 170 is $ticket->StartedObj->ISO, $test_date, 'started is set'; 171 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; 172 } 173 { 174 my $ticket = RT::Ticket->new( RT->SystemUser ); 175 my ($id, $msg) = $ticket->Create( 176 Queue => $delivery->id, 177 Subject => 'test', 178 Status => 'ordered', 179 Started => $test_date, 180 Resolved => $test_date, 181 ); 182 ok $id, 'created a ticket'; 183 my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); 184 ok($statusval,$statusmsg); 185 is $ticket->StartedObj->ISO, $test_date, 'started is set'; 186 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; 187 } 188 { 189 my $ticket = RT::Ticket->new( RT->SystemUser ); 190 my ($id, $msg) = $ticket->Create( 191 Queue => $delivery->id, 192 Subject => 'test', 193 Started => $test_date, 194 Resolved => $test_date, 195 ); 196 ok $id, 'created a ticket'; 197 my ($statusval,$statusmsg) = $ticket->SetStatus('on way'); 198 ok($statusval,$statusmsg); 199 ($statusval,$statusmsg) = $ticket->SetStatus('delivered'); 200 ok($statusval,$statusmsg); 201 is $ticket->StartedObj->ISO, $test_date, 'started is set'; 202 TODO: { 203 local $TODO = "we should decide if we set resolved repeatedly"; 204 is $ticket->ResolvedObj->ISO, $test_date, 'resolved is set'; 205 }; 206 } 207} 208 209diag "dates on status change for default schema"; 210{ 211 my $ticket = RT::Ticket->new( RT->SystemUser ); 212 my ($id, $msg) = $ticket->Create( 213 Queue => $general->id, 214 Subject => 'test', 215 Status => 'new', 216 ); 217 ok $id, 'created a ticket'; 218 ok !$ticket->StartedObj->IsSet, 'started is not set'; 219 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 220 221 (my $status, $msg) = $ticket->SetStatus('open'); 222 ok $status, 'changed status' or diag "error: $msg"; 223 ok $ticket->StartedObj->IsSet, 'started is set'; 224 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 225 226 my $started = $ticket->StartedObj->Unix; 227 228 ($status, $msg) = $ticket->SetStatus('stalled'); 229 ok $status, 'changed status' or diag "error: $msg"; 230 is $ticket->StartedObj->Unix, $started, 'started is set and the same'; 231 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 232 233 ($status, $msg) = $ticket->SetStatus('open'); 234 ok $status, 'changed status' or diag "error: $msg"; 235 is $ticket->StartedObj->Unix, $started, 'started is set and the same'; 236 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 237 238 ($status, $msg) = $ticket->SetStatus('resolved'); 239 ok $status, 'changed status' or diag "error: $msg"; 240 is $ticket->StartedObj->Unix, $started, 'started is set and the same'; 241 ok $ticket->ResolvedObj->IsSet, 'resolved is set'; 242} 243 244diag "dates on status change for delivery schema"; 245{ 246 my $ticket = RT::Ticket->new( RT->SystemUser ); 247 my ($id, $msg) = $ticket->Create( 248 Queue => $delivery->id, 249 Subject => 'test', 250 Status => 'ordered', 251 ); 252 ok $id, 'created a ticket'; 253 ok !$ticket->StartedObj->IsSet, 'started is not set'; 254 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 255 256 (my $status, $msg) = $ticket->SetStatus('delayed'); 257 ok $status, 'changed status' or diag "error: $msg"; 258 ok $ticket->StartedObj->IsSet, 'started is set'; 259 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 260 261 my $started = $ticket->StartedObj->Unix; 262 263 ($status, $msg) = $ticket->SetStatus('on way'); 264 ok $status, 'changed status' or diag "error: $msg"; 265 is $ticket->StartedObj->Unix, $started, 'started is set and the same'; 266 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 267 268 ($status, $msg) = $ticket->SetStatus('delivered'); 269 ok $status, 'changed status' or diag "error: $msg"; 270 is $ticket->StartedObj->Unix, $started, 'started is set and the same'; 271 ok $ticket->ResolvedObj->IsSet, 'resolved is set'; 272} 273 274diag "add partial map between general->delivery"; 275{ 276 my $schemas = RT->Config->Get('Lifecycles'); 277 $schemas->{'__maps__'} = { 278 'default -> delivery' => { 279 new => 'on way', 280 }, 281 'delivery -> default' => { 282 'on way' => 'resolved', 283 }, 284 }; 285 RT::Lifecycle->FillCache; 286} 287 288diag "check date changes on moving a ticket"; 289{ 290 my $ticket = RT::Ticket->new( RT->SystemUser ); 291 my ($id, $msg) = $ticket->Create( 292 Queue => $general->id, 293 Subject => 'test', 294 Status => 'new', 295 ); 296 ok $id, 'created a ticket'; 297 ok !$ticket->StartedObj->IsSet, 'started is not set'; 298 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 299 300 (my $status, $msg) = $ticket->SetQueue( $delivery->id ); 301 ok $status, "moved ticket between queues with different schemas"; 302 is $ticket->Status, 'on way', 'status has been changed'; 303 ok $ticket->StartedObj->IsSet, 'started is set'; 304 ok !$ticket->ResolvedObj->IsSet, 'resolved is not set'; 305 306 ($status, $msg) = $ticket->SetQueue( $general->id ); 307 ok $status, "moved ticket between queues with different schemas"; 308 is $ticket->Status, 'resolved', 'status has been changed'; 309 ok $ticket->StartedObj->IsSet, 'started is set'; 310 ok $ticket->ResolvedObj->IsSet, 'resolved is set'; 311} 312 313done_testing; 314