RT 4.2.11, ticket#13852
[freeside.git] / rt / t / api / template.t
index 331d9f9..1baac44 100644 (file)
@@ -2,23 +2,31 @@
 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');
@@ -32,3 +40,164 @@ ok $queue && $queue->id, "loaded or created a queue";
     $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;
+        }
+    }
+}
+