+my $queue_B = RT::Test->load_or_create_queue( Name => 'B' );
+ok $queue_B && $queue_B->id, 'loaded or created queue';
+
+note 'check creation errors vs. templates';
+{
+ my $scrip = RT::Scrip->new(RT->SystemUser);
+ my ($status, $msg) = $scrip->Create(
+ Queue => $queue->id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => 'not exist',
+ );
+ ok(!$status, "couldn't create scrip, not existing template");
+
+ ($status, $msg) = $scrip->Create(
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => 'not exist',
+ );
+ ok(!$status, "couldn't create scrip, not existing template");
+
+ ($status, $msg) = $scrip->Create(
+ Queue => $queue->id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => 54321,
+ );
+ ok(!$status, "couldn't create scrip, not existing template");
+
+ ($status, $msg) = $scrip->Create(
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => 54321,
+ );
+ ok(!$status, "couldn't create scrip, not existing template");
+
+ my $template = RT::Template->new( RT->SystemUser );
+ ($status, $msg) = $template->Create( Queue => $queue->id, Name => 'bar' );
+ ok $status, 'created a template';
+
+ ($status, $msg) = $scrip->Create(
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => $template->id,
+ );
+ ok(!$status, "couldn't create scrip, wrong template");
+
+ ($status, $msg) = $scrip->Create(
+ Queue => $queue_B->id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => $template->id,
+ );
+ ok(!$status, "couldn't create scrip, wrong template");
+}
+
+note 'check applications vs. templates';
+{
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($status, $msg) = $template->Create( Queue => $queue->id, Name => 'foo' );
+ ok $status, 'created a template';
+
+ my $scrip = RT::Scrip->new(RT->SystemUser);
+ ($status, $msg) = $scrip->Create(
+ Queue => $queue->Id,
+ ScripAction => 'User Defined',
+ ScripCondition => 'User Defined',
+ Template => 'foo',
+ CustomIsApplicableCode => "1;",
+ CustomPrepareCode => "1;",
+ CustomCommitCode => "1;",
+ );
+ ok($status, 'created a scrip') or diag "error: $msg";
+ RT::Test->object_scrips_are($scrip, [$queue], [0, $queue_B]);
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok(!$status, $msg);
+ RT::Test->object_scrips_are($scrip, [$queue], [0, $queue_B]);
+ my $obj_scrip = RT::ObjectScrip->new( RT->SystemUser );
+ ok($obj_scrip->LoadByCols( Scrip => $scrip->id, ObjectId => $queue->id ));
+ is($obj_scrip->Stage, 'TransactionCreate');
+ is($obj_scrip->FriendlyStage, 'Normal');
+
+ $template = RT::Template->new( RT->SystemUser );
+ ($status, $msg) = $template->Create( Queue => $queue_B->id, Name => 'foo' );
+ ok $status, 'created a template';
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok($status, 'added scrip to another queue');
+ RT::Test->object_scrips_are($scrip, [$queue, $queue_B], [0]);
+
+ ($status, $msg) = $scrip->RemoveFromObject( $queue_B->id );
+ ok($status, 'removed scrip from queue');
+
+ ($status, $msg) = $template->Delete;
+ ok $status, 'deleted template foo in queue B';
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok(!$status, $msg);
+ RT::Test->object_scrips_are($scrip, [$queue], [0, $queue_B]);
+
+ ($status, $msg) = $template->Create( Queue => 0, Name => 'foo' );
+ ok $status, 'created a global template';
+
+ ($status, $msg) = $scrip->AddToObject( $queue_B->id );
+ ok($status, 'added scrip');
+ RT::Test->object_scrips_are($scrip, [$queue, $queue_B], [0]);
+}
+
+note 'basic check for disabling scrips';
+{
+ my $scrip = RT::Scrip->new(RT->SystemUser);
+ my ($status, $msg) = $scrip->Create(
+ Queue => $queue->id,
+ ScripCondition => 'On Create',
+ ScripAction => 'User Defined',
+ CustomPrepareCode => 'return 1',
+ CustomCommitCode => '$self->TicketObj->SetPriority("87"); return 1',
+ Template => 'Blank'
+ );
+ ok($status, "created scrip");
+ is($scrip->Disabled, 0, "not disabled");
+
+ {
+ my $ticket = RT::Ticket->new(RT->SystemUser);
+ my ($tid, undef, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => "test",
+ );
+ ok($tid, "created ticket") or diag "error: $msg";
+ is ($ticket->Priority , '87', "Ticket priority is set right");
+ }
+
+ ($status,$msg) = $scrip->SetDisabled(1);
+ is($scrip->Disabled, 1, "disabled");
+
+ {
+ my $ticket = RT::Ticket->new(RT->SystemUser);
+ my ($tid, undef, $msg) = $ticket->Create(
+ Queue => $queue->id,
+ Subject => "test",
+ );
+ ok($tid, "created ticket") or diag "error: $msg";
+ isnt ($ticket->Priority , '87', "Ticket priority is set right");
+ }
+
+ is($scrip->FriendlyStage('TransactionCreate'), 'Normal',
+ 'Correct stage wording for TransactionCreate');
+ is($scrip->FriendlyStage('TransactionBatch'), 'Batch',
+ 'Correct stage wording for TransactionBatch');
+ RT->Config->Set('UseTransactionBatch', 0);
+ is($scrip->FriendlyStage('TransactionBatch'), 'Batch (disabled by config)',
+ 'Correct stage wording for TransactionBatch with UseTransactionBatch disabled');
+}