import rt 3.4.6
[freeside.git] / rt / lib / t / regression / 04send_email.t
index a175ffa..09e6e6f 100644 (file)
@@ -1,12 +1,10 @@
 #!/usr/bin/perl -w
 
 use strict;
-use Test::More tests => 142;
-
+use Test::More tests => 137;
 use RT;
 RT::LoadConfig();
 RT::Init;
-
 use RT::EmailParser;
 use RT::Tickets;
 use RT::Action::SendEmail;
@@ -22,29 +20,17 @@ $everyone->PrincipalObj->GrantRight(Right =>'SuperUser');
 
 is (__PACKAGE__, 'main', "We're operating in the main package");
 
+
 {
-    no warnings qw/redefine/;
-    sub RT::Action::SendEmail::SendMessage {
+no warnings qw/redefine/;
+sub RT::Action::SendEmail::SendMessage {
         my $self = shift;
         my $MIME = shift;
 
         main::_fired_scrip($self->ScripObj);
         main::ok(ref($MIME) eq 'MIME::Entity', "hey, look. it's a mime entity");
-    }
 }
 
-# some utils
-sub first_txn    { return $_[0]->Transactions->First }
-sub first_attach { return first_txn($_[0])->Attachments->First }
-
-sub count_txns { return $_[0]->Transactions->Count }
-sub count_attachs { return first_txn($_[0])->Attachments->Count }
-
-sub file_content
-{
-    open my $fh, "<:raw", $_[0] or die "couldn't open file '$_[0]': $!";
-    local $/;
-    return scalar <$fh>;
 }
 
 # instrument SendEmail to pass us what it's about to send.
@@ -54,7 +40,7 @@ my $parser = RT::EmailParser->new();
 
 
 # Let's test to make sure a multipart/report is processed correctly
-my $content =  file_content("$RT::BasePath/lib/t/data/multipart-report");
+my $content =  `cat $RT::BasePath/lib/t/data/multipart-report` || die "couldn't find new content";
 # be as much like the mail gateway as possible.
 use RT::Interface::Email;
                                   
@@ -67,7 +53,7 @@ my $tick= $tickets->First();
 isa_ok($tick, "RT::Ticket", "got a ticket object");
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_txn($tick)->Content =~ /The original message was received/, "It's the bounce");
+ok ($tick->Transactions->First->Content =~ /The original message was received/, "It's the bounce");
 
 
 # make sure it fires scrips.
@@ -110,7 +96,7 @@ is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation");
 # create an iso 8859-1 ticket
 @scrips_fired = ();
 
-$content =  file_content("$RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1");
+$content =  `cat $RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content";
 
 
 
@@ -128,7 +114,7 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_txn($tick)->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
+ok ($tick->Transactions->First->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
 
 
 # make sure it fires scrips.
@@ -158,7 +144,7 @@ $RT::EmailOutputEncoding = 'iso-8859-1';
 # create an iso 8859-1 ticket
 @scrips_fired = ();
 
- $content =  file_content("$RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1");
+ $content =  `cat $RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content";
 # be as much like the mail gateway as possible.
 use RT::Interface::Email;
                                   
@@ -170,7 +156,7 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_txn($tick)->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
+ok ($tick->Transactions->First->Content =~ /H\x{e5}vard/, "It's signed by havard. yay");
 
 
 # make sure it fires scrips.
