Update integration tests for usage SubscribersRepository
[MAILPOET-3268]
This commit is contained in:
@ -76,7 +76,7 @@ class ViewInBrowserController {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$subscriber = Subscriber::findOne($data['subscriber_id']) ?: null;
|
$subscriber = $this->subscribersRepository->findOneById($data['subscriber_id']);
|
||||||
if (!$subscriber) {
|
if (!$subscriber) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -85,7 +85,11 @@ class ViewInBrowserController {
|
|||||||
throw new \InvalidArgumentException("Missing 'subscriber_token'");
|
throw new \InvalidArgumentException("Missing 'subscriber_token'");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->linkTokens->verifyToken($subscriber, $data['subscriber_token'])) {
|
$subscriberModel = Subscriber::findOne($subscriber->getId());
|
||||||
|
if (!$subscriberModel) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!$this->linkTokens->verifyToken($subscriberModel, $data['subscriber_token'])) {
|
||||||
throw new \InvalidArgumentException("Invalid 'subscriber_token'");
|
throw new \InvalidArgumentException("Invalid 'subscriber_token'");
|
||||||
}
|
}
|
||||||
return $subscriber;
|
return $subscriber;
|
||||||
|
@ -3,11 +3,13 @@
|
|||||||
namespace MailPoet\Newsletter\ViewInBrowser;
|
namespace MailPoet\Newsletter\ViewInBrowser;
|
||||||
|
|
||||||
use Codeception\Stub\Expected;
|
use Codeception\Stub\Expected;
|
||||||
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
use MailPoet\Models\SendingQueue;
|
use MailPoet\Models\SendingQueue;
|
||||||
use MailPoet\Models\Subscriber;
|
use MailPoet\Models\Subscriber;
|
||||||
use MailPoet\Subscribers\LinkTokens;
|
use MailPoet\Subscribers\LinkTokens;
|
||||||
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
|
|
||||||
@ -15,10 +17,16 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
/** @var ViewInBrowserController */
|
/** @var ViewInBrowserController */
|
||||||
private $viewInBrowserController;
|
private $viewInBrowserController;
|
||||||
|
|
||||||
|
/** @var LinkTokens */
|
||||||
|
private $linkTokens;
|
||||||
|
|
||||||
|
/** @var SubscribersRepository */
|
||||||
|
private $subscribersRepository;
|
||||||
|
|
||||||
/** @var Newsletter */
|
/** @var Newsletter */
|
||||||
private $newsletter;
|
private $newsletter;
|
||||||
|
|
||||||
/** @var Subscriber */
|
/** @var SubscriberEntity */
|
||||||
private $subscriber;
|
private $subscriber;
|
||||||
|
|
||||||
/** @var SendingTask */
|
/** @var SendingTask */
|
||||||
@ -28,38 +36,43 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
private $browserPreviewData;
|
private $browserPreviewData;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
|
// instantiate class
|
||||||
|
$this->viewInBrowserController = $this->diContainer->get(ViewInBrowserController::class);
|
||||||
|
$this->linkTokens = $this->diContainer->get(LinkTokens::class);
|
||||||
|
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
|
||||||
|
|
||||||
// create newsletter
|
// create newsletter
|
||||||
$newsletter = Newsletter::create();
|
$newsletter = Newsletter::create();
|
||||||
$newsletter->type = 'type';
|
$newsletter->type = 'type';
|
||||||
$this->newsletter = $newsletter->save();
|
$this->newsletter = $newsletter->save();
|
||||||
|
|
||||||
// create subscriber
|
// create subscriber
|
||||||
$subscriber = Subscriber::create();
|
$subscriber = new SubscriberEntity();
|
||||||
$subscriber->email = 'test@example.com';
|
$subscriber->setEmail('test@example.com');
|
||||||
$subscriber->firstName = 'First';
|
$subscriber->setFirstName('First');
|
||||||
$subscriber->lastName = 'Last';
|
$subscriber->setLastName('Last');
|
||||||
$this->subscriber = $subscriber->save();
|
$this->subscribersRepository->persist($subscriber);
|
||||||
|
$this->subscribersRepository->flush();
|
||||||
|
$this->subscriber = $subscriber;
|
||||||
|
|
||||||
// create task & queue
|
// create task & queue
|
||||||
$sendingTask = SendingTask::create();
|
$sendingTask = SendingTask::create();
|
||||||
$sendingTask->newsletterId = $newsletter->id;
|
$sendingTask->newsletterId = $newsletter->id;
|
||||||
$sendingTask->setSubscribers([$subscriber->id]);
|
$sendingTask->setSubscribers([$subscriber->getId()]);
|
||||||
$sendingTask->updateProcessedSubscribers([$subscriber->id]);
|
$sendingTask->updateProcessedSubscribers([$subscriber->getId()]);
|
||||||
$this->sendingTask = $sendingTask->save();
|
$this->sendingTask = $sendingTask->save();
|
||||||
$linkTokens = new LinkTokens;
|
$linkTokens = new LinkTokens;
|
||||||
|
|
||||||
// build browser preview data
|
// build browser preview data
|
||||||
|
$subscriberModel = Subscriber::findOne($subscriber->getId());
|
||||||
$this->browserPreviewData = [
|
$this->browserPreviewData = [
|
||||||
'queue_id' => $sendingTask->queue()->id,
|
'queue_id' => $sendingTask->queue()->id,
|
||||||
'subscriber_id' => $subscriber->id,
|
'subscriber_id' => $subscriber->getId(),
|
||||||
'newsletter_id' => $newsletter->id,
|
'newsletter_id' => $newsletter->id,
|
||||||
'newsletter_hash' => $newsletter->hash,
|
'newsletter_hash' => $newsletter->hash,
|
||||||
'subscriber_token' => $linkTokens->getToken($subscriber),
|
'subscriber_token' => $linkTokens->getToken($subscriberModel),
|
||||||
'preview' => false,
|
'preview' => false,
|
||||||
];
|
];
|
||||||
|
|
||||||
// instantiate class
|
|
||||||
$this->viewInBrowserController = $this->diContainer->get(ViewInBrowserController::class);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItThrowsWhenDataIsMissing() {
|
public function testItThrowsWhenDataIsMissing() {
|
||||||
@ -107,41 +120,35 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItSetsSubscriberToLoggedInWPUserWhenPreviewIsEnabled() {
|
public function testItSetsSubscriberToLoggedInWPUserWhenPreviewIsEnabled() {
|
||||||
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
||||||
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, Subscriber $subscriber = null, SendingQueue $queue = null) {
|
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
|
||||||
assert($subscriber !== null); // PHPStan
|
assert($subscriber !== null); // PHPStan
|
||||||
expect($subscriber)->notNull();
|
expect($subscriber)->notNull();
|
||||||
expect($subscriber->id)->equals(1);
|
expect($subscriber->getId())->equals(1);
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = $this->createController($viewInBrowserRenderer);
|
||||||
$this->diContainer->get(LinkTokens::class),
|
|
||||||
$viewInBrowserRenderer
|
|
||||||
);
|
|
||||||
|
|
||||||
$data = $this->browserPreviewData;
|
$data = $this->browserPreviewData;
|
||||||
unset($data['subscriber_id']);
|
unset($data['subscriber_id']);
|
||||||
$data['preview'] = true;
|
$data['preview'] = true;
|
||||||
|
|
||||||
$this->subscriber->wpUserId = 1;
|
$this->subscriber->setWpUserId(1);
|
||||||
$this->subscriber->save();
|
$this->subscribersRepository->flush();
|
||||||
wp_set_current_user(1);
|
wp_set_current_user(1);
|
||||||
$viewInBrowserController->view($data);
|
$viewInBrowserController->view($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testItGetsQueueByQueueId() {
|
public function testItGetsQueueByQueueId() {
|
||||||
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
||||||
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, Subscriber $subscriber = null, SendingQueue $queue = null) {
|
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
|
||||||
assert($queue !== null); // PHPStan
|
assert($queue !== null); // PHPStan
|
||||||
expect($queue)->notNull();
|
expect($queue)->notNull();
|
||||||
expect($queue->id)->same($this->sendingTask->id);
|
expect($queue->id)->same($this->sendingTask->id);
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = $this->createController($viewInBrowserRenderer);
|
||||||
$this->diContainer->get(LinkTokens::class),
|
|
||||||
$viewInBrowserRenderer
|
|
||||||
);
|
|
||||||
|
|
||||||
$data = $this->browserPreviewData;
|
$data = $this->browserPreviewData;
|
||||||
$data['queueId'] = $this->sendingTask->queue()->id;
|
$data['queueId'] = $this->sendingTask->queue()->id;
|
||||||
@ -150,17 +157,14 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItGetsQueueByNewsletter() {
|
public function testItGetsQueueByNewsletter() {
|
||||||
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
||||||
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, Subscriber $subscriber = null, SendingQueue $queue = null) {
|
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
|
||||||
assert($queue !== null); // PHPStan
|
assert($queue !== null); // PHPStan
|
||||||
expect($queue)->notNull();
|
expect($queue)->notNull();
|
||||||
expect($queue->id)->same($this->sendingTask->queue()->id);
|
expect($queue->id)->same($this->sendingTask->queue()->id);
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = $this->createController($viewInBrowserRenderer);
|
||||||
$this->diContainer->get(LinkTokens::class),
|
|
||||||
$viewInBrowserRenderer
|
|
||||||
);
|
|
||||||
|
|
||||||
$data = $this->browserPreviewData;
|
$data = $this->browserPreviewData;
|
||||||
$data['queueId'] = null;
|
$data['queueId'] = null;
|
||||||
@ -169,15 +173,12 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItResetsQueueForWelcomeEmails() {
|
public function testItResetsQueueForWelcomeEmails() {
|
||||||
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
||||||
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, Subscriber $subscriber = null, SendingQueue $queue = null) {
|
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
|
||||||
expect($queue)->null();
|
expect($queue)->null();
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = $this->createController($viewInBrowserRenderer);
|
||||||
$this->diContainer->get(LinkTokens::class),
|
|
||||||
$viewInBrowserRenderer
|
|
||||||
);
|
|
||||||
|
|
||||||
// queue will be set to null for welcome email
|
// queue will be set to null for welcome email
|
||||||
$newsletter = $this->newsletter;
|
$newsletter = $this->newsletter;
|
||||||
@ -188,15 +189,12 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
|
|
||||||
public function testItResetsQueueForAutomaticEmailsInPreview() {
|
public function testItResetsQueueForAutomaticEmailsInPreview() {
|
||||||
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
$viewInBrowserRenderer = $this->make(ViewInBrowserRenderer::class, [
|
||||||
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, Subscriber $subscriber = null, SendingQueue $queue = null) {
|
'render' => Expected::once(function (bool $isPreview, Newsletter $newsletter, SubscriberEntity $subscriber = null, SendingQueue $queue = null) {
|
||||||
expect($queue)->null();
|
expect($queue)->null();
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$viewInBrowserController = new ViewInBrowserController(
|
$viewInBrowserController = $this->createController($viewInBrowserRenderer);
|
||||||
$this->diContainer->get(LinkTokens::class),
|
|
||||||
$viewInBrowserRenderer
|
|
||||||
);
|
|
||||||
|
|
||||||
// queue will be set to null for automatic email
|
// queue will be set to null for automatic email
|
||||||
$data = $this->browserPreviewData;
|
$data = $this->browserPreviewData;
|
||||||
@ -225,4 +223,12 @@ class ViewInBrowserControllerTest extends \MailPoetTest {
|
|||||||
expect($e->getMessage())->same($message);
|
expect($e->getMessage())->same($message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function createController($viewInBrowserRenderer): ViewInBrowserController {
|
||||||
|
return new ViewInBrowserController(
|
||||||
|
$this->linkTokens,
|
||||||
|
$viewInBrowserRenderer,
|
||||||
|
$this->subscribersRepository
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace MailPoet\Newsletter\ViewInBrowser;
|
namespace MailPoet\Newsletter\ViewInBrowser;
|
||||||
|
|
||||||
use Codeception\Stub\Expected;
|
use Codeception\Stub\Expected;
|
||||||
|
use MailPoet\Entities\SubscriberEntity;
|
||||||
use MailPoet\Models\Newsletter;
|
use MailPoet\Models\Newsletter;
|
||||||
use MailPoet\Models\NewsletterLink;
|
use MailPoet\Models\NewsletterLink;
|
||||||
use MailPoet\Models\ScheduledTask;
|
use MailPoet\Models\ScheduledTask;
|
||||||
@ -13,6 +14,7 @@ use MailPoet\Newsletter\Renderer\Renderer;
|
|||||||
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
use MailPoet\Newsletter\Shortcodes\Shortcodes;
|
||||||
use MailPoet\Router\Router;
|
use MailPoet\Router\Router;
|
||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
use MailPoet\Tasks\Sending as SendingTask;
|
use MailPoet\Tasks\Sending as SendingTask;
|
||||||
use MailPoet\WP\Emoji;
|
use MailPoet\WP\Emoji;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
@ -30,7 +32,7 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
|
|||||||
/** @var SendingTask */
|
/** @var SendingTask */
|
||||||
private $sendingTask;
|
private $sendingTask;
|
||||||
|
|
||||||
/** @var Subscriber */
|
/** @var SubscriberEntity */
|
||||||
private $subscriber;
|
private $subscriber;
|
||||||
|
|
||||||
/** @var mixed[] */
|
/** @var mixed[] */
|
||||||
@ -39,7 +41,11 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
|
|||||||
/** @var mixed[] */
|
/** @var mixed[] */
|
||||||
private $queueRenderedNewsletterWithoutTracking;
|
private $queueRenderedNewsletterWithoutTracking;
|
||||||
|
|
||||||
|
/** @var SubscribersRepository */
|
||||||
|
private $subscribersRepository;
|
||||||
|
|
||||||
public function _before() {
|
public function _before() {
|
||||||
|
$this->subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
|
||||||
$newsletterData = [
|
$newsletterData = [
|
||||||
'body' => json_decode(
|
'body' => json_decode(
|
||||||
'{
|
'{
|
||||||
@ -102,17 +108,19 @@ class ViewInBrowserRendererTest extends \MailPoetTest {
|
|||||||
$this->newsletter = $newsletter->save();
|
$this->newsletter = $newsletter->save();
|
||||||
|
|
||||||
// create subscriber
|
// create subscriber
|
||||||
$subscriber = Subscriber::create();
|
$subscriber = new SubscriberEntity();
|
||||||
$subscriber->email = 'test@example.com';
|
$subscriber->setEmail('test@example.com');
|
||||||
$subscriber->firstName = 'First';
|
$subscriber->setFirstName('First');
|
||||||
$subscriber->lastName = 'Last';
|
$subscriber->setLastName('Last');
|
||||||
$this->subscriber = $subscriber->save();
|
$this->subscribersRepository->persist($subscriber);
|
||||||
|
$this->subscribersRepository->flush();
|
||||||
|
$this->subscriber = $subscriber;
|
||||||
|
|
||||||
// create queue
|
// create queue
|
||||||
$queue = SendingTask::create();
|
$queue = SendingTask::create();
|
||||||
$queue->newsletterId = $newsletter->id;
|
$queue->newsletterId = $newsletter->id;
|
||||||
$queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithoutTracking;
|
$queue->newsletterRenderedBody = $this->queueRenderedNewsletterWithoutTracking;
|
||||||
$queue->setSubscribers([$subscriber->id]);
|
$queue->setSubscribers([$subscriber->getId()]);
|
||||||
$this->sendingTask = $queue->save();
|
$this->sendingTask = $queue->save();
|
||||||
|
|
||||||
// create newsletter link associations
|
// create newsletter link associations
|
||||||
|
@ -10,6 +10,7 @@ use MailPoet\Segments\WP;
|
|||||||
use MailPoet\Settings\SettingsController;
|
use MailPoet\Settings\SettingsController;
|
||||||
use MailPoet\Subscribers\ConfirmationEmailMailer;
|
use MailPoet\Subscribers\ConfirmationEmailMailer;
|
||||||
use MailPoet\Subscribers\Source;
|
use MailPoet\Subscribers\Source;
|
||||||
|
use MailPoet\Subscribers\SubscribersRepository;
|
||||||
use MailPoet\WP\Functions as WPFunctions;
|
use MailPoet\WP\Functions as WPFunctions;
|
||||||
use MailPoetVendor\Idiorm\ORM;
|
use MailPoetVendor\Idiorm\ORM;
|
||||||
use PHPUnit\Framework\MockObject\MockObject;
|
use PHPUnit\Framework\MockObject\MockObject;
|
||||||
@ -49,8 +50,9 @@ class SubscriptionTest extends \MailPoetTest {
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
$subscribersRepository = $this->diContainer->get(SubscribersRepository::class);
|
||||||
$this->confirmationEmailMailer = $this->createMock(ConfirmationEmailMailer::class);
|
$this->confirmationEmailMailer = $this->createMock(ConfirmationEmailMailer::class);
|
||||||
$this->subscription = new Subscription($this->settings, $this->confirmationEmailMailer, $wp, $wcHelper);
|
$this->subscription = new Subscription($this->settings, $this->confirmationEmailMailer, $wp, $wcHelper, $subscribersRepository);
|
||||||
$this->wcSegment = Segment::getWooCommerceSegment();
|
$this->wcSegment = Segment::getWooCommerceSegment();
|
||||||
$this->wpSegment = $this->diContainer->get(WP::class);
|
$this->wpSegment = $this->diContainer->get(WP::class);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user