RT 4.0.22
[freeside.git] / rt / t / mail / not-supported-charset.t
diff --git a/rt/t/mail/not-supported-charset.t b/rt/t/mail/not-supported-charset.t
new file mode 100644 (file)
index 0000000..bf2fe8f
--- /dev/null
@@ -0,0 +1,69 @@
+use strict;
+use warnings;
+
+use RT::Test tests => undef;
+use Test::Warn;
+
+my $queue = RT::Test->load_or_create_queue( Name => 'General' );
+ok $queue->id, 'loaded queue';
+
+{
+    my $mail = <<'END';
+From: root@localhost
+Subject: test
+Content-type: text/plain; charset="not-supported-encoding"
+
+ho hum just some text
+
+END
+
+    my ($stat, $id);
+    warning_like {
+        ($stat, $id) = RT::Test->send_via_mailgate($mail);
+        is( $stat >> 8, 0, "The mail gateway exited normally" );
+        ok( $id, "created ticket" );
+    } qr/Encoding 'not-supported-encoding' is not supported/;
+
+    my $ticket = RT::Ticket->new( RT->SystemUser );
+    $ticket->Load($id);
+    ok $ticket->id, "loaded ticket";
+
+    my $txn = $ticket->Transactions->First;
+    ok !$txn->ContentObj, 'no content';
+
+    my $attach = $txn->Attachments->First;
+    like $attach->Content, qr{ho hum just some text}, 'attachment is there';
+    is $attach->GetHeader('Content-Type'),
+        'application/octet-stream; charset="not-supported-encoding"',
+        'content type is changed'
+    ;
+    is $attach->GetHeader('X-RT-Original-Content-Type'),
+        'text/plain',
+        'original content type is saved'
+    ;
+}
+
+{
+    my $mail = <<'END';
+From: root@localhost
+Subject: =?not-supported?Q?=07test=A9?=
+Content-type: text/plain; charset="ascii"
+
+ho hum just some text
+
+END
+
+    my ($stat, $id);
+    warning_like {
+        ($stat, $id) = RT::Test->send_via_mailgate($mail);
+        is( $stat >> 8, 0, "The mail gateway exited normally" );
+        ok( $id, "created ticket" );
+    } qr/Charset 'not-supported' is not supported/;
+
+    my $ticket = RT::Ticket->new( RT->SystemUser );
+    $ticket->Load($id);
+    ok $ticket->id, "loaded ticket";
+    is $ticket->Subject, "\x{FFFD}test\x{FFFD}";
+}
+
+done_testing;