import rt 3.8.7
[freeside.git] / rt / t / mail / charsets-outgoing.t
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4 use utf8;
5
6 use RT::Test tests => 30;
7
8
9 RT::Test->set_mail_catcher;
10
11 my $queue = RT::Test->load_or_create_queue(
12     Name              => 'Regression',
13     CorrespondAddress => 'rt-recipient@example.com',
14     CommentAddress    => 'rt-recipient@example.com',
15 );
16 ok $queue && $queue->id, 'loaded or created queue';
17
18 diag "make sure queue has no subject tag" if $ENV{'TEST_VERBOSE'};
19 {
20     my ($status, $msg) = $queue->SetSubjectTag( undef );
21     ok $status, "set subject tag for the queue" or diag "error: $msg";
22 }
23
24 diag "set intial simple autoreply template" if $ENV{'TEST_VERBOSE'};
25 {
26     my $template = RT::Template->new( $RT::SystemUser );
27     $template->Load('Autoreply');
28     ok $template->id, "loaded autoreply tempalte";
29
30     my ($status, $msg) = $template->SetContent(
31         "Subject: Autreply { \$Ticket->Subject }\n"
32         ."\n"
33         ."hi there it's an autoreply.\n"
34         ."\n"
35     );
36     ok $status, "changed content of the template"
37         or diag "error: $msg";
38 }
39
40 diag "basic test of autoreply" if $ENV{'TEST_VERBOSE'};
41 {
42     my $ticket = RT::Ticket->new( $RT::SystemUser );
43     $ticket->Create(
44         Queue => $queue->id,
45         Subject => 'test',
46         Requestor => 'root@localhost',
47     );
48     my @mails = RT::Test->fetch_caught_mails;
49     ok @mails, "got some outgoing emails";
50 }
51
52 my $str_ru_test = "\x{442}\x{435}\x{441}\x{442}";
53 my $str_ru_autoreply = "\x{410}\x{432}\x{442}\x{43e}\x{43e}\x{442}\x{432}\x{435}\x{442}";
54 my $str_ru_support = "\x{43f}\x{43e}\x{434}\x{434}\x{435}\x{440}\x{436}\x{43a}\x{430}";
55
56 diag "non-ascii Subject with ascii prefix set in the template"
57     if $ENV{'TEST_VERBOSE'};
58 {
59     my $ticket = RT::Ticket->new( $RT::SystemUser );
60     $ticket->Create(
61         Queue => $queue->id,
62         Subject => $str_ru_test,
63         Requestor => 'root@localhost',
64     );
65     my @mails = RT::Test->fetch_caught_mails;
66     ok @mails, "got some outgoing emails";
67
68     my $status = 1;
69     foreach my $mail ( @mails ) {
70         my $entity = parse_mail( $mail );
71         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
72         $subject =~ /$str_ru_test/
73             or do { $status = 0; diag "wrong subject: $subject" };
74     }
75     ok $status, "all mails have correct data";
76 }
77
78 diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'};
79 {
80     my ($status, $msg) = $queue->SetSubjectTag( $str_ru_support );
81     ok $status, "set subject tag for the queue" or diag "error: $msg";
82 }
83
84 diag "ascii subject with non-ascii subject tag" if $ENV{'TEST_VERBOSE'};
85 {
86     my $ticket = RT::Ticket->new( $RT::SystemUser );
87     $ticket->Create(
88         Queue => $queue->id,
89         Subject => 'test',
90         Requestor => 'root@localhost',
91     );
92     my @mails = RT::Test->fetch_caught_mails;
93     ok @mails, "got some outgoing emails";
94
95     my $status = 1;
96     foreach my $mail ( @mails ) {
97         my $entity = parse_mail( $mail );
98         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
99         $subject =~ /$str_ru_support/
100             or do { $status = 0; diag "wrong subject: $subject" };
101     }
102     ok $status, "all mails have correct data";
103 }
104
105 diag "non-ascii subject with non-ascii subject tag" if $ENV{'TEST_VERBOSE'};
106 {
107     my $ticket = RT::Ticket->new( $RT::SystemUser );
108     $ticket->Create(
109         Queue => $queue->id,
110         Subject => $str_ru_test,
111         Requestor => 'root@localhost',
112     );
113     my @mails = RT::Test->fetch_caught_mails;
114     ok @mails, "got some outgoing emails";
115
116     my $status = 1;
117     foreach my $mail ( @mails ) {
118         my $entity = parse_mail( $mail );
119         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
120         $subject =~ /$str_ru_support/
121             or do { $status = 0; diag "wrong subject: $subject" };
122         $subject =~ /$str_ru_test/
123             or do { $status = 0; diag "wrong subject: $subject" };
124     }
125     ok $status, "all mails have correct data";
126 }
127
128 diag "return back the empty subject tag" if $ENV{'TEST_VERBOSE'};
129 {
130     my ($status, $msg) = $queue->SetSubjectTag( undef );
131     ok $status, "set subject tag for the queue" or diag "error: $msg";
132 }
133
134 diag "add non-ascii subject prefix in the autoreply template" if $ENV{'TEST_VERBOSE'};
135 {
136     my $template = RT::Template->new( $RT::SystemUser );
137     $template->Load('Autoreply');
138     ok $template->id, "loaded autoreply tempalte";
139
140     my ($status, $msg) = $template->SetContent(
141         "Subject: $str_ru_autoreply { \$Ticket->Subject }\n"
142         ."\n"
143         ."hi there it's an autoreply.\n"
144         ."\n"
145     );
146     ok $status, "changed content of the template" or diag "error: $msg";
147 }
148
149 diag "ascii subject with non-ascii subject prefix in template" if $ENV{'TEST_VERBOSE'};
150 {
151     my $ticket = RT::Ticket->new( $RT::SystemUser );
152     $ticket->Create(
153         Queue => $queue->id,
154         Subject => 'test',
155         Requestor => 'root@localhost',
156     );
157     my @mails = RT::Test->fetch_caught_mails;
158     ok @mails, "got some outgoing emails";
159
160     my $status = 1;
161     foreach my $mail ( @mails ) {
162         my $entity = parse_mail( $mail );
163         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
164         $subject =~ /$str_ru_autoreply/
165             or do { $status = 0; diag "wrong subject: $subject" };
166     }
167     ok $status, "all mails have correct data";
168 }
169
170 diag "non-ascii subject with non-ascii subject prefix in template"
171     if $ENV{'TEST_VERBOSE'};
172 {
173     my $ticket = RT::Ticket->new( $RT::SystemUser );
174     $ticket->Create(
175         Queue => $queue->id,
176         Subject => $str_ru_test,
177         Requestor => 'root@localhost',
178     );
179     my @mails = RT::Test->fetch_caught_mails;
180     ok @mails, "got some outgoing emails";
181
182     my $status = 1;
183     foreach my $mail ( @mails ) {
184         my $entity = parse_mail( $mail );
185         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
186         $subject =~ /$str_ru_autoreply/
187             or do { $status = 0; diag "wrong subject: $subject" };
188         $subject =~ /$str_ru_autoreply/
189             or do { $status = 0; diag "wrong subject: $subject" };
190     }
191     ok $status, "all mails have correct data";
192 }
193
194 diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'};
195 {
196     my ($status, $msg) = $queue->SetSubjectTag( $str_ru_support );
197     ok $status, "set subject tag for the queue" or diag "error: $msg";
198 }
199
200 diag "non-ascii subject, non-ascii prefix in template and non-ascii tag"
201     if $ENV{'TEST_VERBOSE'};
202 {
203     my $ticket = RT::Ticket->new( $RT::SystemUser );
204     $ticket->Create(
205         Queue => $queue->id,
206         Subject => $str_ru_test,
207         Requestor => 'root@localhost',
208     );
209     my @mails = RT::Test->fetch_caught_mails;
210     ok @mails, "got some outgoing emails";
211
212     my $status = 1;
213     foreach my $mail ( @mails ) {
214         my $entity = parse_mail( $mail );
215         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
216         $subject =~ /$str_ru_autoreply/
217             or do { $status = 0; diag "wrong subject: $subject" };
218         $subject =~ /$str_ru_autoreply/
219             or do { $status = 0; diag "wrong subject: $subject" };
220         $subject =~ /$str_ru_autoreply/
221             or do { $status = 0; diag "wrong subject: $subject" };
222     }
223     ok $status, "all mails have correct data";
224 }
225
226 diag "flush subject tag of the queue" if $ENV{'TEST_VERBOSE'};
227 {
228     my ($status, $msg) = $queue->SetSubjectTag( undef );
229     ok $status, "set subject tag for the queue" or diag "error: $msg";
230 }
231
232
233 diag "don't change subject via template" if $ENV{'TEST_VERBOSE'};
234 {
235     my $template = RT::Template->new( $RT::SystemUser );
236     $template->Load('Autoreply');
237     ok $template->id, "loaded autoreply tempalte";
238
239     my ($status, $msg) = $template->SetContent(
240         "\n"
241         ."\n"
242         ."hi there it's an autoreply.\n"
243         ."\n"
244     );
245     ok $status, "changed content of the template" or diag "error: $msg";
246 }
247
248 diag "non-ascii Subject without changes in template" if $ENV{'TEST_VERBOSE'};
249 {
250     my $ticket = RT::Ticket->new( $RT::SystemUser );
251     $ticket->Create(
252         Queue => $queue->id,
253         Subject => $str_ru_test,
254         Requestor => 'root@localhost',
255     );
256     my @mails = RT::Test->fetch_caught_mails;
257     ok @mails, "got some outgoing emails";
258
259     my $status = 1;
260     foreach my $mail ( @mails ) {
261         my $entity = parse_mail( $mail );
262         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
263         $subject =~ /$str_ru_test/
264             or do { $status = 0; diag "wrong subject: $subject" };
265     }
266     ok $status, "all mails have correct data";
267 }
268
269 diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'};
270 {
271     my ($status, $msg) = $queue->SetSubjectTag( $str_ru_support );
272     ok $status, "set subject tag for the queue" or diag "error: $msg";
273 }
274
275 diag "non-ascii Subject without changes in template and with non-ascii subject tag"
276     if $ENV{'TEST_VERBOSE'};
277 {
278     my $ticket = RT::Ticket->new( $RT::SystemUser );
279     $ticket->Create(
280         Queue => $queue->id,
281         Subject => $str_ru_test,
282         Requestor => 'root@localhost',
283     );
284     my @mails = RT::Test->fetch_caught_mails;
285     ok @mails, "got some outgoing emails";
286
287     my $status = 1;
288     foreach my $mail ( @mails ) {
289         my $entity = parse_mail( $mail );
290         my $subject = Encode::decode_utf8( $entity->head->get('Subject') );
291         $subject =~ /$str_ru_test/
292             or do { $status = 0; diag "wrong subject: $subject" };
293         $subject =~ /$str_ru_support/
294             or do { $status = 0; diag "wrong subject: $subject" };
295     }
296     ok $status, "all mails have correct data";
297 }
298
299 sub parse_mail {
300     my $mail = shift;
301     require RT::EmailParser;
302     my $parser = new RT::EmailParser;
303     $parser->ParseMIMEEntityFromScalar( $mail );
304     return $parser->Entity;
305 }
306