Use Doctrine in Scheduler
[MAILPOET-2439]
This commit is contained in:
committed by
Jack Kitterhing
parent
368ed59f2a
commit
c6c7320737
261
tests/unit/Cron/Workers/StatsNotifications/SchedulerTest.php
Normal file
261
tests/unit/Cron/Workers/StatsNotifications/SchedulerTest.php
Normal file
@@ -0,0 +1,261 @@
|
||||
<?php
|
||||
|
||||
namespace MailPoet\Cron\Workers\StatsNotifications;
|
||||
|
||||
use MailPoet\Entities\NewsletterEntity;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\StatsNotificationEntity;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||
|
||||
class SchedulerTest extends \MailPoetUnitTest {
|
||||
|
||||
/** @var Scheduler */
|
||||
private $stats_notifications;
|
||||
|
||||
/** @var SettingsController|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $settings;
|
||||
|
||||
/** @var EntityManager|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $entityManager;
|
||||
|
||||
/** @var StatsNotificationsRepository|\PHPUnit_Framework_MockObject_MockObject */
|
||||
private $repository;
|
||||
|
||||
function _before() {
|
||||
parent::_before();
|
||||
$this->settings = $this->createMock(SettingsController::class);
|
||||
$this->entityManager = $this->createMock(EntityManager::class);
|
||||
$this->entityManager->method('flush');
|
||||
$this->repository = $this->createMock(StatsNotificationsRepository::class);
|
||||
$this->stats_notifications = new Scheduler(
|
||||
$this->settings,
|
||||
$this->entityManager,
|
||||
$this->repository
|
||||
);
|
||||
}
|
||||
|
||||
function testShouldSchedule() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => true, 'address' => 'email@example.com']],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
|
||||
$newsletter_id = 5;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
|
||||
$this->entityManager
|
||||
->expects($this->exactly(2))
|
||||
->method('persist');
|
||||
$this->entityManager
|
||||
->expects($this->at(0))
|
||||
->method('persist')
|
||||
->with($this->isInstanceOf(ScheduledTaskEntity::class));
|
||||
$this->entityManager
|
||||
->expects($this->at(1))
|
||||
->method('flush');
|
||||
$this->entityManager
|
||||
->expects($this->at(2))
|
||||
->method('persist')
|
||||
->with($this->isInstanceOf(StatsNotificationEntity::class));
|
||||
$this->entityManager
|
||||
->expects($this->at(3))
|
||||
->method('flush');
|
||||
|
||||
$this->repository
|
||||
->expects($this->once())
|
||||
->method('findAllForNewsletter')
|
||||
->with($newsletter_id)
|
||||
->willReturn([]);
|
||||
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldScheduleForNotificationHistory() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => true, 'address' => 'email@example.com']],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
|
||||
$newsletter_id = 4;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_NOTIFICATION_HISTORY);
|
||||
|
||||
$this->entityManager
|
||||
->expects($this->exactly(2))
|
||||
->method('persist');
|
||||
$this->entityManager
|
||||
->expects($this->at(0))
|
||||
->method('persist')
|
||||
->with($this->isInstanceOf(ScheduledTaskEntity::class));
|
||||
$this->entityManager
|
||||
->expects($this->at(1))
|
||||
->method('flush');
|
||||
$this->entityManager
|
||||
->expects($this->at(2))
|
||||
->method('persist')
|
||||
->with($this->isInstanceOf(StatsNotificationEntity::class));
|
||||
$this->entityManager
|
||||
->expects($this->at(3))
|
||||
->method('flush');
|
||||
|
||||
$this->repository
|
||||
->expects($this->once())
|
||||
->method('findAllForNewsletter')
|
||||
->with($newsletter_id)
|
||||
->willReturn([]);
|
||||
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldNotScheduleIfTrackingIsDisabled() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => true, 'address' => 'email@example.com']],
|
||||
['tracking.enabled', null, false],
|
||||
]));
|
||||
|
||||
$this->entityManager
|
||||
->expects($this->never())
|
||||
->method('persist');
|
||||
|
||||
$newsletter_id = 13;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldNotScheduleIfDisabled() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => false, 'address' => 'email@example.com']],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
|
||||
$this->entityManager
|
||||
->expects($this->never())
|
||||
->method('persist');
|
||||
|
||||
$newsletter_id = 6;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldNotScheduleIfSettingsMissing() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, []],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
|
||||
$this->entityManager
|
||||
->expects($this->never())
|
||||
->method('persist');
|
||||
|
||||
$newsletter_id = 7;
|
||||
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldNotScheduleIfEmailIsMissing() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => true]],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
|
||||
$this->entityManager
|
||||
->expects($this->never())
|
||||
->method('persist');
|
||||
|
||||
$newsletter_id = 8;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldNotScheduleIfEmailIsEmpty() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => true, 'address' => '']],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
|
||||
$this->entityManager
|
||||
->expects($this->never())
|
||||
->method('persist');
|
||||
|
||||
$newsletter_id = 9;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldNotScheduleIfAlreadyScheduled() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => true, 'address' => 'email@example.com']],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
|
||||
$newsletter_id = 10;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
|
||||
|
||||
$this->repository
|
||||
->expects($this->once())
|
||||
->method('findAllForNewsletter')
|
||||
->with($newsletter_id)
|
||||
->willReturn([new ScheduledTaskEntity()]);
|
||||
$this->entityManager
|
||||
->expects($this->never())
|
||||
->method('persist');
|
||||
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
function testShouldNotScheduleIfInvalidType() {
|
||||
$this->settings
|
||||
->method('get')
|
||||
->will($this->returnValueMap([
|
||||
[Worker::SETTINGS_KEY, null, ['enabled' => true, 'address' => 'email@example.com']],
|
||||
['tracking.enabled', null, true],
|
||||
]));
|
||||
$this->entityManager
|
||||
->expects($this->never())
|
||||
->method('persist');
|
||||
|
||||
$newsletter_id = 11;
|
||||
$newsletter = new NewsletterEntity();
|
||||
$newsletter->setId($newsletter_id);
|
||||
$newsletter->setType(NewsletterEntity::TYPE_WELCOME);
|
||||
$this->stats_notifications->schedule($newsletter);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user