use warnings;
use strict;
-use RT;
-use RT::Test tests => 10;
+use RT::Test tests => 37;
+
+use_ok('RT::Template');
my $queue = RT::Test->load_or_create_queue( Name => 'Templates' );
ok $queue && $queue->id, "loaded or created a queue";
+my $alt_queue = RT::Test->load_or_create_queue( Name => 'Alternative' );
+ok $alt_queue && $alt_queue->id, 'loaded or created queue';
+
{
- my $template = RT::Template->new( RT->SystemUser );
+ my $template = RT::Template->new(RT->SystemUser);
isa_ok($template, 'RT::Template');
+}
+
+{
+ my $template = RT::Template->new( RT->SystemUser );
my ($val,$msg) = $template->Create(
Queue => $queue->id,
- Name => 'InsertTest',
+ Name => 'Test',
Content => 'This is template content'
);
ok $val, "created a template" or diag "error: $msg";
ok my $id = $template->id, "id is defined";
- is $template->Name, 'InsertTest';
+ is $template->Name, 'Test';
is $template->Content, 'This is template content', "We created the object right";
($val, $msg) = $template->SetContent( 'This is new template content');
$template->Load($id);
ok !$template->id, "can not load template after deletion";
}
+
+note "can not create template w/o Name";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id );
+ ok(!$val,$msg);
+}
+
+note "can not create template with duplicate name";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
+ ok($val,$msg);
+
+ ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
+ ok(!$val,$msg);
+}
+
+note "change template's name";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
+ ok($val,$msg);
+
+ ($val,$msg) = $template->SetName( 'Some' );
+ ok($val,$msg);
+ is $template->Name, 'Some';
+}
+
+note "can not change name to empty";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
+ ok($val,$msg);
+
+ ($val,$msg) = $template->Create( Queue => $queue->id, Name => '' );
+ ok(!$val,$msg);
+ ($val,$msg) = $template->Create( Queue => $queue->id, Name => undef );
+ ok(!$val,$msg);
+}
+
+note "can not change name to duplicate";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
+ ok($val,$msg);
+
+ ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Some' );
+ ok($val,$msg);
+}
+
+note "changing queue of template is not implemented";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
+ ok($val,$msg);
+
+ ($val,$msg) = $template->SetQueue( $alt_queue->id );
+ ok(!$val,$msg);
+}
+
+note "make sure template can not be deleted if it has scrips";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
+ ok($val,$msg);
+
+ my $scrip = RT::Scrip->new( RT->SystemUser );
+ ($val,$msg) = $scrip->Create(
+ Queue => $queue->id,
+ ScripCondition => "On Create",
+ ScripAction => 'Autoreply To Requestors',
+ Template => $template->Name,
+ );
+ ok($val, $msg);
+
+ ($val, $msg) = $template->Delete;
+ ok(!$val,$msg);
+}
+
+note "make sure template can be deleted if it's an override";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Overrided' );
+ ok($val,$msg);
+
+ $template = RT::Template->new( RT->SystemUser );
+ ($val,$msg) = $template->Create( Queue => 0, Name => 'Overrided' );
+ ok($val,$msg);
+
+ my $scrip = RT::Scrip->new( RT->SystemUser );
+ ($val,$msg) = $scrip->Create(
+ Queue => $queue->id,
+ ScripCondition => "On Create",
+ ScripAction => 'Autoreply To Requestors',
+ Template => $template->Name,
+ );
+ ok($val, $msg);
+
+ ($val, $msg) = $template->Delete;
+ ok($val,$msg);
+}
+
+note "make sure template can be deleted if it has an override";
+{
+ clean_templates( Queue => $queue->id );
+ my $template = RT::Template->new( RT->SystemUser );
+ my ($val,$msg) = $template->Create( Queue => 0, Name => 'Overrided' );
+ ok($val,$msg);
+
+ $template = RT::Template->new( RT->SystemUser );
+ ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Overrided' );
+ ok($val,$msg);
+
+ my $scrip = RT::Scrip->new( RT->SystemUser );
+ ($val,$msg) = $scrip->Create(
+ Queue => $queue->id,
+ ScripCondition => "On Create",
+ ScripAction => 'Autoreply To Requestors',
+ Template => $template->Name,
+ );
+ ok($val, $msg);
+
+ ($val, $msg) = $template->Delete;
+ ok($val,$msg);
+}
+
+
+{
+ my $t = RT::Template->new(RT->SystemUser);
+ $t->Create(Name => "Foo", Queue => $queue->id);
+ my $t2 = RT::Template->new(RT->Nobody);
+ $t2->Load($t->Id);
+ ok($t2->QueueObj->id, "Got the template's queue objet");
+}
+
+sub clean_templates {
+ my %args = (@_);
+
+ my $templates = RT::Templates->new( RT->SystemUser );
+ $templates->Limit( FIELD => 'Queue', VALUE => $args{'Queue'} )
+ if defined $args{'Queue'};
+ $templates->Limit( FIELD => 'Name', VALUE => $_ )
+ foreach ref $args{'Name'}? @{$args{'Name'}} : ($args{'Name'}||());
+ while ( my $t = $templates->Next ) {
+ my ($status) = $t->Delete;
+ unless ( $status ) {
+ $_->Delete foreach @{ $t->UsedBy->ItemsArrayRef };
+ $t->Delete;
+ }
+ }
+}
+