Files
piratepoet/tests/unit/Cron/Workers/StatsNotifications/SchedulerTest.php
Pavel Dohnal f1934ff880 Use a better name for method
[MAILPOET-2439]
2019-11-05 13:38:51 +00:00

262 lines
7.5 KiB
PHP

<?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('findByNewsletterId')
->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('findByNewsletterId')
->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('findByNewsletterId')
->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);
}
}