@@ -252,7 +238,7 @@ sub iso8859_redef_sendmessage {
 
 # {{{ test a multipart alternative containing a text-html part with an umlaut
 
- $content =  file_content("$RT::BasePath/lib/t/data/multipart-alternative-with-umlaut");
+ $content =  `cat $RT::BasePath/lib/t/data/multipart-alternative-with-umlaut` || die "couldn't find new content";
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -260,17 +246,16 @@ $parser->ParseMIMEEntityFromScalar($content);
 # be as much like the mail gateway as possible.
 &umlauts_redef_sendmessage;
 
-%args = (message => $content, queue => 1, action => 'correspond');
-RT::Interface::Email::Gateway(\%args);
-$tickets = RT::Tickets->new($RT::SystemUser);
+ %args =        (message => $content, queue => 1, action => 'correspond');
+ RT::Interface::Email::Gateway(\%args);
+ $tickets = RT::Tickets->new($RT::SystemUser);
 $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC');
 $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
-$tick = $tickets->First();
-
+ $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_txn($tick)->Content =~ /causes Error/, "We recorded the content right as text-plain");
-is (count_attachs($tick) , 3 , "Has three attachments, presumably a text-plain, a text-html and a multipart alternative");
+ok ($tick->Transactions->First->Content =~ /causes Error/, "We recorded the content right as text-plain");
+is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments, presumably a text-plain, a text-html and a multipart alternative");
 
 sub umlauts_redef_sendmessage {
     no warnings qw/redefine/;
@@ -281,7 +266,7 @@ sub umlauts_redef_sendmessage {
 
 # {{{ test a text-html message with an umlaut
 
- $content =  file_content("$RT::BasePath/lib/t/data/text-html-with-umlaut");
+ $content =  `cat $RT::BasePath/lib/t/data/text-html-with-umlaut` || die "couldn't find new content";
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -297,28 +282,29 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_attach($tick)->Content =~ /causes Error/, "We recorded the content as containing 'causes error'") or diag( first_attach($tick)->Content );
-ok (first_attach($tick)->ContentType =~ /text\/html/, "We recorded the content as text/html");
-is (count_attachs($tick), 1 , "Has one attachment, presumably a text-html and a multipart alternative");
+ok ($tick->Transactions->First->Attachments->First->Content =~ /causes Error/, "We recorded the content as containing 'causes error'");
+ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/html/, "We recorded the content as text/html");
+ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
 
 sub text_html_umlauts_redef_sendmessage {
     no warnings qw/redefine/;
     eval 'sub RT::Action::SendEmail::SendMessage { 
-                my $self = shift;
-                my $MIME = shift;
+                my $self = shift; 
+                my $MIME = shift; 
+                use Data::Dumper;
                 return (1) unless ($self->ScripObj->ScripActionObj->Name eq "Notify AdminCcs" );
-                is ($MIME->parts, 2, "generated correspondence mime entityis composed of three parts");
+                ok (is $MIME->parts, 2, "generated correspondence mime entityis composed of three parts");
                 is ($MIME->head->mime_type , "multipart/mixed", "The first part is a multipart mixed". $MIME->head->mime_type);
                 is ($MIME->parts(0)->head->mime_type , "text/plain", "The second part is a plain");
                 is ($MIME->parts(1)->head->mime_type , "text/html", "The third part is an html ");
-         }';
+                 }';
 }
 
 # }}}
 
 # {{{ test a text-html message with russian characters
 
- $content =  file_content("$RT::BasePath/lib/t/data/text-html-in-russian");
+ $content =  `cat $RT::BasePath/lib/t/data/text-html-in-russian` || die "couldn't find new content";
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -334,8 +320,8 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
  $tick = $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_attach($tick)->ContentType =~ /text\/html/, "We recorded the content right as text-html");
-ok (count_attachs($tick) ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
+ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/html/, "We recorded the content right as text-html");
+ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-html and a multipart alternative");
 
 sub text_html_russian_redef_sendmessage {
     no warnings qw/redefine/;
@@ -361,7 +347,7 @@ sub text_html_russian_redef_sendmessage {
 
 unshift (@RT::EmailInputEncodings, 'koi8-r');
 $RT::EmailOutputEncoding = 'koi8-r';
-$content =  file_content("$RT::BasePath/lib/t/data/russian-subject-no-content-type");
+$content =  `cat $RT::BasePath/lib/t/data/russian-subject-no-content-type` || die "couldn't find new content";
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -376,8 +362,8 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_attach($tick)->ContentType =~ /text\/plain/, "We recorded the content type right");
-ok (count_attachs($tick) ==1 , "Has one attachment, presumably a text-plain");
+ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/plain/, "We recorded the content type right");
+ok ($tick->Transactions->First->Attachments->Count ==1 , "Has one attachment, presumably a text-plain");
 is ($tick->Subject, "\x{442}\x{435}\x{441}\x{442} \x{442}\x{435}\x{441}\x{442}", "Recorded the subject right");
 sub text_plain_russian_redef_sendmessage {
     no warnings qw/redefine/;
@@ -389,7 +375,7 @@ sub text_plain_russian_redef_sendmessage {
                  my $subject  = $MIME->head->get("subject");
                 chomp($subject);
                 #is( $subject ,      /^=\?KOI8-R\?B\?W2V4YW1wbGUuY39tICM3XSDUxdPUINTF09Q=\?=/ , "The $subject is encoded correctly");
-                };
+               };
                  ';
 }
 
@@ -400,7 +386,7 @@ $RT::EmailOutputEncoding = 'utf-8';
 
 # {{{ test a message containing a nested RFC 822 message
 
- $content =  file_content("$RT::BasePath/lib/t/data/nested-rfc-822");
+ $content =  `cat $RT::BasePath/lib/t/data/nested-rfc-822` || die "couldn't find new content";
 ok ($content, "Loaded nested-rfc-822 to test");
 
 $parser->ParseMIMEEntityFromScalar($content);
