Skip to content

Commit

Permalink
covered jobs with tests
Browse files Browse the repository at this point in the history
metalagman committed May 30, 2018
1 parent 6be4c93 commit 71affc3
Showing 6 changed files with 147 additions and 12 deletions.
26 changes: 17 additions & 9 deletions src/Jobs/SendMessageJob.php
Original file line number Diff line number Diff line change
@@ -3,36 +3,44 @@
* @author Alexey Samoylov <alexey.samoylov@gmail.com>
*/

namespace YarCode\Yii2\QueueMailer\Mailer\Jobs;
namespace YarCode\Yii2\QueueMailer\Jobs;

use YarCode\Yii2\QueueMailer\Mailer;
use yii\base\BaseObject;
use yii\base\InvalidConfigException;
use yii\di\Instance;
use yii\mail\MessageInterface;
use yii\queue\JobInterface;

class SendMessageJob implements JobInterface
class SendMessageJob extends BaseObject implements JobInterface
{
/** @var MessageInterface */
public $message;
/** @var string */
/** @var Mailer */
public $mailer;

/**
* @inheritdoc
* @see JobInterface::execute()
*
* @throws InvalidConfigException
* @throws \InvalidArgumentException
*/
public function execute($queue)
public function init()
{
parent::init();
if (!$this->message instanceof MessageInterface) {
throw new \InvalidArgumentException('Message must be an instance of ' . MessageInterface::class);
}

/** @var Mailer $mailer */
$mailer = Instance::ensure($this->mailer, Mailer::class);
return $mailer->syncMailer->send($this->message);
$this->mailer = Instance::ensure($this->mailer, Mailer::class);
}

/**
* @inheritdoc
* @see JobInterface::execute()
*/
public function execute($queue)
{

return $this->mailer->syncMailer->send($this->message);
}
}
6 changes: 3 additions & 3 deletions src/Mailer.php
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
namespace YarCode\Yii2\QueueMailer;

use YarCode\Yii2\QueueMailer\Jobs\SendMultipleMessagesJob;
use YarCode\Yii2\QueueMailer\Mailer\Jobs\SendMessageJob;
use YarCode\Yii2\QueueMailer\Jobs\SendMessageJob;
use yii\base\Component;
use yii\base\InvalidConfigException;
use yii\di\Instance;
@@ -27,8 +27,8 @@ class Mailer extends Component implements MailerInterface
public function init()
{
parent::init();
Instance::ensure($this->queue, Queue::class);
Instance::ensure($this->syncMailer, MailerInterface::class);
$this->queue = Instance::ensure($this->queue, Queue::class);
$this->syncMailer = Instance::ensure($this->syncMailer, MailerInterface::class);
}

/**
54 changes: 54 additions & 0 deletions tests/Jobs/SendMessageJobTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php
/**
* @author Alexey Samoylov <alexey.samoylov@gmail.com>
*/
class SendMessageJobTest extends \PHPUnit\Framework\TestCase
{
/** @var \YarCode\Yii2\QueueMailer\Mailer */
public $mailer;
/** @var \yii\mail\MessageInterface */
public $message;
/** @var \YarCode\Yii2\QueueMailer\Jobs\SendMessageJob */
public $a;

/**
* @throws \yii\base\InvalidConfigException
*/
public function setUp()
{
parent::setUp();

$this->mailer = \Yii::createObject([
'class' => \YarCode\Yii2\QueueMailer\Mailer::class,
'queue' => [
'class' => \yii\queue\sync\Queue::class,
'handle' => false, // whether tasks should be executed immediately
],
'syncMailer' => [
'class' => \yii\swiftmailer\Mailer::class,
'useFileTransport' => true,
],
]);

$this->message = $this->mailer->compose();
$this->message->setTo('test@example.org');
$this->message->setFrom('no-reply@example.org');
$this->message->setHtmlBody('test message');

$this->a = \Yii::createObject([
'class' => \YarCode\Yii2\QueueMailer\Jobs\SendMessageJob::class,
'mailer' => $this->mailer,
'message' => $this->message,
]);
}

protected function tearDown()/* The :void return type declaration that should be here would cause a BC issue */
{
\yii\helpers\FileHelper::removeDirectory(Yii::getAlias('@runtime/mail'));
}

public function testExecute()
{
$this->assertTrue($this->a->execute($this->mailer->queue));
}
}
66 changes: 66 additions & 0 deletions tests/Jobs/SendMultipleMessagesJobTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
<?php
/**
* @author Alexey Samoylov <alexey.samoylov@gmail.com>
*/
class SendMultipleMessagesJobTest extends \PHPUnit\Framework\TestCase
{
/** @var \YarCode\Yii2\QueueMailer\Mailer */
public $mailer;
/** @var \yii\mail\MessageInterface */
public $message;
/** @var \yii\mail\MessageInterface */
public $message2;
/** @var \YarCode\Yii2\QueueMailer\Jobs\SendMessageJob */
public $a;

/**
* @throws \yii\base\InvalidConfigException
*/
public function setUp()
{
parent::setUp();

$this->mailer = \Yii::createObject([
'class' => \YarCode\Yii2\QueueMailer\Mailer::class,
'queue' => [
'class' => \yii\queue\sync\Queue::class,
'handle' => false, // whether tasks should be executed immediately
],
'syncMailer' => [
'class' => \yii\swiftmailer\Mailer::class,
'useFileTransport' => true,
],
]);

$this->message = $this->mailer->compose();
$this->message->setTo('test@example.org');
$this->message->setFrom('no-reply@example.org');
$this->message->setHtmlBody('test message');

$this->message2 = $this->mailer->compose();
$this->message2->setTo('test@example.org');
$this->message2->setFrom('no-reply@example.org');
$this->message2->setHtmlBody('test message 2');

$this->a = \Yii::createObject([
'class' => \YarCode\Yii2\QueueMailer\Jobs\SendMultipleMessagesJob::class,
'mailer' => $this->mailer,
'messages' => [
$this->message,
$this->message2,
],
]);
}

protected function tearDown()/* The :void return type declaration that should be here would cause a BC issue */
{
try {
\yii\helpers\FileHelper::removeDirectory(Yii::getAlias('@runtime/mail'));
} catch (\Throwable $e) {}
}

public function testExecute()
{
$this->assertEquals(2, $this->a->execute($this->mailer->queue));
}
}
5 changes: 5 additions & 0 deletions tests/autoload.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
<?php
// ensure we get report on all possible php errors
error_reporting(-1);

define('YII_ENV', 'test');
defined('YII_DEBUG') or define('YII_DEBUG', true);
require_once __DIR__ . '/../vendor/autoload.php';
require_once __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';

\Yii::setAlias('@runtime', __DIR__ . DIRECTORY_SEPARATOR . 'runtime');
2 changes: 2 additions & 0 deletions tests/runtime/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*
!.gitignore

0 comments on commit 71affc3

Please sign in to comment.