diff options
Diffstat (limited to 'rt/t/mail/charsets-outgoing.t')
-rw-r--r-- | rt/t/mail/charsets-outgoing.t | 331 |
1 files changed, 331 insertions, 0 deletions
diff --git a/rt/t/mail/charsets-outgoing.t b/rt/t/mail/charsets-outgoing.t new file mode 100644 index 000000000..e8f78cc1a --- /dev/null +++ b/rt/t/mail/charsets-outgoing.t @@ -0,0 +1,331 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Encode; + +use RT::Test tests => 78; + +my %string = ( + ru => { + test => "\x{442}\x{435}\x{441}\x{442}", + autoreply => "\x{410}\x{432}\x{442}\x{43e}\x{43e}\x{442}\x{432}\x{435}\x{442}", + support => "\x{43f}\x{43e}\x{434}\x{434}\x{435}\x{440}\x{436}\x{43a}\x{430}", + }, + latin1 => { + test => Encode::decode('latin1', "t\xE9st"), + autoreply => Encode::decode('latin1', "a\xFCtoreply"), + support => Encode::decode('latin1', "supp\xF5rt"), + }, +); + +RT::Test->set_mail_catcher; + +my $queue = RT::Test->load_or_create_queue( + Name => 'Regression', + CorrespondAddress => 'rt-recipient@example.com', + CommentAddress => 'rt-recipient@example.com', +); +ok $queue && $queue->id, 'loaded or created queue'; + +diag "make sure queue has no subject tag" if $ENV{'TEST_VERBOSE'}; +{ + my ($status, $msg) = $queue->SetSubjectTag( undef ); + ok $status, "set subject tag for the queue" or diag "error: $msg"; +} + +diag "set intial simple autoreply template" if $ENV{'TEST_VERBOSE'}; +{ + my $template = RT::Template->new( $RT::SystemUser ); + $template->Load('Autoreply'); + ok $template->id, "loaded autoreply tempalte"; + + my ($status, $msg) = $template->SetContent( + "Subject: Autreply { \$Ticket->Subject }\n" + ."\n" + ."hi there it's an autoreply.\n" + ."\n" + ); + ok $status, "changed content of the template" + or diag "error: $msg"; +} + +diag "basic test of autoreply" if $ENV{'TEST_VERBOSE'}; +{ + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => 'test', + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; +} + +diag "non-ascii Subject with ascii prefix set in the template" + if $ENV{'TEST_VERBOSE'}; +foreach my $set ( 'ru', 'latin1' ) { + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => $string{$set}{test}, + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$set}{test}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +foreach my $tag_set ( 'ru', 'latin1' ) { + +diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'}; +{ + my ($status, $msg) = $queue->SetSubjectTag( $string{$tag_set}{support} ); + ok $status, "set subject tag for the queue" or diag "error: $msg"; +} + +diag "ascii subject with non-ascii subject tag" if $ENV{'TEST_VERBOSE'}; +{ + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => 'test', + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$tag_set}{support}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +diag "non-ascii subject with non-ascii subject tag" if $ENV{'TEST_VERBOSE'}; +foreach my $set ( 'ru', 'latin1' ) { + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => $string{$set}{test}, + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$tag_set}{support}/ + or do { $status = 0; diag "wrong subject: $subject" }; + $subject =~ /$string{$set}{test}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +} # subject tag + +diag "return back the empty subject tag" if $ENV{'TEST_VERBOSE'}; +{ + my ($status, $msg) = $queue->SetSubjectTag( undef ); + ok $status, "set subject tag for the queue" or diag "error: $msg"; +} + + +foreach my $prefix_set ( 'ru', 'latin1' ) { + +diag "add non-ascii subject prefix in the autoreply template" if $ENV{'TEST_VERBOSE'}; +{ + my $template = RT::Template->new( $RT::SystemUser ); + $template->Load('Autoreply'); + ok $template->id, "loaded autoreply tempalte"; + + my ($status, $msg) = $template->SetContent( + "Subject: $string{$prefix_set}{autoreply} { \$Ticket->Subject }\n" + ."\n" + ."hi there it's an autoreply.\n" + ."\n" + ); + ok $status, "changed content of the template" or diag "error: $msg"; +} + +diag "ascii subject with non-ascii subject prefix in template" if $ENV{'TEST_VERBOSE'}; +{ + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => 'test', + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$prefix_set}{autoreply}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +diag "non-ascii subject with non-ascii subject prefix in template" + if $ENV{'TEST_VERBOSE'}; +foreach my $set ( 'ru', 'latin1' ) { + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => $string{$set}{test}, + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$prefix_set}{autoreply}/ + or do { $status = 0; diag "wrong subject: $subject" }; + $subject =~ /$string{$set}{test}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +foreach my $tag_set ( 'ru', 'latin1' ) { +diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'}; +{ + my ($status, $msg) = $queue->SetSubjectTag( $string{$tag_set}{support} ); + ok $status, "set subject tag for the queue" or diag "error: $msg"; +} + +diag "non-ascii subject, non-ascii prefix in template and non-ascii tag" + if $ENV{'TEST_VERBOSE'}; +foreach my $set ( 'ru', 'latin1' ) { + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => $string{$set}{test}, + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$prefix_set}{autoreply}/ + or do { $status = 0; diag "wrong subject: $subject" }; + $subject =~ /$string{$tag_set}{support}/ + or do { $status = 0; diag "wrong subject: $subject" }; + $subject =~ /$string{$set}{test}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +} # subject tag + +diag "flush subject tag of the queue" if $ENV{'TEST_VERBOSE'}; +{ + my ($status, $msg) = $queue->SetSubjectTag( undef ); + ok $status, "set subject tag for the queue" or diag "error: $msg"; +} + +} # prefix set + + +diag "don't change subject via template" if $ENV{'TEST_VERBOSE'}; +# clean DB has autoreply that always changes subject in template, +# we should test situation when subject is not changed from template +{ + my $template = RT::Template->new( $RT::SystemUser ); + $template->Load('Autoreply'); + ok $template->id, "loaded autoreply tempalte"; + + my ($status, $msg) = $template->SetContent( + "\n" + ."\n" + ."hi there it's an autoreply.\n" + ."\n" + ); + ok $status, "changed content of the template" or diag "error: $msg"; +} + +diag "non-ascii Subject without changes in template" if $ENV{'TEST_VERBOSE'}; +foreach my $set ( 'ru', 'latin1' ) { + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => $string{$set}{test}, + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$set}{test}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +foreach my $tag_set ( 'ru', 'latin1' ) { +diag "set non-ascii subject tag for the queue" if $ENV{'TEST_VERBOSE'}; +{ + my ($status, $msg) = $queue->SetSubjectTag( $string{$tag_set}{support} ); + ok $status, "set subject tag for the queue" or diag "error: $msg"; +} + +diag "non-ascii Subject without changes in template and with non-ascii subject tag" + if $ENV{'TEST_VERBOSE'}; +foreach my $set ( 'ru', 'latin1' ) { + my $ticket = RT::Ticket->new( $RT::SystemUser ); + $ticket->Create( + Queue => $queue->id, + Subject => $string{$set}{test}, + Requestor => 'root@localhost', + ); + my @mails = RT::Test->fetch_caught_mails; + ok @mails, "got some outgoing emails"; + + my $status = 1; + foreach my $mail ( @mails ) { + my $entity = parse_mail( $mail ); + my $subject = Encode::decode_utf8( $entity->head->get('Subject') ); + $subject =~ /$string{$set}{test}/ + or do { $status = 0; diag "wrong subject: $subject" }; + $subject =~ /$string{$tag_set}{support}/ + or do { $status = 0; diag "wrong subject: $subject" }; + } + ok $status, "all mails have correct data"; +} + +} # subject tag set + +sub parse_mail { + my $mail = shift; + require RT::EmailParser; + my $parser = new RT::EmailParser; + $parser->ParseMIMEEntityFromScalar( $mail ); + return $parser->Entity; +} + |