Replace repeating code with using factory
[MAILPOET-4141]
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\Test\API\JSON\v1;
|
||||
|
||||
@ -11,22 +11,25 @@ use MailPoet\Entities\NewsletterOptionFieldEntity;
|
||||
use MailPoet\Entities\ScheduledTaskEntity;
|
||||
use MailPoet\Entities\SendingQueueEntity;
|
||||
use MailPoet\Newsletter\NewsletterValidator;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionFieldsRepository;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Settings\SettingsRepository;
|
||||
use MailPoet\Tasks\Sending;
|
||||
use MailPoet\Test\DataFactories\Newsletter;
|
||||
use MailPoet\Test\DataFactories\NewsletterOption;
|
||||
use MailPoet\Util\License\Features\Subscribers as SubscribersFeature;
|
||||
|
||||
class SendingQueueTest extends \MailPoetTest {
|
||||
/** @var NewsletterEntity */
|
||||
private $newsletter;
|
||||
|
||||
/** @var NewsletterOption */
|
||||
private $newsletterOptionsFactory;
|
||||
|
||||
public function _before() {
|
||||
parent::_before();
|
||||
$this->clean();
|
||||
$this->newsletterOptionsFactory = new NewsletterOption();
|
||||
|
||||
$this->newsletter = (new Newsletter())
|
||||
->withSubject('My Standard Newsletter')
|
||||
@ -44,15 +47,11 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->setStatus(NewsletterEntity::STATUS_SCHEDULED);
|
||||
$this->entityManager->flush();
|
||||
$newletterOptions = [
|
||||
$newsletterOptions = [
|
||||
'isScheduled' => 1,
|
||||
'scheduledAt' => '2018-10-10 10:00:00',
|
||||
];
|
||||
$this->_createOrUpdateNewsletterOptions(
|
||||
$newsletter,
|
||||
NewsletterEntity::TYPE_STANDARD,
|
||||
$newletterOptions
|
||||
);
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, $newsletterOptions);
|
||||
|
||||
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
||||
@ -62,7 +61,7 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($scheduledTask->getStatus())->equals(ScheduledTaskEntity::STATUS_SCHEDULED);
|
||||
$scheduled = $scheduledTask->getScheduledAt();
|
||||
$this->assertInstanceOf(\DateTimeInterface::class, $scheduled);
|
||||
expect($scheduled->format('Y-m-d H:i:s'))->equals($newletterOptions['scheduledAt']);
|
||||
expect($scheduled->format('Y-m-d H:i:s'))->equals($newsletterOptions['scheduledAt']);
|
||||
expect($scheduledTask->getType())->equals(Sending::TASK_TYPE);
|
||||
}
|
||||
|
||||
@ -82,15 +81,11 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
$newsletter = $this->newsletter;
|
||||
$newsletter->setStatus(NewsletterEntity::STATUS_SCHEDULED);
|
||||
$this->entityManager->flush();
|
||||
$newletterOptions = [
|
||||
$newsletterOptions = [
|
||||
'isScheduled' => 1,
|
||||
'scheduledAt' => '2018-10-10 10:00:00',
|
||||
];
|
||||
$this->_createOrUpdateNewsletterOptions(
|
||||
$newsletter,
|
||||
NewsletterEntity::TYPE_STANDARD,
|
||||
$newletterOptions
|
||||
);
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, $newsletterOptions);
|
||||
$sendingQueue = $this->diContainer->get(SendingQueueAPI::class);
|
||||
|
||||
// add scheduled task
|
||||
@ -103,14 +98,10 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($scheduled->format('Y-m-d H:i:s'))->equals('2018-10-10 10:00:00');
|
||||
|
||||
// update scheduled time
|
||||
$newletterOptions = [
|
||||
$newsletterOptions = [
|
||||
'scheduledAt' => '2018-11-11 11:00:00',
|
||||
];
|
||||
$this->_createOrUpdateNewsletterOptions(
|
||||
$newsletter,
|
||||
NewsletterEntity::TYPE_STANDARD,
|
||||
$newletterOptions
|
||||
);
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, $newsletterOptions);
|
||||
$result = $sendingQueue->add(['newsletter_id' => $newsletter->getId()]);
|
||||
$repo = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||
$this->entityManager->clear();
|
||||
@ -135,30 +126,6 @@ class SendingQueueTest extends \MailPoetTest {
|
||||
expect($response['errors'][0]['error'])->stringContainsString('bad_request');
|
||||
}
|
||||
|
||||
private function _createOrUpdateNewsletterOptions(NewsletterEntity $newsletter, $newsletterType, $options) {
|
||||
$newsletterOptionFieldRepository = $this->diContainer->get(NewsletterOptionFieldsRepository::class);
|
||||
$newsletterOptionRepository = $this->diContainer->get(NewsletterOptionsRepository::class);
|
||||
|
||||
foreach ($options as $option => $value) {
|
||||
$newsletterOptionField = $newsletterOptionFieldRepository->findOneBy(['name' => $option]);
|
||||
if (!$newsletterOptionField instanceof NewsletterOptionFieldEntity) {
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setName($option);
|
||||
$newsletterOptionField->setNewsletterType($newsletterType);
|
||||
$this->entityManager->persist($newsletterOptionField);
|
||||
}
|
||||
|
||||
$newsletterOption = $newsletterOptionRepository->findOneBy(['newsletter' => $newsletter, 'optionField' => $newsletterOptionField]);
|
||||
if (!$newsletterOption instanceof NewsletterOptionEntity) {
|
||||
$newsletterOption = new NewsletterOptionEntity($newsletter, $newsletterOptionField);
|
||||
$newsletter->getOptions()->add($newsletterOption);
|
||||
$this->entityManager->persist($newsletterOption);
|
||||
}
|
||||
$newsletterOption->setValue($value);
|
||||
}
|
||||
$this->entityManager->flush();
|
||||
}
|
||||
|
||||
public function clean() {
|
||||
$this->diContainer->get(SettingsRepository::class)->truncate();
|
||||
$this->truncateEntity(NewsletterEntity::class);
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php
|
||||
<?php declare(strict_types = 1);
|
||||
|
||||
namespace MailPoet\AutomaticEmails\WooCommerce\Events;
|
||||
|
||||
@ -11,13 +11,11 @@ use MailPoet\Entities\ScheduledTaskSubscriberEntity;
|
||||
use MailPoet\Entities\SendingQueueEntity;
|
||||
use MailPoet\Entities\SubscriberEntity;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionFieldsRepository;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||
use MailPoet\Newsletter\Scheduler\AutomaticEmailScheduler;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||
use MailPoet\Newsletter\Sending\ScheduledTaskSubscribersRepository;
|
||||
use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||
use MailPoet\Newsletter\Scheduler\Scheduler;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Settings\TrackingConfig;
|
||||
use MailPoet\Statistics\Track\SubscriberActivityTracker;
|
||||
@ -25,6 +23,7 @@ use MailPoet\Statistics\Track\SubscriberCookie;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\Test\DataFactories\Newsletter as NewsletterFactory;
|
||||
use MailPoet\Test\DataFactories\NewsletterOption as NewsletterOptionFactory;
|
||||
use MailPoet\Test\DataFactories\Subscriber as SubscriberFactory;
|
||||
use MailPoet\Util\Cookies;
|
||||
use MailPoet\WooCommerce\Helper as WooCommerceHelper;
|
||||
@ -56,12 +55,6 @@ class AbandonedCartTest extends \MailPoetTest {
|
||||
/** @var SubscriberActivityTracker&MockObject */
|
||||
private $subscriberActivityTrackerMock;
|
||||
|
||||
/** @var NewsletterOptionFieldsRepository */
|
||||
private $newsletterOptionFieldsRepository;
|
||||
|
||||
/** @var NewsletterOptionsRepository */
|
||||
private $newsletterOptionsRepository;
|
||||
|
||||
/** @var ScheduledTasksRepository */
|
||||
private $scheduledTasksRepository;
|
||||
|
||||
@ -77,8 +70,6 @@ class AbandonedCartTest extends \MailPoetTest {
|
||||
public function _before() {
|
||||
$this->cleanup();
|
||||
|
||||
$this->newsletterOptionFieldsRepository = $this->diContainer->get(NewsletterOptionFieldsRepository::class);
|
||||
$this->newsletterOptionsRepository = $this->diContainer->get(NewsletterOptionsRepository::class);
|
||||
$this->scheduledTasksRepository = $this->diContainer->get(ScheduledTasksRepository::class);
|
||||
$this->sendingQueuesRepository = $this->diContainer->get(SendingQueuesRepository::class);
|
||||
$this->scheduledTaskSubscribersRepository = $this->diContainer->get(ScheduledTaskSubscribersRepository::class);
|
||||
@ -320,7 +311,7 @@ class AbandonedCartTest extends \MailPoetTest {
|
||||
->withActiveStatus()
|
||||
->create();
|
||||
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
(new NewsletterOptionFactory())->createMultipleOptions($newsletter, [
|
||||
'group' => WooCommerceEmail::SLUG,
|
||||
'event' => AbandonedCart::SLUG,
|
||||
'afterTimeType' => 'hours',
|
||||
@ -353,36 +344,6 @@ class AbandonedCartTest extends \MailPoetTest {
|
||||
return $scheduledTask;
|
||||
}
|
||||
|
||||
private function createNewsletterOptions(NewsletterEntity $newsletter, array $options): void {
|
||||
foreach ($options as $option => $value) {
|
||||
$newsletterOptionField = $this->newsletterOptionFieldsRepository->findOneBy([
|
||||
'name' => $option,
|
||||
'newsletterType' => $newsletter->getType(),
|
||||
]);
|
||||
|
||||
if (!$newsletterOptionField) {
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setNewsletterType($newsletter->getType());
|
||||
$newsletterOptionField->setName($option);
|
||||
$this->newsletterOptionFieldsRepository->persist($newsletterOptionField);
|
||||
$this->newsletterOptionFieldsRepository->flush();
|
||||
}
|
||||
|
||||
$newsletterOption = $this->newsletterOptionsRepository->findOneBy([
|
||||
'newsletter' => $newsletter,
|
||||
'optionField' => $newsletterOptionField,
|
||||
]);
|
||||
|
||||
if (!$newsletterOption) {
|
||||
$newsletterOption = new NewsletterOptionEntity($newsletter, $newsletterOptionField);
|
||||
$newsletterOption->setValue($value);
|
||||
$newsletter->getOptions()->add($newsletterOption);
|
||||
$this->newsletterOptionsRepository->persist($newsletterOption);
|
||||
$this->newsletterOptionsRepository->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function createSubscriber(): SubscriberEntity {
|
||||
return (new SubscriberFactory())
|
||||
->withWpUserId(123)
|
||||
|
@ -10,6 +10,7 @@ use MailPoet\Entities\NewsletterOptionFieldEntity;
|
||||
use MailPoet\Entities\NewsletterPostEntity;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Newsletter\Scheduler\AutomaticEmailScheduler;
|
||||
use MailPoet\Test\DataFactories\NewsletterOption;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
|
||||
class AbandonedCartContentTest extends \MailPoetTest {
|
||||
@ -172,26 +173,10 @@ class AbandonedCartContentTest extends \MailPoetTest {
|
||||
}
|
||||
|
||||
private function setGroupAndEventOptions($newsletter, $group = WooCommerceEmail::SLUG, $event = AbandonedCart::SLUG) {
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setName('group');
|
||||
$newsletterOptionField->setNewsletterType(NewsletterEntity::TYPE_AUTOMATIC);
|
||||
$this->entityManager->persist($newsletterOptionField);
|
||||
|
||||
$newsletterOption = new NewsletterOptionEntity($newsletter, $newsletterOptionField);
|
||||
$newsletterOption->setValue($group);
|
||||
$this->entityManager->persist($newsletterOption);
|
||||
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setName('event');
|
||||
$newsletterOptionField->setNewsletterType(NewsletterEntity::TYPE_AUTOMATIC);
|
||||
$this->entityManager->persist($newsletterOptionField);
|
||||
|
||||
$newsletterOption = new NewsletterOptionEntity($newsletter, $newsletterOptionField);
|
||||
$newsletterOption->setValue($event);
|
||||
$this->entityManager->persist($newsletterOption);
|
||||
|
||||
$this->entityManager->flush();
|
||||
$this->entityManager->refresh($newsletter);
|
||||
(new NewsletterOption())->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_GROUP => $group,
|
||||
NewsletterOptionFieldEntity::NAME_EVENT => $event,
|
||||
]);
|
||||
}
|
||||
|
||||
private function createSendingTask($newsletter, $subscriberId = null, $meta = null) {
|
||||
|
@ -15,9 +15,9 @@ use MailPoet\Models\Newsletter;
|
||||
use MailPoet\Models\SendingQueue;
|
||||
use MailPoet\Newsletter\NewsletterPostsRepository;
|
||||
use MailPoet\Newsletter\NewslettersRepository;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionFieldsRepository;
|
||||
use MailPoet\Newsletter\Options\NewsletterOptionsRepository;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\Test\DataFactories\NewsletterOption as NewsletterOptionsFactory;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoet\WP\Posts as WPPosts;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
@ -36,29 +36,29 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
/** @var NewsletterOptionsRepository */
|
||||
private $newsletterOptionsRepository;
|
||||
|
||||
/** @var NewsletterOptionFieldsRepository */
|
||||
private $newsletterOptionFieldsRepository;
|
||||
|
||||
/** @var Hooks */
|
||||
private $hooks;
|
||||
|
||||
/** @var Scheduler */
|
||||
private $scheduler;
|
||||
|
||||
/** @var NewsletterOptionsFactory */
|
||||
private $newsletterOptionsFactory;
|
||||
|
||||
public function _before() {
|
||||
parent::_before();
|
||||
$this->postNotificationScheduler = $this->diContainer->get(PostNotificationScheduler::class);
|
||||
$this->newslettersRepository = $this->diContainer->get(NewslettersRepository::class);
|
||||
$this->newsletterPostsRepository = $this->diContainer->get(NewsletterPostsRepository::class);
|
||||
$this->newsletterOptionsRepository = $this->diContainer->get(NewsletterOptionsRepository::class);
|
||||
$this->newsletterOptionFieldsRepository = $this->diContainer->get(NewsletterOptionFieldsRepository::class);
|
||||
$this->newsletterOptionsFactory = new NewsletterOptionsFactory();
|
||||
$this->hooks = $this->diContainer->get(Hooks::class);
|
||||
$this->scheduler = $this->diContainer->get(Scheduler::class);
|
||||
}
|
||||
|
||||
public function testItCreatesPostNotificationSendingTask() {
|
||||
$newsletter = $this->createNewsletter();
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_SCHEDULE => '* 5 * * *',
|
||||
]);
|
||||
|
||||
@ -83,7 +83,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
|
||||
public function testItCreatesPostNotificationSendingTaskIfAPausedNotificationExists() {
|
||||
$newsletter = $this->createNewsletter();
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_SCHEDULE => '* 5 * * *',
|
||||
]);
|
||||
|
||||
@ -128,7 +128,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
|
||||
public function testItSchedulesPostNotification() {
|
||||
$newsletter = $this->createNewsletter();
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_SCHEDULE => '0 5 * * *',
|
||||
]);
|
||||
|
||||
@ -146,7 +146,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
|
||||
public function testItProcessesPostNotificationScheduledForDailyDelivery() {
|
||||
$newsletter = $this->createNewsletter();
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_INTERVAL_TYPE => PostNotificationScheduler::INTERVAL_DAILY,
|
||||
NewsletterOptionFieldEntity::NAME_MONTH_DAY => null,
|
||||
NewsletterOptionFieldEntity::NAME_NTH_WEEK_DAY => null,
|
||||
@ -168,7 +168,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
$newsletter = $this->createNewsletter();
|
||||
|
||||
// weekly notification is scheduled every Tuesday at 14:00
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_INTERVAL_TYPE => PostNotificationScheduler::INTERVAL_WEEKLY,
|
||||
NewsletterOptionFieldEntity::NAME_MONTH_DAY => null,
|
||||
NewsletterOptionFieldEntity::NAME_NTH_WEEK_DAY => null,
|
||||
@ -190,7 +190,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
$newsletter = $this->createNewsletter();
|
||||
|
||||
// monthly notification is scheduled every 20th day at 14:00
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_INTERVAL_TYPE => PostNotificationScheduler::INTERVAL_MONTHLY,
|
||||
NewsletterOptionFieldEntity::NAME_MONTH_DAY => 19,
|
||||
NewsletterOptionFieldEntity::NAME_NTH_WEEK_DAY => null,
|
||||
@ -211,7 +211,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
$newsletter = $this->createNewsletter();
|
||||
|
||||
// monthly notification is scheduled every last Saturday at 14:00
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_INTERVAL_TYPE => PostNotificationScheduler::INTERVAL_NTHWEEKDAY,
|
||||
NewsletterOptionFieldEntity::NAME_MONTH_DAY => null,
|
||||
NewsletterOptionFieldEntity::NAME_NTH_WEEK_DAY => 'L', // L = last
|
||||
@ -232,7 +232,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
$newsletter = $this->createNewsletter();
|
||||
|
||||
// notification is scheduled immediately (next minute)
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_INTERVAL_TYPE => PostNotificationScheduler::INTERVAL_IMMEDIATELY,
|
||||
NewsletterOptionFieldEntity::NAME_MONTH_DAY => null,
|
||||
NewsletterOptionFieldEntity::NAME_NTH_WEEK_DAY => null,
|
||||
@ -252,7 +252,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
public function testUnsearchablePostTypeDoesNotSchedulePostNotification() {
|
||||
$newsletter = $this->createNewsletter();
|
||||
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_INTERVAL_TYPE => PostNotificationScheduler::INTERVAL_IMMEDIATELY,
|
||||
NewsletterOptionFieldEntity::NAME_SCHEDULE => '* * * * *',
|
||||
]);
|
||||
@ -283,7 +283,7 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
public function testSchedulerWontRunIfUnsentNotificationHistoryExists() {
|
||||
$newsletter = $this->createNewsletter();
|
||||
|
||||
$this->createNewsletterOptions($newsletter, [
|
||||
$this->newsletterOptionsFactory->createMultipleOptions($newsletter, [
|
||||
NewsletterOptionFieldEntity::NAME_INTERVAL_TYPE => PostNotificationScheduler::INTERVAL_IMMEDIATELY,
|
||||
NewsletterOptionFieldEntity::NAME_SCHEDULE => '* * * * *',
|
||||
]);
|
||||
@ -343,26 +343,6 @@ class PostNotificationTest extends \MailPoetTest {
|
||||
return $newsletterPost;
|
||||
}
|
||||
|
||||
private function createNewsletterOptions(NewsletterEntity $newsletter, array $options) {
|
||||
foreach ($options as $name => $value) {
|
||||
$newsletterOptionField = $this->newsletterOptionFieldsRepository->findOneBy([
|
||||
'name' => $name,
|
||||
]);
|
||||
if ($newsletterOptionField === null) {
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setName($name);
|
||||
$newsletterOptionField->setNewsletterType(NewsletterEntity::TYPE_NOTIFICATION);
|
||||
$this->newsletterOptionFieldsRepository->persist($newsletterOptionField);
|
||||
}
|
||||
|
||||
$scheduleOption = new NewsletterOptionEntity($newsletter, $newsletterOptionField);
|
||||
$scheduleOption->setValue($value);
|
||||
$newsletter->getOptions()->add($scheduleOption);
|
||||
$this->newsletterOptionsRepository->persist($scheduleOption);
|
||||
}
|
||||
$this->newsletterOptionsRepository->flush();
|
||||
}
|
||||
|
||||
public function _after() {
|
||||
Carbon::setTestNow();
|
||||
$this->truncateEntity(NewsletterEntity::class);
|
||||
|
@ -15,6 +15,7 @@ use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Subscribers\SubscribersRepository;
|
||||
use MailPoet\Tasks\Sending as SendingTask;
|
||||
use MailPoet\Test\DataFactories\NewsletterOption;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
|
||||
@ -91,6 +92,7 @@ class WelcomeTest extends \MailPoetTest {
|
||||
$welcomeScheduler->createWelcomeNotificationSendingTask($newsletter, $this->subscriber->getId());
|
||||
$this->entityManager->refresh($newsletter);
|
||||
$queue = $newsletter->getLatestQueue();
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
|
||||
expect($queue->getId())->greaterOrEquals(1);
|
||||
$task = $queue->getTask();
|
||||
assert($task instanceof ScheduledTaskEntity);
|
||||
@ -115,6 +117,7 @@ class WelcomeTest extends \MailPoetTest {
|
||||
$welcomeScheduler->createWelcomeNotificationSendingTask($newsletter, $this->subscriber->getId());
|
||||
$this->entityManager->refresh($newsletter);
|
||||
$queue = $newsletter->getLatestQueue();
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
|
||||
expect($queue->getId())->greaterOrEquals(1);
|
||||
$task = $queue->getTask();
|
||||
assert($task instanceof ScheduledTaskEntity);
|
||||
@ -139,6 +142,7 @@ class WelcomeTest extends \MailPoetTest {
|
||||
$welcomeScheduler->createWelcomeNotificationSendingTask($newsletter, $this->subscriber->getId());
|
||||
$this->entityManager->refresh($newsletter);
|
||||
$queue = $newsletter->getLatestQueue();
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
|
||||
expect($queue->getId())->greaterOrEquals(1);
|
||||
$task = $queue->getTask();
|
||||
assert($task instanceof ScheduledTaskEntity);
|
||||
@ -164,6 +168,7 @@ class WelcomeTest extends \MailPoetTest {
|
||||
$welcomeScheduler->createWelcomeNotificationSendingTask($newsletter, $this->subscriber->getId());
|
||||
$this->entityManager->refresh($newsletter);
|
||||
$queue = $newsletter->getLatestQueue();
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
|
||||
expect($queue->getId())->greaterOrEquals(1);
|
||||
$task = $queue->getTask();
|
||||
assert($task instanceof ScheduledTaskEntity);
|
||||
@ -213,6 +218,7 @@ class WelcomeTest extends \MailPoetTest {
|
||||
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
||||
$this->entityManager->refresh($newsletter);
|
||||
$queue = $newsletter->getLatestQueue();
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
|
||||
$task = $queue->getTask();
|
||||
assert($task instanceof ScheduledTaskEntity);
|
||||
$scheduledAt = $task->getScheduledAt();
|
||||
@ -374,14 +380,15 @@ class WelcomeTest extends \MailPoetTest {
|
||||
]
|
||||
);
|
||||
$this->welcomeScheduler->scheduleWPUserWelcomeNotification(
|
||||
$subscriberId = $this->subscriber->getId(),
|
||||
$wpUser = ['roles' => ['administrator']]
|
||||
$this->subscriber->getId(),
|
||||
['roles' => ['administrator']]
|
||||
);
|
||||
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
||||
// queue is created and scheduled for delivery one day later
|
||||
$this->entityManager->refresh($newsletter);
|
||||
$queue = $newsletter->getLatestQueue();
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
|
||||
$task = $queue->getTask();
|
||||
assert($task instanceof ScheduledTaskEntity);
|
||||
$scheduledAt = $task->getScheduledAt();
|
||||
@ -402,13 +409,14 @@ class WelcomeTest extends \MailPoetTest {
|
||||
);
|
||||
$this->welcomeScheduler->scheduleWPUserWelcomeNotification(
|
||||
$this->subscriber->getId(),
|
||||
$wpUser = ['roles' => ['administrator']]
|
||||
['roles' => ['administrator']]
|
||||
);
|
||||
$currentTime = Carbon::createFromTimestamp(WPFunctions::get()->currentTime('timestamp'));
|
||||
Carbon::setTestNow($currentTime); // mock carbon to return current time
|
||||
// queue is created and scheduled for delivery one day later
|
||||
$this->entityManager->refresh($newsletter);
|
||||
$queue = $newsletter->getLatestQueue();
|
||||
$this->assertInstanceOf(SendingQueueEntity::class, $queue);
|
||||
$task = $queue->getTask();
|
||||
assert($task instanceof ScheduledTaskEntity);
|
||||
$scheduledAt = $task->getScheduledAt();
|
||||
@ -427,24 +435,9 @@ class WelcomeTest extends \MailPoetTest {
|
||||
return $newsletter;
|
||||
}
|
||||
|
||||
private function configureNewsletterWithOptions(NewsletterEntity $newsletter, array $options) {
|
||||
foreach ($options as $optionFieldName => $optionValue) {
|
||||
$optionField = $this->entityManager->getRepository(NewsletterOptionFieldEntity::class)->findOneBy([
|
||||
'name' => $optionFieldName,
|
||||
'newsletterType' => NewsletterEntity::TYPE_WELCOME,
|
||||
]);
|
||||
if (!$optionField instanceof NewsletterOptionFieldEntity) {
|
||||
$optionField = new NewsletterOptionFieldEntity();
|
||||
$optionField->setNewsletterType(NewsletterEntity::TYPE_WELCOME);
|
||||
$optionField->setName($optionFieldName);
|
||||
$this->entityManager->persist($optionField);
|
||||
}
|
||||
$option = new NewsletterOptionEntity($newsletter, $optionField);
|
||||
$option->setValue($optionValue);
|
||||
$this->entityManager->persist($option);
|
||||
$newsletter->getOptions()->add($option);
|
||||
}
|
||||
$this->entityManager->flush();
|
||||
private function configureNewsletterWithOptions(NewsletterEntity $newsletter, array $options): NewsletterEntity {
|
||||
$newsletterOptionsFactory = new NewsletterOption();
|
||||
$newsletterOptionsFactory->createMultipleOptions($newsletter, $options);
|
||||
return $newsletter;
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,7 @@ use MailPoet\Newsletter\Sending\SendingQueuesRepository;
|
||||
use MailPoet\Segments\SegmentsRepository;
|
||||
use MailPoet\Settings\SettingsController;
|
||||
use MailPoet\Settings\SettingsRepository;
|
||||
use MailPoet\Test\DataFactories\NewsletterOption;
|
||||
|
||||
class SubscriberActionsTest extends \MailPoetTest {
|
||||
|
||||
@ -82,10 +83,7 @@ class SubscriberActionsTest extends \MailPoetTest {
|
||||
NewsletterOptionFieldEntity::NAME_AFTER_TIME_TYPE => 'days',
|
||||
NewsletterOptionFieldEntity::NAME_AFTER_TIME_NUMBER => 1,
|
||||
];
|
||||
foreach ($newsletterOptions as $option => $value) {
|
||||
$newsletterOptionField = $this->createNewsletterOptionField($option, $newsletter->getType());
|
||||
$newsletterOption = $this->createNewsletterOption($newsletter, $newsletterOptionField, (string)$value);
|
||||
}
|
||||
(new NewsletterOption())->createMultipleOptions($newsletter, $newsletterOptions);
|
||||
|
||||
$this->settings->set('signup_confirmation.enabled', false);
|
||||
$subscriber = $this->subscriberActions->subscribe($this->testData, [$segment->getId()]);
|
||||
@ -112,10 +110,7 @@ class SubscriberActionsTest extends \MailPoetTest {
|
||||
'afterTimeType' => 'days',
|
||||
'afterTimeNumber' => 1,
|
||||
];
|
||||
foreach ($newsletterOptions as $option => $value) {
|
||||
$newsletterOptionField = $this->createNewsletterOptionField($option, $newsletter->getType());
|
||||
$newsletterOption = $this->createNewsletterOption($newsletter, $newsletterOptionField, (string)$value);
|
||||
}
|
||||
(new NewsletterOption())->createMultipleOptions($newsletter, $newsletterOptions);
|
||||
|
||||
$this->settings->set('signup_confirmation.enabled', true);
|
||||
$subscriber = $this->subscriberActions->subscribe($this->testData, [$segment->getId()]);
|
||||
@ -272,28 +267,6 @@ class SubscriberActionsTest extends \MailPoetTest {
|
||||
return $newsletter;
|
||||
}
|
||||
|
||||
private function createNewsletterOptionField(string $option, string $type): NewsletterOptionFieldEntity {
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setName($option);
|
||||
$newsletterOptionField->setNewsletterType($type);
|
||||
$this->entityManager->persist($newsletterOptionField);
|
||||
$this->entityManager->flush();
|
||||
return $newsletterOptionField;
|
||||
}
|
||||
|
||||
private function createNewsletterOption(
|
||||
NewsletterEntity $newsletter,
|
||||
NewsletterOptionFieldEntity $optionField,
|
||||
string $value
|
||||
): NewsletterOptionEntity {
|
||||
$newsletterOption = new NewsletterOptionEntity($newsletter, $optionField);
|
||||
$newsletterOption->setValue($value);
|
||||
$newsletter->getOptions()->add($newsletterOption);
|
||||
$this->entityManager->persist($newsletterOption);
|
||||
$this->entityManager->flush();
|
||||
return $newsletterOption;
|
||||
}
|
||||
|
||||
public function _after() {
|
||||
$this->truncateEntity(SubscriberEntity::class);
|
||||
$this->truncateEntity(SegmentEntity::class);
|
||||
|
@ -32,6 +32,7 @@ use MailPoet\Subscription\CaptchaRenderer;
|
||||
use MailPoet\Subscription\ManageSubscriptionFormRenderer;
|
||||
use MailPoet\Subscription\Pages;
|
||||
use MailPoet\Subscription\SubscriptionUrlFactory;
|
||||
use MailPoet\Test\DataFactories\NewsletterOption as NewsletterOptionFactory;
|
||||
use MailPoet\Test\DataFactories\Segment as SegmentFactory;
|
||||
use MailPoet\WP\Functions as WPFunctions;
|
||||
use MailPoetVendor\Carbon\Carbon;
|
||||
@ -144,17 +145,7 @@ class PagesTest extends \MailPoetTest {
|
||||
'afterTimeType' => 'days',
|
||||
'afterTimeNumber' => 1,
|
||||
];
|
||||
foreach ($newsletterOptions as $option => $value) {
|
||||
$newsletterOptionField = new NewsletterOptionFieldEntity();
|
||||
$newsletterOptionField->setName($option);
|
||||
$newsletterOptionField->setNewsletterType($newsletter->getType());
|
||||
$this->entityManager->persist($newsletterOptionField);
|
||||
|
||||
$newsletterOption = new NewsletterOptionEntity($newsletter, $newsletterOptionField);
|
||||
$newsletterOption->setValue((string)$value);
|
||||
$newsletter->getOptions()->add($newsletterOption);
|
||||
$this->entityManager->persist($newsletterOption);
|
||||
}
|
||||
(new NewsletterOptionFactory())->createMultipleOptions($newsletter, $newsletterOptions);
|
||||
|
||||
// confirm subscription and ensure that welcome email is scheduled
|
||||
$subscription->confirm();
|
||||
|
Reference in New Issue
Block a user