Email::Send::Test::DataDumper - Captures emails sent via Email::Send for testing, with Tie::DataDumper


Email-Send-Test-DataDumper documentation Contained in the Email-Send-Test-DataDumper distribution.

Index


Code Index:

NAME

Top

Email::Send::Test::DataDumper - Captures emails sent via Email::Send for testing, with Tie::DataDumper

SYNOPSIS

Top

  # Load as normal
  use Email::Send;
  use Email::Send::Test::DataDumper;

  # First, set the filename for Tie::DataDumper
  $Email::Send::Test::DataDumper::FILENAME = 'sentmail.txt';

  # Always clear the email trap before each test to prevent unexpected
  # results, and thus spurious test results.
  Email::Send::Test::DataDumper->clear;

  ### BEGIN YOUR CODE TO BE TESTED (example follows)
  my $sender = Email::Send->new({ mailer => 'Test::DataDumper', mailer_args => [ 'sentmail.txt' ] });
  $sender->send( $message );
  ### END YOUR CODE TO BE TESTED

  # Check that the number and type (and content) of mails
  # matched what you expect.
  my @emails = Email::Send::Test::DataDumper->emails;
  is( scalar(@emails), 1, 'Sent 1 email' );
  isa_ok( $emails[0], 'Email::MIME' ); # Email::Simple subclasses pass through

DESCRIPTION

Top

Email::Send::Test::DataDumper is

AUTHOR

Top

Nobuo Danjou <nobuo.danjou@gmail.com>

SEE ALSO

Top

Email::Send::Test, Tie::DataDumper

LICENSE

Top

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


Email-Send-Test-DataDumper documentation Contained in the Email-Send-Test-DataDumper distribution.

package Email::Send::Test::DataDumper;

use strict;
use warnings;
our $VERSION = '0.01';

use Return::Value;
use Tie::DataDumper;
our $FILENAME;
$FILENAME = '=' unless $FILENAME;

sub is_available {
    return eval { require Tie::DataDumper }
    ? success
    : failure "is_available: Loading Tie::DataDumper failed: $@";
}

sub send {
    my ($class, $message, @args) = @_;
    my $deliveries = $class->_deliveries(@args);
    push @$deliveries, [ $class, $message, \@args ];
}

sub deliveries {
    my ($class, @args) = @_;
    my $deliveries = $class->_deliveries(@args);
    return @$deliveries;
}

sub emails {
    my ($class, @args) = @_;
    my $deliveries = $class->_deliveries(@args);
    return scalar @$deliveries unless wantarray;
    return map { $_->[1] } @$deliveries;
}

sub clear {
    my ($class, @args) = @_;
    my $deliveries = $class->_deliveries(@args);
    @$deliveries = ();
    return 1;
}

sub _deliveries {
    my ($class, @args) = @_;
    @args = ($FILENAME) unless @args;
    tie my @deliveries => 'Tie::DataDumper', $args[0];
    return \@deliveries;
}

1;
__END__