diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 83d7543473..2d1f160e31 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -169,7 +169,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Features\FeatureFlagsRepository::class)->setPublic(true); // Form $container->autowire(\MailPoet\Form\Util\FieldNameObfuscator::class)->setPublic(true); - $container->autowire(\MailPoet\Form\AssetsController::class); + $container->autowire(\MailPoet\Form\AssetsController::class)->setPublic(true); $container->autowire(\MailPoet\Form\DisplayFormInWPContent::class); $container->autowire(\MailPoet\Form\FormsRepository::class); $container->autowire(\MailPoet\Form\Renderer::class)->setPublic(true); @@ -180,7 +180,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Form\Block\Column::class); $container->autowire(\MailPoet\Form\Block\Columns::class); $container->autowire(\MailPoet\Form\Block\Checkbox::class); - $container->autowire(\MailPoet\Form\Block\Date::class); + $container->autowire(\MailPoet\Form\Block\Date::class)->setPublic(true); $container->autowire(\MailPoet\Form\Block\Divider::class); $container->autowire(\MailPoet\Form\Block\Html::class); $container->autowire(\MailPoet\Form\Block\Heading::class); @@ -258,13 +258,13 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Subscription\Pages::class)->setPublic(true) ->setShared(false); // Get a new instance each time $container->get() is called, needed for tests $container->autowire(\MailPoet\Subscription\Registration::class)->setPublic(true); - $container->autowire(\MailPoet\Subscription\SubscriptionUrlFactory::class); + $container->autowire(\MailPoet\Subscription\SubscriptionUrlFactory::class)->setPublic(true); // Newsletter $container->autowire(\MailPoet\Newsletter\AutomatedLatestContent::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\NewslettersRepository::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\Listing\NewsletterListingRepository::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository::class); - $container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class); + $container->autowire(\MailPoet\Newsletter\Scheduler\WelcomeScheduler::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\Scheduler\PostNotificationScheduler::class); $container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserController::class)->setPublic(true); $container->autowire(\MailPoet\Newsletter\ViewInBrowser\ViewInBrowserRenderer::class)->setPublic(true); diff --git a/tests/integration/Subscription/PagesTest.php b/tests/integration/Subscription/PagesTest.php index e741a61c25..b142b14098 100644 --- a/tests/integration/Subscription/PagesTest.php +++ b/tests/integration/Subscription/PagesTest.php @@ -5,6 +5,9 @@ namespace MailPoet\Test\Subscription; use Codeception\Stub; use Codeception\Util\Fixtures; use MailPoet\DI\ContainerWrapper; +use MailPoet\Form\AssetsController; +use MailPoet\Form\Block\Date as FormBlockDate; +use MailPoet\Form\Renderer as FormRenderer; use MailPoet\Models\Newsletter; use MailPoet\Models\NewsletterOption; use MailPoet\Models\NewsletterOptionField; @@ -13,15 +16,19 @@ use MailPoet\Models\Segment; use MailPoet\Models\SendingQueue; use MailPoet\Models\Subscriber; use MailPoet\Models\SubscriberSegment; +use MailPoet\Newsletter\Scheduler\WelcomeScheduler; +use MailPoet\Settings\SettingsController; use MailPoet\Subscribers\LinkTokens; use MailPoet\Subscribers\NewSubscriberNotificationMailer; +use MailPoet\Subscription\CaptchaRenderer; use MailPoet\Subscription\Pages; +use MailPoet\Subscription\SubscriptionUrlFactory; +use MailPoet\Util\Url as UrlHelper; +use MailPoet\WP\Functions as WPFunctions; use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Idiorm\ORM; class PagesTest extends \MailPoetTest { - public $pages; - private $testData = []; /** @var Subscriber */ @@ -37,12 +44,12 @@ class PagesTest extends \MailPoetTest { expect($this->subscriber->getErrors())->false(); $this->testData['email'] = $this->subscriber->email; $this->testData['token'] = $linkTokens->getToken($this->subscriber); - $this->pages = ContainerWrapper::getInstance()->get(Pages::class); } public function testItConfirmsSubscription() { - $newSubscriberNotificationSender = Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send' => Stub\Expected::once()]); - $subscription = $this->pages->init($action = false, $this->testData, false, false, $newSubscriberNotificationSender); + $newSubscriberNotificationSender = $this->makeEmpty(NewSubscriberNotificationMailer::class, ['send' => Stub\Expected::once()]); + $pages = $this->getPages($newSubscriberNotificationSender); + $subscription = $pages->init($action = false, $this->testData, false, false); $subscription->confirm(); $confirmedSubscriber = Subscriber::findOne($this->subscriber->id); expect($confirmedSubscriber->status)->equals(Subscriber::STATUS_SUBSCRIBED); @@ -51,17 +58,19 @@ class PagesTest extends \MailPoetTest { } public function testItDoesNotConfirmSubscriptionOnDuplicateAttempt() { - $newSubscriberNotificationSender = Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send' => Stub\Expected::once()]); + $newSubscriberNotificationSender = $this->makeEmpty(NewSubscriberNotificationMailer::class, ['send' => Stub\Expected::never()]); + $pages = $this->getPages($newSubscriberNotificationSender); $subscriber = $this->subscriber; $subscriber->status = Subscriber::STATUS_SUBSCRIBED; $subscriber->save(); - $subscription = $this->pages->init($action = false, $this->testData, false, false, $newSubscriberNotificationSender); + $subscription = $pages->init($action = false, $this->testData, false, false); expect($subscription->confirm())->false(); } public function testItSendsWelcomeNotificationUponConfirmingSubscription() { - $newSubscriberNotificationSender = Stub::makeEmpty(NewSubscriberNotificationMailer::class, ['send' => Stub\Expected::once()]); - $subscription = $this->pages->init($action = false, $this->testData, false, false, $newSubscriberNotificationSender); + $newSubscriberNotificationSender = $this->makeEmpty(NewSubscriberNotificationMailer::class, ['send' => Stub\Expected::once()]); + $pages = $this->getPages($newSubscriberNotificationSender); + $subscription = $pages->init($action = false, $this->testData, false, false); // create segment $segment = Segment::create(); $segment->hydrate(['name' => 'List #1']); @@ -114,7 +123,7 @@ class PagesTest extends \MailPoetTest { } public function testItUnsubscribes() { - $pages = $this->pages->init($action = 'unsubscribe', $this->testData); + $pages = $this->getPages()->init($action = 'unsubscribe', $this->testData); $pages->unsubscribe(); $updatedSubscriber = Subscriber::findOne($this->subscriber->id); expect($updatedSubscriber->status)->equals(Subscriber::STATUS_UNSUBSCRIBED); @@ -122,7 +131,7 @@ class PagesTest extends \MailPoetTest { public function testItDoesntUnsubscribeWhenPreviewing() { $this->testData['preview'] = 1; - $pages = $this->pages->init($action = 'unsubscribe', $this->testData); + $pages = $this->getPages()->init($action = 'unsubscribe', $this->testData); $pages->unsubscribe(); $updatedSubscriber = Subscriber::findOne($this->subscriber->id); expect($updatedSubscriber->status)->notEquals(Subscriber::STATUS_UNSUBSCRIBED); @@ -138,4 +147,21 @@ class PagesTest extends \MailPoetTest { ORM::raw_execute('TRUNCATE ' . NewsletterOption::$_table); ORM::raw_execute('TRUNCATE ' . NewsletterOptionField::$_table); } + + private function getPages(NewSubscriberNotificationMailer $newSubscriberNotificationsMock = null): Pages { + $container = ContainerWrapper::getInstance(); + return new Pages( + $newSubscriberNotificationsMock ?? $container->get(NewSubscriberNotificationMailer::class), + $container->get(WPFunctions::class), + $container->get(SettingsController::class), + $container->get(UrlHelper::class), + $container->get(CaptchaRenderer::class), + $container->get(WelcomeScheduler::class), + $container->get(LinkTokens::class), + $container->get(SubscriptionUrlFactory::class), + $container->get(AssetsController::class), + $container->get(FormRenderer::class), + $container->get(FormBlockDate::class) + ); + } }