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