Modify the check for sender address

to implement rule for existing campaigns.

[MAILPOET-5832]
This commit is contained in:
Brezo Cordero
2024-01-17 16:03:58 -06:00
committed by Aschepikov
parent 56556493fe
commit ab23a01423
4 changed files with 33 additions and 12 deletions

View File

@ -193,7 +193,7 @@ class Newsletters extends APIEndpoint {
]);
}
if ($status === NewsletterEntity::STATUS_ACTIVE && !$this->authorizedEmailsController->isSenderAddressValidForActivation($newsletter)) {
if ($status === NewsletterEntity::STATUS_ACTIVE && !$this->authorizedEmailsController->isSenderAddressValid($newsletter)) {
return $this->errorResponse([
APIError::FORBIDDEN => __('The sender address is not an authorized sender domain.', 'mailpoet'),
], [], Response::STATUS_FORBIDDEN);

View File

@ -153,16 +153,16 @@ class AuthorizedEmailsController {
}
}
public function isSenderAddressValidForActivation(NewsletterEntity $newsletter): bool {
if ($this->settings->get('mta.method') !== Mailer::METHOD_MAILPOET) {
return true;
}
public function isSenderAddressValid(NewsletterEntity $newsletter, string $context = 'activation'): bool {
if (!in_array($newsletter->getType(), NewsletterEntity::CAMPAIGN_TYPES)) {
return true;
}
if (!$this->senderDomainController->isAuthorizedDomainRequiredForNewCampaigns()) {
$isAuthorizedDomainRequired = $context === 'activation' ?
$this->senderDomainController->isAuthorizedDomainRequiredForNewCampaigns() :
$this->senderDomainController->isAuthorizedDomainRequiredForExistingCampaigns();
if (!$isAuthorizedDomainRequired) {
return true;
}

View File

@ -236,7 +236,7 @@ class NewslettersTest extends \MailPoetTest {
'cronHelper' => $this->cronHelper,
'subscribersFeature' => Stub::make(Subscribers::class, ['check' => true]),
'authorizedEmailsController' => Stub::make(AuthorizedEmailsController::class, [
'isSenderAddressValidForActivation' => Expected::once(false),
'isSenderAddressValid' => Expected::once(false),
]),
]);
$res = $endpoint->setStatus([

View File

@ -255,7 +255,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
'AuthorizedSenderDomainController' => $senderDomainMock,
];
$controller = $this->getControllerWithCustomMocks($mocks);
verify($controller->isSenderAddressValidForActivation($newsletter))->false();
verify($controller->isSenderAddressValid($newsletter))->false();
}
public function testSenderAddressIsValidForActivationIfRestrictionsApplyAndAuthorizedSender() {
@ -276,7 +276,28 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
'AuthorizedSenderDomainController' => $senderDomainMock,
];
$controller = $this->getControllerWithCustomMocks($mocks);
verify($controller->isSenderAddressValidForActivation($newsletter))->true();
verify($controller->isSenderAddressValid($newsletter))->true();
}
public function testSenderAddressIsValidForSendingIfRestrictionsApplyAndAuthorizedSender() {
$this->settings->set('mta.method', Mailer::METHOD_MAILPOET);
$verifiedDomains = ['email.com'];
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
'isAuthorizedDomainRequiredForExistingCampaigns' => Expected::once(true),
'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
]);
$newsletter = new NewsletterEntity();
$newsletter->setSubject('Subject');
$newsletter->setType(NewsletterEntity::TYPE_STANDARD);
$newsletter->setStatus(NewsletterEntity::STATUS_DRAFT);
$newsletter->setSenderAddress('contact@email.com');
$mocks = [
'AuthorizedSenderDomainController' => $senderDomainMock,
];
$controller = $this->getControllerWithCustomMocks($mocks);
verify($controller->isSenderAddressValid($newsletter, 'sending'))->true();
}
public function testSenderAddressIsValidForActivationIfNotACampaign() {
@ -297,7 +318,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
'AuthorizedSenderDomainController' => $senderDomainMock,
];
$controller = $this->getControllerWithCustomMocks($mocks);
verify($controller->isSenderAddressValidForActivation($newsletter))->true();
verify($controller->isSenderAddressValid($newsletter))->true();
}
public function testSenderAddressIsValidForActivationIfRestrictionsDoNotApply() {
@ -318,7 +339,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
'AuthorizedSenderDomainController' => $senderDomainMock,
];
$controller = $this->getControllerWithCustomMocks($mocks);
verify($controller->isSenderAddressValidForActivation($newsletter))->true();
verify($controller->isSenderAddressValid($newsletter))->true();
}
public function testItSetsFromAddressInScheduledEmails() {