more room for imported package names, RT#79383
[freeside.git] / rt / t / api / template.t
index 1612b8f..1baac44 100644 (file)
 
-use strict;
 use warnings;
-use RT;
-use RT::Test tests => 2;
+use strict;
+
+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);
+    isa_ok($template, 'RT::Template');
+}
+
+{
+    my $template = RT::Template->new( RT->SystemUser );
+    my ($val,$msg) = $template->Create(
+        Queue => $queue->id,
+        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, 'Test';
+    is $template->Content, 'This is template content', "We created the object right";
+
+    ($val, $msg) = $template->SetContent( 'This is new template content');
+    ok $val, "changed content" or diag "error: $msg";
+
+    is $template->Content, 'This is new template content', "We managed to _Set_ the content";
+
+    ($val, $msg) = $template->Delete;
+    ok $val, "deleted template";
+
+    $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);
+}
 
-ok(require RT::Template);
+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 $t = RT::Template->new($RT::SystemUser);
-$t->Create(Name => "Foo", Queue => 1);
-my $t2 = RT::Template->new($RT::Nobody);
-$t2->Load($t->Id);
-ok($t2->QueueObj->id, "Got the template's queue objet");
+    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;
+        }
+    }
 }
 
-1;