Skip to content

Commit 4966d5f

Browse files
author
silinmykola
committed
33040 add is subscription enabled checking to new action controller
1 parent 0a05fa3 commit 4966d5f

File tree

2 files changed

+63
-9
lines changed
  • app/code/Magento/Newsletter/Controller/Subscriber
  • dev/tests/integration/testsuite/Magento/Newsletter/Controller/Subscriber

2 files changed

+63
-9
lines changed

app/code/Magento/Newsletter/Controller/Subscriber/NewAction.php

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* Copyright © Magento, Inc. All rights reserved.
55
* See COPYING.txt for license details.
66
*/
7+
declare(strict_types=1);
8+
79
namespace Magento\Newsletter\Controller\Subscriber;
810

911
use Magento\Customer\Api\AccountManagementInterface as CustomerAccountManagement;
@@ -23,6 +25,7 @@
2325
use Magento\Newsletter\Model\SubscriptionManagerInterface;
2426
use Magento\Store\Model\ScopeInterface;
2527
use Magento\Store\Model\StoreManagerInterface;
28+
use Magento\Newsletter\Model\Config as NewsletterConfig;
2629
use Magento\Newsletter\Model\SubscriberFactory;
2730

2831
/**
@@ -42,6 +45,11 @@ class NewAction extends SubscriberController implements HttpPostActionInterface
4245
*/
4346
private $emailValidator;
4447

