Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

146 lines (125 sloc) 4.823 kb
#!perl -w
use strict;
use Test::More tests => 37;
use File::Spec::Functions;
use_ok 'SVN::Notify' or die;
my $ext = $^O eq 'MSWin32' ? '.bat' : '';
my $dir = catdir curdir, 't', 'scripts';
$dir = catdir curdir, 't', 'bin' unless -d $dir;
my $smtp = {};
my %args = (
svnlook => catfile($dir, "testsvnlook$ext"),
smtp => 'smtp.example.com',
repos_path => 'tmp',
revision => '111',
revision_url => 'http://foo.com/?cs=%s',
to => ['test@example.com', 'try@example.com'],
);
my $subj = "Did this, that, and the «other».";
my $qsubj;
if (SVN::Notify::PERL58()) {
Encode::_utf8_on( $subj );
$qsubj = quotemeta Encode::encode( 'MIME-Q', $subj );
} else {
$qsubj = quotemeta $subj;
}
##############################################################################
ok my $notifier = SVN::Notify->new(%args), 'Create new SMTP notifier';
isa_ok $notifier, 'SVN::Notify', 'it';
ok $notifier->prepare, 'Prepare notifier';
do {
# I can't quite get the file handle stuff right in tied_fh below, so
# just silence warnings for now.
local $^W;
ok $notifier->execute, 'Execute notifier';
};
is_deeply $smtp->{new}, [
'smtp.example.com',
'Hello' => Sys::Hostname::hostname(),
NoTLS => 1,
], 'The SMTP::TLS object should have been instantiated with the SMTP address';
is $smtp->{mail}, 'theory', 'Mail should be initiated by user "theory"';
is_deeply $smtp->{to}, $args{to}, 'Mail should be from the right addresses';
ok $smtp->{data}, 'data() should have been called';
ok $smtp->{dataend}, 'dataend() should have been called';
ok $smtp->{quit}, 'quit() should have been called';
like $smtp->{datasend}, qr/Subject: \[111\] $qsubj\n/, 'Check subject';
like $smtp->{datasend}, qr/From: theory\n/, 'Check From';
like $smtp->{datasend}, qr/To:\s+test\@example\.com,\s+try\@example\.com\n/,
'Check To';
like $smtp->{datasend}, qr{Content-Type: text/plain; charset=UTF-8\n},
'Check Content-Type';
like $smtp->{datasend}, qr{Content-Transfer-Encoding: 8bit\n},
'Check Content-Transfer-Encoding';
# Make sure we have headers for each of the four kinds of changes.
for my $header ('Log Message', 'Modified Paths', 'Added Paths',
'Removed Paths', 'Property Changed', 'Revision Links') {
like $smtp->{datasend}, qr/^$header/m, $header;
}
# Check that we have the commit metatdata.
like $smtp->{datasend}, qr/Revision: 111\n/, 'Check Revision';
like $smtp->{datasend}, qr/Author: theory\n/, 'Check Author';
like $smtp->{datasend}, qr/Date: 2004-04-20 01:33:35 -0700 \(Tue, 20 Apr 2004\)\n/,
'Check Date';
# Check that the log message is there.
like $smtp->{datasend},
qr/Did this, that, and the «other»\. And then I did some more\. Some\nit was done on a second line\./,
'Check for log message, which should be UTF-8, but not utf8.';
# Make sure that the revision URL is there:
like $smtp->{datasend}, qr{^ http://foo[.]com/[?]cs=1234}m,
'We should have a revision URL';
##############################################################################
# Test port, authentication, and Debug.
$args{smtp_user} = 'theory';
$args{smtp_pass} = 'w00t!';
$args{smtp_port} = 1234;
$args{smtp_authtype} = 'NTLM';
$args{verbose} = 2;
$smtp = {};
do {
# Silence debugging.
local $^W;
*SVN::Notify::_dbpnt = sub {};
};
ok $notifier = SVN::Notify->new(%args),
'Create new authenticating SMTP notifier';
isa_ok $notifier, 'SVN::Notify', 'it';
ok $notifier->prepare, 'Prepare notifier';
do {
# I can't quite get the file handle stuff right in tied_fh below, so
# just silence warnings for now.
local $^W;
ok $notifier->execute, 'Execute notifier';
};
is_deeply $smtp->{new}, [
'smtp.example.com',
Hello => Sys::Hostname::hostname(),
Port => 1234,
NoTLS => 1,
User => 'theory',
Password => 'w00t!',
Debug => 1,
], 'The SMTP::TLSx object should be instantiated with SMTP address and Debug on';
is $smtp->{mail}, 'theory', 'Mail should be initiated by user "theory"';
is_deeply $smtp->{to}, $args{to}, 'Mail should be from the right addresses';
ok $smtp->{data}, 'data() should have been called';
ok $smtp->{dataend}, 'dataend() should have been called';
ok $smtp->{quit}, 'quit() should have been called';
# This class mocks Net::SMTP for testing purposes.
package Net::SMTP::TLS;
BEGIN { $INC{'Net/SMTP/TLS.pm'} = __FILE__; }
sub new {
my $class = shift;
$smtp->{new} = \@_;
bless {}, $class;
}
sub mail { $smtp->{mail} = $_[1] }
sub to { shift; $smtp->{to} = \@_ }
sub data { $smtp->{data} = 1 }
sub datasend { shift; $smtp->{datasend} .= join '', @_ }
sub dataend { $smtp->{dataend} = 1; }
sub quit { $smtp->{quit} = 1 }
sub tied_fh {
$smtp->{tied_fh} = 1;
return \local *STDOUT;
}
Jump to Line
Something went wrong with that request. Please try again.