diff options
author | ivan <ivan> | 2011-02-17 00:25:23 +0000 |
---|---|---|
committer | ivan <ivan> | 2011-02-17 00:25:23 +0000 |
commit | fc6209f398899f0211cfcedeb81a3cd65e04a941 (patch) | |
tree | bc1dc8876218529948413d85c17cd67508bdd38d /rt/t/mail | |
parent | e70abd21bab68b23488f7ef1ee2e693a3b365691 (diff) |
import rt 3.8.9
Diffstat (limited to 'rt/t/mail')
-rw-r--r-- | rt/t/mail/gnupg-incoming.t | 3 | ||||
-rw-r--r-- | rt/t/mail/gnupg-realmail.t | 13 | ||||
-rw-r--r-- | rt/t/mail/gnupg-special.t | 86 | ||||
-rw-r--r-- | rt/t/mail/outlook.t | 272 | ||||
-rw-r--r-- | rt/t/mail/wrong_mime_charset.t | 25 |
5 files changed, 386 insertions, 13 deletions
diff --git a/rt/t/mail/gnupg-incoming.t b/rt/t/mail/gnupg-incoming.t index ec313330a..230aa9c58 100644 --- a/rt/t/mail/gnupg-incoming.t +++ b/rt/t/mail/gnupg-incoming.t @@ -34,8 +34,7 @@ RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' ); my ($baseurl, $m) = RT::Test->started_ok; # configure key for General queue -$m->get( $baseurl."?user=root;pass=password" ); -$m->content_like(qr/Logout/, 'we did log in'); +ok( $m->login, 'we did log in' ); $m->get( $baseurl.'/Admin/Queues/'); $m->follow_link_ok( {text => 'General'} ); $m->submit_form( form_number => 3, diff --git a/rt/t/mail/gnupg-realmail.t b/rt/t/mail/gnupg-realmail.t index de1d95815..198402b23 100644 --- a/rt/t/mail/gnupg-realmail.t +++ b/rt/t/mail/gnupg-realmail.t @@ -2,7 +2,7 @@ use strict; use warnings; -use RT::Test tests => 197; +use RT::Test tests => 196; plan skip_all => 'GnuPG required.' unless eval 'use GnuPG::Interface; 1'; @@ -37,20 +37,11 @@ $m->submit_form( form_number => 3, fields => { CorrespondAddress => 'rt-recipient@example.com' } ); $m->content_like(qr/rt-recipient\@example.com.* - never/, 'has key info.'); -diag "load Everyone group" if $ENV{'TEST_VERBOSE'}; -my $everyone; -{ - $everyone = RT::Group->new( $RT::SystemUser ); - $everyone->LoadSystemInternalGroup('Everyone'); - ok $everyone->id, "loaded 'everyone' group"; -} - RT::Test->set_rights( - Principal => $everyone, + Principal => 'Everyone', Right => ['CreateTicket'], ); - my $eid = 0; for my $usage (qw/signed encrypted signed&encrypted/) { for my $format (qw/MIME inline/) { diff --git a/rt/t/mail/gnupg-special.t b/rt/t/mail/gnupg-special.t new file mode 100644 index 000000000..7e50819e8 --- /dev/null +++ b/rt/t/mail/gnupg-special.t @@ -0,0 +1,86 @@ +#!/usr/bin/perl +use strict; +use warnings; + +use RT::Test tests => 11; + +plan skip_all => 'GnuPG required.' + unless eval 'use GnuPG::Interface; 1'; +plan skip_all => 'gpg executable is required.' + unless RT::Test->find_executable('gpg'); + +use File::Temp qw(tempdir); +my $homedir = tempdir( CLEANUP => 1 ); + +# catch any outgoing emails +RT::Test->set_mail_catcher; + +RT->Config->Set( 'GnuPG', + Enable => 1, + OutgoingMessagesFormat => 'RFC' ); + +RT->Config->Set( 'GnuPGOptions', + homedir => $homedir, + 'no-permission-warning' => undef); + +RT->Config->Set( 'MailPlugins' => 'Auth::MailFrom', 'Auth::GnuPG' ); + +RT::Test->import_gnupg_key('rt-recipient@example.com'); +RT::Test->import_gnupg_key('rt-test@example.com', 'public'); + +my ($baseurl, $m) = RT::Test->started_ok; + +ok( $m->login, 'we did log in' ); + +# configure key for General queue +{ + $m->get( $baseurl.'/Admin/Queues/'); + $m->follow_link_ok( {text => 'General'} ); + $m->submit_form( + form_number => 3, + fields => { CorrespondAddress => 'rt-recipient@example.com' }, + ); + $m->content_like(qr/rt-recipient\@example.com.* - never/, 'has key info.'); +} + +ok(my $user = RT::User->new($RT::SystemUser)); +ok($user->Load('root'), "Loaded user 'root'"); +$user->SetEmailAddress('recipient@example.com'); + +RT::Test->set_rights( + Principal => 'Everyone', + Right => ['CreateTicket'], +); + +{ + my $id = send_via_mailgate('quoted_inline_signature.txt'); + + my $tick = RT::Ticket->new( $RT::SystemUser ); + $tick->Load( $id ); + ok ($tick->id, "loaded ticket #$id"); + + my $txn = $tick->Transactions->First; + my ($msg, @attachments) = @{$txn->Attachments->ItemsArrayRef}; + + is( $msg->GetHeader('X-RT-Privacy'), + undef, + "no privacy is set as this ticket is not encrypted" + ); + + my @mail = RT::Test->fetch_caught_mails; + is(scalar @mail, 1, "autoreply only"); +} + +sub send_via_mailgate { + my $fname = shift; + my $emaildatadir = RT::Test::get_relocatable_dir(File::Spec->updir(), + qw(data gnupg emails special)); + my $file = File::Spec->catfile( $emaildatadir, $fname ); + my $mail = RT::Test->file_content($file); + + my ($status, $id) = RT::Test->send_via_mailgate($mail); + is ($status >> 8, 0, "the mail gateway exited normally"); + ok ($id, "got id of a newly created ticket - $id"); + return $id; +} + diff --git a/rt/t/mail/outlook.t b/rt/t/mail/outlook.t new file mode 100644 index 000000000..15bfa21bc --- /dev/null +++ b/rt/t/mail/outlook.t @@ -0,0 +1,272 @@ +#!/usr/bin/perl -w +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# <jesse.com> +# +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: +# +# This work is made available to you under the terms of Version 2 of +# the GNU General Public License. A copy of that license should have +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301 or visit their web page on the internet at +# http://www.gnu.org/copyleft/gpl.html. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +=head1 NAME + +rt-mailgate - Mail interface to RT3. + +=cut + +use strict; +use warnings; + +use RT::Test tests => 43; +my ($baseurl, $m) = RT::Test->started_ok; +# 12.0 is outlook 2007, 14.0 is 2010 +for my $mailer ( 'Microsoft Office Outlook 12.0', 'Microsoft Outlook 14.0' ) { + diag "Test mail with multipart/alternative" if $ENV{'TEST_VERBOSE'}; + { + my $text = <<EOF; +From: root\@localhost +X-Mailer: $mailer +To: rt\@@{[RT->Config->Get('rtname')]} +Subject: outlook basic test +Content-Type: multipart/alternative; + boundary="----=_NextPart_000_0004_01CB045C.A5A075D0" + +------=_NextPart_000_0004_01CB045C.A5A075D0 +Content-Type: text/plain; + charset="us-ascii" +Content-Transfer-Encoding: 7bit + +here is the content + + + +blahmm + +another line + + +------=_NextPart_000_0004_01CB045C.A5A075D0 +Content-Type: text/html; + charset="us-ascii" +Content-Transfer-Encoding: quoted-printable + +<html>this is fake</html> + + +------=_NextPart_000_0004_01CB045C.A5A075D0-- + +EOF + + my $content = <<EOF; +here is the content + +blahmm +another line +EOF + test_email( $text, $content, + $mailer . ' with multipart/alternative, \n\n are replaced' ); + } + + diag "Test mail with multipart/mixed, with multipart/alternative in it" + if $ENV{'TEST_VERBOSE'}; + { + my $text = <<EOF; +From: root\@localhost +X-Mailer: $mailer +To: rt\@@{[RT->Config->Get('rtname')]} +Subject: outlook basic test +Content-Type: multipart/mixed; + boundary="----=_NextPart_000_000F_01CB045E.5222CB40" + +------=_NextPart_000_000F_01CB045E.5222CB40 +Content-Type: multipart/alternative; + boundary="----=_NextPart_001_0010_01CB045E.5222CB40" + + +------=_NextPart_001_0010_01CB045E.5222CB40 +Content-Type: text/plain; + charset="us-ascii" +Content-Transfer-Encoding: 7bit + +foo + + + +bar + +baz + + +------=_NextPart_001_0010_01CB045E.5222CB40 +Content-Type: text/html; + charset="us-ascii" +Content-Transfer-Encoding: quoted-printable + +<html>this is fake</html> + +------=_NextPart_001_0010_01CB045E.5222CB40-- + +------=_NextPart_000_000F_01CB045E.5222CB40 +Content-Type: text/plain; + name="att.txt" +Content-Transfer-Encoding: quoted-printable +Content-Disposition: attachment; + filename="att.txt" + +this is the attachment! :)=0A= + +------=_NextPart_000_000F_01CB045E.5222CB40-- +EOF + + my $content = <<EOF; +foo + +bar +baz +EOF + test_email( $text, $content, + $mailer . ' with multipart/multipart, \n\n are replaced' ); + } + + diag "Test mail with with outlook, but the content type is text/plain" + if $ENV{'TEST_VERBOSE'}; + { + my $text = <<EOF; +From: root\@localhost +X-Mailer: $mailer +To: rt\@@{[RT->Config->Get('rtname')]} +Subject: outlook basic test +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit + +foo + + + +bar + +baz + +EOF + + my $content = <<EOF; +foo + + + +bar + +baz + +EOF + test_email( $text, $content, + $mailer . ' with only text/plain, \n\n are not replaced' ); + } +} + +diag "Test mail with with multipart/alternative but x-mailer is not outlook " + if $ENV{'TEST_VERBOSE'}; +{ + my $text = <<EOF; +From: root\@localhost +X-Mailer: Mutt +To: rt\@@{[RT->Config->Get('rtname')]} +Subject: outlook basic test +Content-Type: multipart/alternative; + boundary="----=_NextPart_000_0004_01CB045C.A5A075D0" + +------=_NextPart_000_0004_01CB045C.A5A075D0 +Content-Type: text/plain; + charset="us-ascii" +Content-Transfer-Encoding: 7bit + +foo + + + +bar + +baz + + +------=_NextPart_000_0004_01CB045C.A5A075D0 +Content-Type: text/html; + charset="us-ascii" +Content-Transfer-Encoding: quoted-printable + +<html>this is fake</html> + + +------=_NextPart_000_0004_01CB045C.A5A075D0-- + +EOF + + my $content = <<EOF; +foo + + + +bar + +baz + +EOF + test_email( $text, $content, 'without outlook, \n\n are not replaced' ); +} + +sub test_email { + my ( $text, $content, $msg ) = @_; + my ( $status, $id ) = RT::Test->send_via_mailgate($text); + is( $status >> 8, 0, "The mail gateway exited normally" ); + ok( $id, "Created ticket" ); + + my $ticket = RT::Test->last_ticket; + isa_ok( $ticket, 'RT::Ticket' ); + is( $ticket->Id, $id, "correct ticket id" ); + is( $ticket->Subject, 'outlook basic test', "subject of ticket $id" ); + my $txns = $ticket->Transactions; + $txns->Limit( FIELD => 'Type', VALUE => 'Create' ); + my $txn = $txns->First; + + is( $txn->Content, $content, $msg ); +} + diff --git a/rt/t/mail/wrong_mime_charset.t b/rt/t/mail/wrong_mime_charset.t new file mode 100644 index 000000000..f53c872e5 --- /dev/null +++ b/rt/t/mail/wrong_mime_charset.t @@ -0,0 +1,25 @@ +#!/usr/bin/perl +use strict; +use warnings; +use RT::Test nodata => 1, tests => 3; + +use_ok('RT::I18N'); +use utf8; +use Encode; +my $test_string = 'À'; +my $encoded_string = encode( 'iso-8859-1', $test_string ); +my $mime = MIME::Entity->build( + Subject => $encoded_string, + Data => [$encoded_string], +); + +# set the wrong charset mime in purpose +$mime->head->mime_attr( "Content-Type.charset" => 'utf8' ); + +RT::I18N::SetMIMEEntityToEncoding( $mime, 'iso-8859-1' ); +my $subject = decode( 'iso-8859-1', $mime->head->get('Subject') ); +chomp $subject; +is( $subject, $test_string, 'subject is set to iso-8859-1' ); +my $body = decode( 'iso-8859-1', $mime->stringify_body ); +chomp $body; +is( $body, $test_string, 'body is set to iso-8859-1' ); |