48+
/**
49+
* @var NewsletterConfig
50+
*/
51+
private $newsletterConfig;
52+
4553
/**
4654
* @var SubscriptionManagerInterface
4755
*/
@@ -57,7 +65,8 @@ class NewAction extends SubscriberController implements HttpPostActionInterface
5765
* @param CustomerUrl $customerUrl
5866
* @param CustomerAccountManagement $customerAccountManagement
5967
* @param SubscriptionManagerInterface $subscriptionManager
60-
* @param EmailValidator $emailValidator
68+
* @param EmailValidator|null $emailValidator
69+
* @param NewsletterConfig|null $newsletterConfig
6170
*/
6271
public function __construct(
6372
Context $context,
@@ -67,11 +76,13 @@ public function __construct(
6776
CustomerUrl $customerUrl,
6877
CustomerAccountManagement $customerAccountManagement,
6978
SubscriptionManagerInterface $subscriptionManager,
70-
EmailValidator $emailValidator = null
79+
EmailValidator $emailValidator = null,
80+
NewsletterConfig $newsletterConfig = null
7181
) {
7282
$this->customerAccountManagement = $customerAccountManagement;
7383
$this->subscriptionManager = $subscriptionManager;
7484
$this->emailValidator = $emailValidator ?: ObjectManager::getInstance()->get(EmailValidator::class);
85+
$this->newsletterConfig = $newsletterConfig?: ObjectManager::getInstance()->get(NewsletterConfig::class);
7586
parent::__construct(
7687
$context,
7788
$subscriberFactory,
@@ -85,8 +96,9 @@ public function __construct(
8596
* Validates that the email address isn't being used by a different account.
8697
*
8798
* @param string $email
88-
* @throws LocalizedException
99+
*
89100
* @return void
101+
* @throws LocalizedException
90102
*/
91103
protected function validateEmailAvailable($email)
92104
{
@@ -129,8 +141,9 @@ protected function validateGuestSubscription()
129141
* Validates the format of the email address
130142
*
131143
* @param string $email
132-
* @throws LocalizedException
144+
*
133145
* @return void
146+
* @throws LocalizedException
134147
*/
135148
protected function validateEmailFormat($email)
136149
{
@@ -146,7 +159,10 @@ protected function validateEmailFormat($email)
146159
*/
147160
public function execute()
148161
{
149-
if ($this->getRequest()->isPost() && $this->getRequest()->getPost('email')) {
162+
if ($this->getRequest()->isPost()
163+
&& $this->getRequest()->getPost('email')
164+
&& $this->newsletterConfig->isActive()
165+
) {
150166
$email = (string)$this->getRequest()->getPost('email');
151167

152168
try {
@@ -183,13 +199,15 @@ public function execute()
183199
/** @var Redirect $redirect */
184200
$redirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
185201
$redirectUrl = $this->_redirect->getRedirectUrl();
202+
186203
return $redirect->setUrl($redirectUrl);
187204
}
188205

189206
/**
190207
* Get customer id from session if he is owner of the email
191208
*
192209
* @param string $email
210+
*
193211
* @return int|null
194212
*/
195213
private function getSessionCustomerId(string $email): ?int
@@ -210,6 +228,7 @@ private function getSessionCustomerId(string $email): ?int
210228
* Get success message
211229
*
212230
* @param int $status
231+
*
213232
* @return Phrase
214233
*/
215234
private function getSuccessMessage(int $status): Phrase

dev/tests/integration/testsuite/Magento/Newsletter/Controller/Subscriber/NewActionTest.php

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77

88
namespace Magento\Newsletter\Controller\Subscriber;
99

10+
use Exception;
11+
use Laminas\Stdlib\Parameters;
1012
use Magento\Customer\Api\CustomerRepositoryInterface;
1113
use Magento\Customer\Model\Session;
1214
use Magento\Customer\Model\Url;
1315
use Magento\Framework\App\Request\Http as HttpRequest;
1416
use Magento\Newsletter\Model\ResourceModel\Subscriber as SubscriberResource;
1517
use Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory;
1618
use Magento\TestFramework\TestCase\AbstractController;
17-
use Laminas\Stdlib\Parameters;
1819

1920
/**
2021
* Class checks subscription behaviour from frontend
@@ -24,6 +25,9 @@
2425
*/
2526
class NewActionTest extends AbstractController
2627
{
28+
/** @var CustomerRepositoryInterface */
29+
private $customerRepository;
30+
2731
/** @var Session */
2832
private $session;
2933

@@ -36,9 +40,6 @@ class NewActionTest extends AbstractController
3640
/** @var string|null */
3741
private $subscriberToDelete;
3842

39-
/** @var CustomerRepositoryInterface */
40-
private $customerRepository;
41-
4243
/** @var Url */
4344
private $customerUrl;
4445

@@ -84,6 +85,38 @@ public function testNewAction(string $email, string $expectedMessage): void
8485
$this->performAsserts($expectedMessage);
8586
}
8687

88+
/**
89+
* @magentoConfigFixture newsletter/general/active 1
90+
*
91+
* @return void
92+
*/
93+
public function testNewActionWithSubscriptionConfigEnabled(): void
94+
{
95+
$email = 'good_subscription@example.com';
96+
$this->subscriberToDelete = $email;
97+
$this->prepareRequest($email);
98+
$this->dispatch('newsletter/subscriber/new');
99+
$subscriberCollection = $this->subscriberCollectionFactory->create();
100+
$subscriberCollection->addFieldToFilter('subscriber_email', $email)->setPageSize(1);
101+
$this->assertEquals(1, count($subscriberCollection));
102+
$this->assertEquals($email, $subscriberCollection->getFirstItem()->getEmail());
103+
}
104+
105+
/**
106+
* @magentoConfigFixture newsletter/general/active 0
107+
*
108+
* @return void
109+
*/
110+
public function testNewActionWithSubscriptionConfigDisabled(): void
111+
{
112+
$email = 'bad_subscription@example.com';
113+
$this->prepareRequest($email);
114+
$this->dispatch('newsletter/subscriber/new');
115+
$subscriberCollection = $this->subscriberCollectionFactory->create();
116+
$subscriberCollection->addFieldToFilter('subscriber_email', $email)->setPageSize(1);
117+
$this->assertEquals(0, count($subscriberCollection));
118+
}
119+
87120
/**
88121
* @return array
89122
*/
@@ -242,7 +275,9 @@ private function performAsserts(string $message): void
242275
* Delete subscribers by email
243276
*
244277
* @param string $email
278+
*
245279
* @return void
280+
* @throws Exception
246281
*/
247282
private function deleteSubscriber(string $email): void
248283
{

0 commit comments

Comments
 (0)