Файл: gapps/vendor/cartalyst/support/tests/MailerTest.php
Строк: 334
<?php
/**
* Part of the Support package.
*
* NOTICE OF LICENSE
*
* Licensed under the 3-clause BSD License.
*
* This source file is subject to the 3-clause BSD License that is
* bundled with this package in the LICENSE file.
*
* @package Support
* @version 2.0.1
* @author Cartalyst LLC
* @license BSD License (3-clause)
* @copyright (c) 2011-2017, Cartalyst LLC
* @link http://cartalyst.com
*/
namespace CartalystSupportTests;
use Mockery as m;
use CartalystSupportMailer;
use PHPUnit_Framework_TestCase;
use IlluminateContractsMailMailer as IlluminateMailer;
class MailerTest extends PHPUnit_Framework_TestCase
{
/**
* The Mailer instance.
*
* @var CartalystSupportMailer
*/
protected $mailer;
/**
* Setup resources and dependencies
*/
public function setUp()
{
$this->mailer = new Mailer(
m::mock('IlluminateContractsMailMailer'),
m::mock('IlluminateConfigRepository')
);
}
/**
* Close mockery.
*
* @return void
*/
public function tearDown()
{
m::close();
}
/** @test */
public function it_can_be_instantiated()
{
$mailer = new Mailer(
m::mock('IlluminateContractsMailMailer'),
m::mock('IlluminateConfigRepository')
);
$this->assertInstanceOf('CartalystSupportMailer', $mailer);
}
/** @test */
public function it_can_get_the_illuminate_mailer_instance()
{
$this->assertInstanceOf('IlluminateContractsMailMailer', $this->mailer->getMailer());
}
/** @test */
public function it_can_set_the_illuminate_mailer_instance()
{
$this->mailer->setMailer(m::mock('IlluminateContractsMailMailer'));
$this->assertInstanceOf('IlluminateContractsMailMailer', $this->mailer->getMailer());
}
/** @test */
public function it_can_get_the_illuminate_config_repository_instance()
{
$this->assertInstanceOf('IlluminateConfigRepository', $this->mailer->getConfig());
}
/** @test */
public function it_can_set_the_illuminate_config_repository_instance()
{
$this->mailer->setConfig(m::mock('IlluminateConfigRepository'));
$this->assertInstanceOf('IlluminateConfigRepository', $this->mailer->getConfig());
}
/** @test */
public function it_can_get_the_from_name()
{
$this->assertNull($this->mailer->getFromName());
}
/** @test */
public function it_can_set_the_from_name()
{
$this->mailer->setFromName('John Doe');
$this->assertEquals('John Doe', $this->mailer->getFromName());
}
/** @test */
public function it_can_get_the_from_address()
{
$this->assertNull($this->mailer->getFromAddress());
}
/** @test */
public function it_can_set_the_from_address()
{
$this->mailer->setFromAddress('foo@bar.baz');
$this->assertEquals('foo@bar.baz', $this->mailer->getFromAddress());
}
/** @test */
public function it_can_get_the_subject()
{
$this->assertNull($this->mailer->getSubject());
}
/** @test */
public function it_can_set_the_subject()
{
$this->mailer->setSubject('Example Subject');
$this->assertEquals('Example Subject', $this->mailer->getSubject());
}
/** @test */
public function it_can_get_all_the_recipients()
{
$this->assertEmpty($this->mailer->getRecipients());
}
/** @test */
public function it_can_set_multiple_recipients_at_once()
{
$this->mailer->setRecipients('to', [
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
]);
$recipients = $this->mailer->getRecipients('to');
$this->assertEquals(1, count($recipients));
$this->assertEquals([
'foo@bar.baz' =>
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
], $recipients);
$this->mailer->setRecipients('to', [
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
[
'email' => 'john@doe.com',
'name' => 'John Doe',
],
]);
$recipients = $this->mailer->getRecipients('to');
$this->assertEquals(2, count($recipients));
$this->assertEquals([
'foo@bar.baz' =>
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
'john@doe.com' =>
[
'email' => 'john@doe.com',
'name' => 'John Doe',
],
], $recipients);
$recipients = $this->mailer->getRecipients();
$this->assertEquals(2, count($recipients['to']));
$this->assertEquals([
'to' => [
'foo@bar.baz' =>
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
'john@doe.com' =>
[
'email' => 'john@doe.com',
'name' => 'John Doe',
],
],
], $recipients);
}
/** @test */
public function it_can_set_a_single_to_recipient()
{
$this->mailer->addTo('foo@bar.baz', 'Foo Bar');
$this->assertCount(1, $this->mailer->getRecipients('to'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_multiple_to_recipients()
{
$this->mailer->setTo([
'foo@bar.baz' =>
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
'john@doe.com' =>
[
'email' => 'john@doe.com',
'name' => 'John Doe',
],
]);
$this->assertCount(2, $this->mailer->getRecipients('to'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_a_single_cc_recipient()
{
$this->mailer->addCc('foo@bar.baz', 'Foo Bar');
$this->assertCount(1, $this->mailer->getRecipients('cc'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_multiple_cc_recipients()
{
$this->mailer->setCc([
'foo@bar.baz' =>
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
'john@doe.com' =>
[
'email' => 'john@doe.com',
'name' => 'John Doe',
],
]);
$this->assertCount(2, $this->mailer->getRecipients('cc'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_a_single_bcc_recipient()
{
$this->mailer->addBcc('foo@bar.baz', 'Foo Bar');
$this->assertCount(1, $this->mailer->getRecipients('bcc'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_multiple_bcc_recipients()
{
$this->mailer->setBcc([
'foo@bar.baz' =>
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
'john@doe.com' =>
[
'email' => 'john@doe.com',
'name' => 'John Doe',
],
]);
$this->assertCount(2, $this->mailer->getRecipients('bcc'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_a_single_reply_to_recipient()
{
$this->mailer->addReplyTo('foo@bar.baz', 'Foo Bar');
$this->assertCount(1, $this->mailer->getRecipients('replyTo'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_multiple_reply_to_recipients()
{
$this->mailer->setReplyTo([
'foo@bar.baz' =>
[
'email' => 'foo@bar.baz',
'name' => 'Foo Bar',
],
'john@doe.com' =>
[
'email' => 'john@doe.com',
'name' => 'John Doe',
],
]);
$this->assertCount(2, $this->mailer->getRecipients('replyTo'));
$this->assertNull($this->mailer->getRecipients('from'));
}
/** @test */
public function it_can_set_the_email_view_and_data()
{
$this->mailer->setView('foo.bar', ['foo' => 'bar']);
}
/** @test */
public function it_can_set_a_single_attachment()
{
$this->mailer->addAttachment('/foo/bar.baz');
$this->assertCount(1, $this->mailer->getAttachments());
}
/** @test */
public function it_can_set_multiple_attachments()
{
$this->mailer->setAttachments([
'/foo/bar.baz',
'/foo.bar',
]);
$this->assertCount(2, $this->mailer->getAttachments());
}
/** @test */
public function it_can_set_a_single_data_attachment()
{
$this->mailer->addDataAttachment('/foo/bar.baz');
$this->assertCount(1, $this->mailer->getDataAttachments());
}
/** @test */
public function it_can_set_multiple_data_attachments()
{
$this->mailer->setDataAttachments([
'/foo/bar.baz',
'/foo.bar',
]);
$this->assertCount(2, $this->mailer->getDataAttachments());
}
/** @test */
public function it_can_send_emails()
{
$baseMailer = m::mock('IlluminateContractsMailMailer');
$baseMailer->shouldReceive('send')->once();
$this->mailer->setMailer($baseMailer);
$this->mailer->send();
}
/** @test */
public function it_can_queue_emails()
{
$baseMailer = m::mock('IlluminateContractsMailMailer');
$baseMailer->shouldReceive('queue')->once();
$this->mailer->setMailer($baseMailer);
$this->mailer->queue();
}
/** @test */
public function it_can_queue_emails_on_a_specific_queue()
{
$baseMailer = m::mock('IlluminateContractsMailMailer');
$baseMailer->shouldReceive('queueOn')->once()->with('foo', null, [], m::any());
$this->mailer->setMailer($baseMailer);
$this->mailer->queueOn('foo');
}
/** @test */
public function it_can_queue_a_delayed_email()
{
$baseMailer = m::mock('IlluminateContractsMailMailer');
$baseMailer->shouldReceive('later')->once()->with(20, null, [], m::any());
$this->mailer->setMailer($baseMailer);
$this->mailer->later(20);
}
/** @test */
public function it_can_prepare_the_callback()
{
$baseMailer = m::mock('IlluminateContractsMailMailer');
$config = m::mock('IlluminateConfigRepository');
$mailerStub = new MailerStub(
$baseMailer,
$config
);
$config->shouldReceive('get')->twice();
$mailerStub->testCallback();
}
}
class MailerStub extends Mailer
{
public function testCallback()
{
$this->recipients = [
'to' => [
'foo@bar.baz' => [
'email' => 'foo@bar.baz',
'name' => 'foo bar',
],
],
];
$this->attachments = [
'foo',
'bar' => [
'baz',
[]
],
];
$this->dataAttachments = [
'data' => [
'foobar',
[]
],
];
$message = m::mock('IlluminateMailMessage');
$message->shouldReceive('subject')->once();
$message->shouldReceive('from')->once();
$message->shouldReceive('to')->once()->with('foo@bar.baz', 'foo bar');
$message->shouldReceive('attach')->once()->with('foo', []);
$message->shouldReceive('attach')->once()->with('baz', []);
$message->shouldReceive('attachData')->once()->with('foobar', 'data', []);
$callback = $this->prepareCallback();
$callback($message);
}
}