Email-Sender-Transport-Mailgun

 view release on metacpan or  search on metacpan

t/retry.t  view on Meta::CPAN

use strict;
use Test::More;
use Test::Fatal;
use Test::Differences;

use DateTime;
use Email::Sender::Transport::Mailgun;

{
    no warnings 'redefine';
    *HTTP::Tiny::request = \&mock_request;
}

my $proto   = 'http';
my $host    = 'mailgun.example.com';
my $api_key = 'abcdef';
my $domain  = 'test.example.com';
my $id      = '<return value>';
my $error   = 'Send failed';

my %envelope = (
    from => 'sender@test.example.com',
    to   => 'recipient@test.example.com',
);

my $message = <<END_MESSAGE;
From: $envelope{from}
To: $envelope{to}
Subject: this message is going nowhere fast

Dear Recipient,

  You will never receive this.

--
sender
END_MESSAGE

my $transport = Email::Sender::Transport::Mailgun->new(
    api_key             => $api_key,
    domain              => $domain,
    base_uri            => "$proto://$host",
    retry_delay_seconds => 0, # no need to wait around
);

my $next_mock_request_fails = 0;
for my $failures_before_success (0 .. $transport->retry_count+2) {

    # Set the mock user agent to fail N times before succeeding.
    $next_mock_request_fails = $failures_before_success;


    my $result;
    my $ex = exception { $result = $transport->send($message, \%envelope) };

    my $should_succeed = $failures_before_success <= $transport->retry_count;
    if ($should_succeed) {
        is_deeply($ex, undef,
            "Mail sent ok after $failures_before_success failures");
        isa_ok($result, 'Email::Sender::Success::MailgunSuccess',
            'Return value type correct');
        is($result->id, $id, 'Return id correct');
    }
    else {



( run in 0.760 second using v1.01-cache-2.11-cpan-6aa56a78535 )