@@ -416,8 +402,8 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 is ($tick->Subject, "[Jonas Liljegren] Re: [Para] Niv\x{e5}er?");
-ok (first_attach($tick)->ContentType =~ /multipart\/mixed/, "We recorded the content type right");
-is (count_attachs($tick) , 5 , "Has one attachment, presumably a text-plain and a message RFC 822 and another plain");
+ok ($tick->Transactions->First->Attachments->First->ContentType =~ /multipart\/mixed/, "We recorded the content type right");
+is ($tick->Transactions->First->Attachments->Count , 5 , "Has one attachment, presumably a text-plain and a message RFC 822 and another plain");
 sub text_plain_nested_redef_sendmessage {
     no warnings qw/redefine/;
     eval 'sub RT::Action::SendEmail::SendMessage { 
@@ -428,9 +414,9 @@ sub text_plain_nested_redef_sendmessage {
                  my $subject  =  $MIME->head->get("subject");
                  $subject  = MIME::Base64::decode_base64( $subject);
                 chomp($subject);
-                # TODO, why does this test fail
+               # TODO, why does this test fail
                 #ok($subject =~ qr{Niv\x{e5}er}, "The subject matches the word - $subject");
-                1;
+               1;
                  }';
 }
 
@@ -439,7 +425,7 @@ sub text_plain_nested_redef_sendmessage {
 
 # {{{ test a multipart alternative containing a uuencoded mesage generated by lotus notes
 
- $content =  file_content("$RT::BasePath/lib/t/data/notes-uuencoded");
+ $content =  `cat $RT::BasePath/lib/t/data/notes-uuencoded` || die "couldn't find new content";
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -455,8 +441,8 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_txn($tick)->Content =~ /from Lotus Notes/, "We recorded the content right");
-is (count_attachs($tick) , 3 , "Has three attachments");
+ok ($tick->Transactions->First->Content =~ /from Lotus Notes/, "We recorded the content right");
+is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments");
 
 sub notes_redef_sendmessage {
     no warnings qw/redefine/;
@@ -467,7 +453,7 @@ sub notes_redef_sendmessage {
 
 # {{{ test a multipart that crashes the file-based mime-parser works
 
- $content =  file_content("$RT::BasePath/lib/t/data/crashes-file-based-parser");
+ $content =  `cat $RT::BasePath/lib/t/data/crashes-file-based-parser` || die "couldn't find new content";
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -483,8 +469,8 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-ok (first_txn($tick)->Content =~ /FYI/, "We recorded the content right");
-is (count_attachs($tick) , 5 , "Has three attachments");
+ok ($tick->Transactions->First->Content =~ /FYI/, "We recorded the content right");
+is ($tick->Transactions->First->Attachments->Count , 5 , "Has three attachments");
 
 sub crashes_redef_sendmessage {
     no warnings qw/redefine/;
@@ -497,7 +483,7 @@ sub crashes_redef_sendmessage {
 
 # {{{ test a multi-line RT-Send-CC header
 
- $content =  file_content("$RT::BasePath/lib/t/data/rt-send-cc");
+ $content =  `cat $RT::BasePath/lib/t/data/rt-send-cc` || die "couldn't find new content";
 
 $parser->ParseMIMEEntityFromScalar($content);
 
@@ -511,7 +497,7 @@ $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0');
 $tick= $tickets->First();
 ok ($tick->Id, "found ticket ".$tick->Id);
 
-my $cc = first_attach($tick)->GetHeader('RT-Send-Cc');
+my $cc = $tick->Transactions->First->Attachments->First->GetHeader('RT-Send-Cc');
 ok ($cc =~ /test1/, "Found test 1");
 ok ($cc =~ /test2/, "Found test 2");
 ok ($cc =~ /test3/, "Found test 3");
@@ -520,30 +506,6 @@ ok ($cc =~ /test5/, "Found test 5");
 
 # }}}
 
-diag q{regression test for #5248 from rt3.fsck.com} if $ENV{TEST_VERBOSE};
-{
-    my $content = file_content("$RT::BasePath/lib/t/data/subject-with-folding-ws");
-    my ($status, $msg, $ticket) = RT::Interface::Email::Gateway(
-        { message => $content, queue => 1, action => 'correspond' }
-    );
-    ok ($status, 'created ticket') or diag "error: $msg";
-    ok ($ticket->id, "found ticket ". $ticket->id);
-    is ($ticket->Subject, 'test', 'correct subject');
-}
-
-diag q{regression test for #5248 from rt3.fsck.com} if $ENV{TEST_VERBOSE};
-{
-    my $content = file_content("$RT::BasePath/lib/t/data/very-long-subject");
-    my ($status, $msg, $ticket) = RT::Interface::Email::Gateway(
-        { message => $content, queue => 1, action => 'correspond' }
-    );
-    ok ($status, 'created ticket') or diag "error: $msg";
-    ok ($ticket->id, "found ticket ". $ticket->id);
-    is ($ticket->Subject, '0123456789'x20, 'correct subject');
-}
-
-
-
 # Don't taint the environment
 $everyone->PrincipalObj->RevokeRight(Right =>'SuperUser');
 1;