From f7b77cf75d2c1d168ffcb9d0dc2ef0f413637a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lys=C3=BD?= Date: Tue, 1 Jun 2021 20:15:20 +0200 Subject: [PATCH] Remove FormRepository from SettingsController [MAILPOET-3643] --- lib/API/JSON/v1/Settings.php | 8 +++- lib/DI/ContainerConfigurator.php | 1 + lib/Settings/SettingsController.php | 35 +---------------- tests/DataFactories/Form.php | 12 +++--- tests/_support/AcceptanceTester.php | 8 ++-- .../integration/API/JSON/v1/SettingsTest.php | 5 +++ tests/integration/Models/FormTest.php | 9 ++++- .../Settings/SettingsControllerTest.php | 38 ------------------- 8 files changed, 31 insertions(+), 85 deletions(-) diff --git a/lib/API/JSON/v1/Settings.php b/lib/API/JSON/v1/Settings.php index e1e13e933b..4b7b4c26c1 100644 --- a/lib/API/JSON/v1/Settings.php +++ b/lib/API/JSON/v1/Settings.php @@ -10,6 +10,7 @@ use MailPoet\Cron\Workers\InactiveSubscribers; use MailPoet\Cron\Workers\SubscribersEngagementScore; use MailPoet\Cron\Workers\WooCommerceSync; use MailPoet\Entities\ScheduledTaskEntity; +use MailPoet\Form\FormMessageController; use MailPoet\Mailer\MailerLog; use MailPoet\Newsletter\Sending\ScheduledTasksRepository; use MailPoet\Services\AuthorizedEmailsController; @@ -50,6 +51,9 @@ class Settings extends APIEndpoint { /** @var ScheduledTasksRepository */ private $scheduledTasksRepository; + /** @var FormMessageController */ + private $messageController; + public $permissions = [ 'global' => AccessControl::PERMISSION_MANAGE_SETTINGS, ]; @@ -63,6 +67,7 @@ class Settings extends APIEndpoint { EntityManager $entityManager, StatisticsOpensRepository $statisticsOpensRepository, ScheduledTasksRepository $scheduledTasksRepository, + FormMessageController $messageController, ServicesChecker $servicesChecker ) { $this->settings = $settings; @@ -74,6 +79,7 @@ class Settings extends APIEndpoint { $this->entityManager = $entityManager; $this->statisticsOpensRepository = $statisticsOpensRepository; $this->scheduledTasksRepository = $scheduledTasksRepository; + $this->messageController = $messageController; } public function get() { @@ -103,7 +109,7 @@ class Settings extends APIEndpoint { $this->authorizedEmailsController->onSettingsSave($settings); if ($signupConfirmation !== $this->settings->get('signup_confirmation.enabled')) { - $this->settings->updateSuccessMessages(); + $this->messageController->updateSuccessMessages(); } return $this->successResponse($this->settings->getAll()); } diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index 43395b8464..1e5b1ad20d 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -203,6 +203,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\Form\Block\Textarea::class); $container->autowire(\MailPoet\Form\FormFactory::class)->setPublic(true); $container->autowire(\MailPoet\Form\FormHtmlSanitizer::class)->setPublic(true); + $container->autowire(\MailPoet\Form\FormMessageController::class)->setPublic(true); $container->autowire(\MailPoet\Form\FormSaveController::class)->setPublic(true); $container->autowire(\MailPoet\Form\Listing\FormListingRepository::class)->setPublic(true); $container->autowire(\MailPoet\Form\PreviewPage::class); diff --git a/lib/Settings/SettingsController.php b/lib/Settings/SettingsController.php index 0005cac0c4..9957cc9135 100644 --- a/lib/Settings/SettingsController.php +++ b/lib/Settings/SettingsController.php @@ -4,8 +4,6 @@ namespace MailPoet\Settings; use MailPoet\Cron\CronTrigger; use MailPoet\DI\ContainerWrapper; -use MailPoet\Entities\FormEntity; -use MailPoet\Form\FormsRepository; use MailPoet\WP\Functions as WPFunctions; class SettingsController { @@ -25,17 +23,12 @@ class SettingsController { /** @var SettingsRepository */ private $settingsRepository; - /** @var FormsRepository */ - private $formsRepository; - private static $instance; public function __construct( - SettingsRepository $settingsRepository, - FormsRepository $formsRepository + SettingsRepository $settingsRepository ) { $this->settingsRepository = $settingsRepository; - $this->formsRepository = $formsRepository; } public function get($key, $default = null) { @@ -131,32 +124,6 @@ class SettingsController { unset($this->settings[$key]); } - public function updateSuccessMessages(): void { - $rightMessage = $this->getDefaultSuccessMessage(); - $wrongMessage = ( - $rightMessage === __('Check your inbox or spam folder to confirm your subscription.', 'mailpoet') - ? __('You’ve been successfully subscribed to our newsletter!', 'mailpoet') - : __('Check your inbox or spam folder to confirm your subscription.', 'mailpoet') - ); - /** @var FormEntity[] $forms */ - $forms = $this->formsRepository->findAll(); - foreach ($forms as $form) { - $settings = $form->getSettings(); - if (isset($settings['success_message']) && $settings['success_message'] === $wrongMessage) { - $settings['success_message'] = $rightMessage; - $form->setSettings($settings); - $this->settingsRepository->flush(); - } - } - } - - public function getDefaultSuccessMessage(): string { - if ($this->get('signup_confirmation.enabled')) { - return __('Check your inbox or spam folder to confirm your subscription.', 'mailpoet'); - } - return __('You’ve been successfully subscribed to our newsletter!', 'mailpoet'); - } - private function ensureLoaded() { if ($this->loaded) { return; diff --git a/tests/DataFactories/Form.php b/tests/DataFactories/Form.php index dde55ee74f..44c09efc32 100644 --- a/tests/DataFactories/Form.php +++ b/tests/DataFactories/Form.php @@ -4,25 +4,25 @@ namespace MailPoet\Test\DataFactories; use MailPoet\DI\ContainerWrapper; use MailPoet\Entities\SegmentEntity; +use MailPoet\Form\FormMessageController; use MailPoet\Models\Form as FormModel; -use MailPoet\Settings\SettingsController; use MailPoetVendor\Carbon\Carbon; class Form { - /** @var SettingsController */ - private $settingsController; + /** @var FormMessageController */ + private $messageController; private $data; public function __construct() { - $this->settingsController = ContainerWrapper::getInstance()->get(SettingsController::class); + $this->messageController = ContainerWrapper::getInstance()->get(FormMessageController::class); $this->data = [ 'name' => 'New form', 'body' => 'a:2:{i:0;a:5:{s:2:"id";s:5:"email";s:4:"name";s:5:"Email";s:4:"type";s:4:"text";s:6:"static";b:1;s:6:"params";a:2:{s:5:"label";s:5:"Email";s:8:"required";b:1;}}i:1;a:5:{s:2:"id";s:6:"submit";s:4:"name";s:6:"Submit";s:4:"type";s:6:"submit";s:6:"static";b:1;s:6:"params";a:1:{s:5:"label";s:10:"Subscribe!";}}}', 'settings' => [ 'on_success' => 'message', - 'success_message' => $this->settingsController->getDefaultSuccessMessage(), + 'success_message' => $this->messageController->getDefaultSuccessMessage(), 'segments' => [2], 'segments_selected_by' => 'admin', ], @@ -131,7 +131,7 @@ class Form { } public function withDefaultSuccessMessage() { - $this->settingsController->updateSuccessMessages(); + $this->messageController->updateSuccessMessages(); } /** diff --git a/tests/_support/AcceptanceTester.php b/tests/_support/AcceptanceTester.php index 473eca9030..b0e600d1a6 100644 --- a/tests/_support/AcceptanceTester.php +++ b/tests/_support/AcceptanceTester.php @@ -3,7 +3,7 @@ use Facebook\WebDriver\Exception\UnrecognizedExceptionException; use Facebook\WebDriver\WebDriverKeys; use MailPoet\DI\ContainerWrapper; -use MailPoet\Settings\SettingsController; +use MailPoet\Form\FormMessageController; use MailPoet\Test\DataFactories\Form; use MailPoet\Test\DataFactories\Segment; use MailPoet\Test\DataFactories\Subscriber; @@ -177,13 +177,13 @@ class AcceptanceTester extends \Codeception\Actor { $i->cli(['widget', 'add', 'mailpoet_form', 'sidebar-1', '2', "--form=$form->id", '--title=Subscribe to Our Newsletter']); // subscribe - /** @var SettingsController $settingsController */ - $settingsController = ContainerWrapper::getInstance()->get(SettingsController::class); + /** @var FormMessageController $messageController */ + $messageController = ContainerWrapper::getInstance()->get(FormMessageController::class); $i->amOnUrl(self::WP_URL); $i->fillField('[data-automation-id="form_email"]', 'subscriber@example.com'); $i->click('[data-automation-id="subscribe-submit-button"]'); - $i->waitForText($settingsController->getDefaultSuccessMessage(), 30, '.mailpoet_validate_success'); + $i->waitForText($messageController->getDefaultSuccessMessage(), 30, '.mailpoet_validate_success'); $i->seeNoJSErrors(); } diff --git a/tests/integration/API/JSON/v1/SettingsTest.php b/tests/integration/API/JSON/v1/SettingsTest.php index 04a1fe0eb7..c0ac3a065c 100644 --- a/tests/integration/API/JSON/v1/SettingsTest.php +++ b/tests/integration/API/JSON/v1/SettingsTest.php @@ -10,6 +10,7 @@ use MailPoet\Config\ServicesChecker; use MailPoet\Cron\Workers\InactiveSubscribers; use MailPoet\Cron\Workers\WooCommerceSync; use MailPoet\Entities\ScheduledTaskEntity; +use MailPoet\Form\FormMessageController; use MailPoet\Mailer\MailerLog; use MailPoet\Models\ScheduledTask; use MailPoet\Newsletter\NewslettersRepository; @@ -51,6 +52,7 @@ class SettingsTest extends \MailPoetTest { $this->diContainer->get(EntityManager::class), $this->diContainer->get(StatisticsOpensRepository::class), $this->diContainer->get(ScheduledTasksRepository::class), + $this->diContainer->get(FormMessageController::class), $this->make(ServicesChecker::class, ['isMailPoetAPIKeyPendingApproval' => false]) ); } @@ -88,6 +90,7 @@ class SettingsTest extends \MailPoetTest { $this->diContainer->get(EntityManager::class), $this->diContainer->get(StatisticsOpensRepository::class), $this->diContainer->get(ScheduledTasksRepository::class), + $this->diContainer->get(FormMessageController::class), $this->make(ServicesChecker::class, ['isMailPoetAPIKeyPendingApproval' => false]) ); @@ -116,6 +119,7 @@ class SettingsTest extends \MailPoetTest { $this->diContainer->get(EntityManager::class), $this->diContainer->get(StatisticsOpensRepository::class), $this->diContainer->get(ScheduledTasksRepository::class), + $this->diContainer->get(FormMessageController::class), $this->make(ServicesChecker::class, ['isMailPoetAPIKeyPendingApproval' => false]) ); @@ -138,6 +142,7 @@ class SettingsTest extends \MailPoetTest { $this->diContainer->get(EntityManager::class), $this->diContainer->get(StatisticsOpensRepository::class), $this->diContainer->get(ScheduledTasksRepository::class), + $this->diContainer->get(FormMessageController::class), $this->make(ServicesChecker::class) ); diff --git a/tests/integration/Models/FormTest.php b/tests/integration/Models/FormTest.php index a22de6beb0..3e6f4ccd92 100644 --- a/tests/integration/Models/FormTest.php +++ b/tests/integration/Models/FormTest.php @@ -2,6 +2,7 @@ namespace MailPoet\Test\Models; +use MailPoet\Form\FormMessageController; use MailPoet\Models\Form; use MailPoet\Settings\SettingsController; @@ -10,9 +11,13 @@ class FormTest extends \MailPoetTest { /** @var SettingsController */ private $settings; + /** @var FormMessageController */ + private $messageController; + public function _before() { parent::_before(); $this->settings = SettingsController::getInstance(); + $this->messageController = $this->diContainer->get(FormMessageController::class); $this->form = Form::createOrUpdate([ 'name' => 'My Form', ]); @@ -153,7 +158,7 @@ class FormTest extends \MailPoetTest { 'settings' => ['success_message' => 'Thanks for joining us!'], ]); $this->settings->set('signup_confirmation.enabled', '0'); - $this->settings->updateSuccessMessages(); + $this->messageController->updateSuccessMessages(); $default = Form::findOne($default->id); $custom = Form::findOne($custom->id); assert($default instanceof Form); @@ -174,7 +179,7 @@ class FormTest extends \MailPoetTest { 'settings' => ['success_message' => 'Thanks for joining us!'], ]); $this->settings->set('signup_confirmation.enabled', '1'); - $this->settings->updateSuccessMessages(); + $this->messageController->updateSuccessMessages(); $default = Form::findOne($default->id); $custom = Form::findOne($custom->id); assert($default instanceof Form); diff --git a/tests/integration/Settings/SettingsControllerTest.php b/tests/integration/Settings/SettingsControllerTest.php index e23ddeaef4..81ed0b3048 100644 --- a/tests/integration/Settings/SettingsControllerTest.php +++ b/tests/integration/Settings/SettingsControllerTest.php @@ -3,9 +3,7 @@ namespace MailPoet\Test\Settings; use Codeception\Stub; -use MailPoet\Entities\FormEntity; use MailPoet\Entities\SettingEntity; -use MailPoet\Form\FormsRepository; use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsRepository; @@ -14,13 +12,9 @@ class SettingsControllerTest extends \MailPoetTest { /** @var SettingsController */ private $controller; - /** @var FormsRepository */ - private $formsReposittory; - public function _before() { parent::_before(); $this->controller = $this->diContainer->get(SettingsController::class); - $this->formsReposittory = $this->diContainer->get(FormsRepository::class); $this->clear(); } @@ -121,40 +115,8 @@ class SettingsControllerTest extends \MailPoetTest { $this->assertEquals(true, true); } - public function testItReturnsCorrectSuccessMessage(): void { - $this->controller->set('signup_confirmation.enabled', 1); - expect($this->controller->getDefaultSuccessMessage())->equals(__('Check your inbox or spam folder to confirm your subscription.', 'mailpoet')); - $this->controller->set('signup_confirmation.enabled', 0); - expect($this->controller->getDefaultSuccessMessage())->equals(__('You’ve been successfully subscribed to our newsletter!', 'mailpoet')); - } - - public function testItUpdatesSuccessMessagesForForms(): void { - $this->controller->set('signup_confirmation.enabled', 1); - $form = new FormEntity('test form'); - $form->setSettings(['success_message' => __('Check your inbox or spam folder to confirm your subscription.', 'mailpoet')]); - $this->entityManager->persist($form); - $this->entityManager->flush(); - - $this->controller->set('signup_confirmation.enabled', 0); - $this->controller->updateSuccessMessages(); - $forms = $this->formsReposittory->findAll(); - expect($forms)->count(1); - foreach ($forms as $form) { - expect($form->getSettings()['success_message'] ?? null)->equals(__('You’ve been successfully subscribed to our newsletter!', 'mailpoet')); - } - - $this->controller->set('signup_confirmation.enabled', 1); - $this->controller->updateSuccessMessages(); - $forms = $this->formsReposittory->findAll(); - expect($forms)->count(1); - foreach ($forms as $form) { - expect($form->getSettings()['success_message'] ?? null)->equals(__('Check your inbox or spam folder to confirm your subscription.', 'mailpoet')); - } - } - private function clear() { $this->truncateEntity(SettingEntity::class); - $this->truncateEntity(FormEntity::class); } public function _after() {