RT 4.2.11, ticket#13852
[freeside.git] / rt / t / api / template.t
1
2 use warnings;
3 use strict;
4
5 use RT::Test tests => 37;
6
7 use_ok('RT::Template');
8
9 my $queue = RT::Test->load_or_create_queue( Name => 'Templates' );
10 ok $queue && $queue->id, "loaded or created a queue";
11
12 my $alt_queue = RT::Test->load_or_create_queue( Name => 'Alternative' );
13 ok $alt_queue && $alt_queue->id, 'loaded or created queue';
14
15 {
16     my $template = RT::Template->new(RT->SystemUser);
17     isa_ok($template, 'RT::Template');
18 }
19
20 {
21     my $template = RT::Template->new( RT->SystemUser );
22     my ($val,$msg) = $template->Create(
23         Queue => $queue->id,
24         Name => 'Test',
25         Content => 'This is template content'
26     );
27     ok $val, "created a template" or diag "error: $msg";
28     ok my $id = $template->id, "id is defined";
29     is $template->Name, 'Test';
30     is $template->Content, 'This is template content', "We created the object right";
31
32     ($val, $msg) = $template->SetContent( 'This is new template content');
33     ok $val, "changed content" or diag "error: $msg";
34
35     is $template->Content, 'This is new template content', "We managed to _Set_ the content";
36
37     ($val, $msg) = $template->Delete;
38     ok $val, "deleted template";
39
40     $template->Load($id);
41     ok !$template->id, "can not load template after deletion";
42 }
43
44 note "can not create template w/o Name";
45 {
46     clean_templates( Queue => $queue->id );
47     my $template = RT::Template->new( RT->SystemUser );
48     my ($val,$msg) = $template->Create( Queue => $queue->id );
49     ok(!$val,$msg);
50 }
51
52 note "can not create template with duplicate name";
53 {
54     clean_templates( Queue => $queue->id );
55     my $template = RT::Template->new( RT->SystemUser );
56     my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
57     ok($val,$msg);
58
59     ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
60     ok(!$val,$msg);
61 }
62
63 note "change template's name";
64 {
65     clean_templates( Queue => $queue->id );
66     my $template = RT::Template->new( RT->SystemUser );
67     my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
68     ok($val,$msg);
69
70     ($val,$msg) = $template->SetName( 'Some' );
71     ok($val,$msg);
72     is $template->Name, 'Some';
73 }
74
75 note "can not change name to empty";
76 {
77     clean_templates( Queue => $queue->id );
78     my $template = RT::Template->new( RT->SystemUser );
79     my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
80     ok($val,$msg);
81
82     ($val,$msg) = $template->Create( Queue => $queue->id, Name => '' );
83     ok(!$val,$msg);
84     ($val,$msg) = $template->Create( Queue => $queue->id, Name => undef );
85     ok(!$val,$msg);
86 }
87
88 note "can not change name to duplicate";
89 {
90     clean_templates( Queue => $queue->id );
91     my $template = RT::Template->new( RT->SystemUser );
92     my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
93     ok($val,$msg);
94
95     ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Some' );
96     ok($val,$msg);
97 }
98
99 note "changing queue of template is not implemented";
100 {
101     clean_templates( Queue => $queue->id );
102     my $template = RT::Template->new( RT->SystemUser );
103     my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
104     ok($val,$msg);
105
106     ($val,$msg) = $template->SetQueue( $alt_queue->id );
107     ok(!$val,$msg);
108 }
109
110 note "make sure template can not be deleted if it has scrips";
111 {
112     clean_templates( Queue => $queue->id );
113     my $template = RT::Template->new( RT->SystemUser );
114     my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Test' );
115     ok($val,$msg);
116
117     my $scrip = RT::Scrip->new( RT->SystemUser );
118     ($val,$msg) = $scrip->Create(
119         Queue => $queue->id,
120         ScripCondition => "On Create",
121         ScripAction => 'Autoreply To Requestors',
122         Template => $template->Name,
123     );
124     ok($val, $msg);
125
126     ($val, $msg) = $template->Delete;
127     ok(!$val,$msg);
128 }
129
130 note "make sure template can be deleted if it's an override";
131 {
132     clean_templates( Queue => $queue->id );
133     my $template = RT::Template->new( RT->SystemUser );
134     my ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Overrided' );
135     ok($val,$msg);
136
137     $template = RT::Template->new( RT->SystemUser );
138     ($val,$msg) = $template->Create( Queue => 0, Name => 'Overrided' );
139     ok($val,$msg);
140
141     my $scrip = RT::Scrip->new( RT->SystemUser );
142     ($val,$msg) = $scrip->Create(
143         Queue => $queue->id,
144         ScripCondition => "On Create",
145         ScripAction => 'Autoreply To Requestors',
146         Template => $template->Name,
147     );
148     ok($val, $msg);
149
150     ($val, $msg) = $template->Delete;
151     ok($val,$msg);
152 }
153
154 note "make sure template can be deleted if it has an override";
155 {
156     clean_templates( Queue => $queue->id );
157     my $template = RT::Template->new( RT->SystemUser );
158     my ($val,$msg) = $template->Create( Queue => 0, Name => 'Overrided' );
159     ok($val,$msg);
160
161     $template = RT::Template->new( RT->SystemUser );
162     ($val,$msg) = $template->Create( Queue => $queue->id, Name => 'Overrided' );
163     ok($val,$msg);
164
165     my $scrip = RT::Scrip->new( RT->SystemUser );
166     ($val,$msg) = $scrip->Create(
167         Queue => $queue->id,
168         ScripCondition => "On Create",
169         ScripAction => 'Autoreply To Requestors',
170         Template => $template->Name,
171     );
172     ok($val, $msg);
173
174     ($val, $msg) = $template->Delete;
175     ok($val,$msg);
176 }
177
178
179 {
180     my $t = RT::Template->new(RT->SystemUser);
181     $t->Create(Name => "Foo", Queue => $queue->id);
182     my $t2 = RT::Template->new(RT->Nobody);
183     $t2->Load($t->Id);
184     ok($t2->QueueObj->id, "Got the template's queue objet");
185 }
186
187 sub clean_templates {
188     my %args = (@_);
189
190     my $templates = RT::Templates->new( RT->SystemUser );
191     $templates->Limit( FIELD => 'Queue', VALUE => $args{'Queue'} )
192         if defined $args{'Queue'};
193     $templates->Limit( FIELD => 'Name', VALUE => $_ )
194         foreach ref $args{'Name'}? @{$args{'Name'}} : ($args{'Name'}||());
195     while ( my $t = $templates->Next ) {
196         my ($status) = $t->Delete;
197         unless ( $status ) {
198             $_->Delete foreach @{ $t->UsedBy->ItemsArrayRef };
199             $t->Delete;
200         }
201     }
202 }
203