From 32cd4c36dd056e5b4b5c53ff79e20ebd2022e3b0 Mon Sep 17 00:00:00 2001 From: Mustapha Hadid Date: Fri, 27 Sep 2024 13:39:27 +0100 Subject: [PATCH] Strip service method to return raw responses A preliminary step to enable caching authorized emails data from the API --- .../Services/AuthorizedEmailsController.php | 17 +++++--- mailpoet/lib/Services/Bridge.php | 9 +--- .../integration/API/JSON/v1/SettingsTest.php | 6 +-- .../AuthorizedEmailsControllerTest.php | 43 ++++++++++--------- .../tests/integration/Services/BridgeTest.php | 25 +---------- 5 files changed, 40 insertions(+), 60 deletions(-) diff --git a/mailpoet/lib/Services/AuthorizedEmailsController.php b/mailpoet/lib/Services/AuthorizedEmailsController.php index 29cb393a1a..00f787784f 100644 --- a/mailpoet/lib/Services/AuthorizedEmailsController.php +++ b/mailpoet/lib/Services/AuthorizedEmailsController.php @@ -51,7 +51,7 @@ class AuthorizedEmailsController { } public function setFromEmailAddress(string $address) { - $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses() ?: []; + $authorizedEmails = $this->getAuthorizedEmailAddresses() ?: []; $verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache(); $isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $address); @@ -74,12 +74,17 @@ class AuthorizedEmailsController { $this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, null); } - public function getAllAuthorizedEmailAddress(): array { - return $this->bridge->getAuthorizedEmailAddresses(self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_ALL); + public function getAuthorizedEmailAddresses(string $type = 'authorized'): array { + $data = $this->bridge->getAuthorizedEmailAddresses(); + if ($data && $type === self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_ALL) { + return $data; + } + + return $data[$type] ?? []; } public function createAuthorizedEmailAddress(string $email): array { - $allEmails = $this->getAllAuthorizedEmailAddress(); + $allEmails = $this->getAuthorizedEmailAddresses(self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_ALL); $authorizedEmails = isset($allEmails[self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_AUTHORIZED]) ? $allEmails[self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_AUTHORIZED] : []; $isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $email); @@ -104,7 +109,7 @@ class AuthorizedEmailsController { } public function isEmailAddressAuthorized(string $email): bool { - $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses() ?: []; + $authorizedEmails = $this->getAuthorizedEmailAddresses() ?: []; return $this->validateAuthorizedEmail($authorizedEmails, $email); } @@ -115,7 +120,7 @@ class AuthorizedEmailsController { return null; } - $authorizedEmails = $this->bridge->getAuthorizedEmailAddresses(); + $authorizedEmails = $this->getAuthorizedEmailAddresses(); // Keep previous check result for an invalid response from API if (!$authorizedEmails) { return null; diff --git a/mailpoet/lib/Services/Bridge.php b/mailpoet/lib/Services/Bridge.php index 8c140b239a..0f744c19ab 100644 --- a/mailpoet/lib/Services/Bridge.php +++ b/mailpoet/lib/Services/Bridge.php @@ -133,15 +133,10 @@ class Bridge { return $this->initApi($key); } - public function getAuthorizedEmailAddresses($type = 'authorized'): array { - $data = $this + public function getAuthorizedEmailAddresses(): ?array { + return $this ->getApi($this->settings->get(self::API_KEY_SETTING_NAME)) ->getAuthorizedEmailAddresses(); - if ($data && $type === 'all') { - return $data; - } - - return $data[$type] ?? []; } /** diff --git a/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php b/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php index b7c3f28a71..4af0b29cf9 100644 --- a/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php +++ b/mailpoet/tests/integration/API/JSON/v1/SettingsTest.php @@ -131,7 +131,7 @@ class SettingsTest extends \MailPoetTest { } public function testItSetsAuthorizedFromAddressAndResumesSending() { - $bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized@email.com'])]); + $bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['authorized@email.com']])]); $senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class); $this->endpoint = new Settings( $this->settings, @@ -162,7 +162,7 @@ class SettingsTest extends \MailPoetTest { public function testItSaveUnauthorizedAddressAndReturnsMeta() { $this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]); - $bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized@email.com'])]); + $bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['authorized@email.com']])]); $senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class); $this->endpoint = new Settings( $this->settings, @@ -195,7 +195,7 @@ class SettingsTest extends \MailPoetTest { } public function testItRejectsUnauthorizedFromAddress() { - $bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized@email.com'])]); + $bridgeMock = $this->make(Bridge::class, ['getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['authorized@email.com']])]); $senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class); $this->endpoint = new Settings( $this->settings, diff --git a/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php b/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php index c62efff34c..005f09910e 100644 --- a/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php +++ b/mailpoet/tests/integration/Services/AuthorizedEmailsControllerTest.php @@ -42,7 +42,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', '2018-03-04'); $this->settings->set('sender.address', 'invalid@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); verify($this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING))->equals(['invalid_sender_address' => 'invalid@email.com']); } @@ -51,7 +51,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', new Carbon()); $this->settings->set('sender.address', 'invalid@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); verify($this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING))->equals(['invalid_sender_address' => 'invalid@email.com']); } @@ -60,7 +60,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', new Carbon()); $this->settings->set('sender.address', 'auth@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); verify($this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING))->null(); } @@ -70,9 +70,8 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('sender.address', 'not-valid-auth@email.com'); $this->setMailPoetSendingMethod(); - $authorizedEmails = ['auth@email.com']; $bridgeMock = $this->make(Bridge::class, [ - 'getAuthorizedEmailAddresses' => Expected::once($authorizedEmails), + 'getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['auth@email.com']]), ]); $verifiedDomains = ['email.com']; @@ -117,7 +116,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', new Carbon()); $this->settings->set('sender.address', 'auth@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); $error = $this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING); verify($error)->null(); @@ -129,7 +128,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', new Carbon()); $this->settings->set('sender.address', 'auth@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); $error = MailerLog::getError(); verify($error)->null(); @@ -142,9 +141,8 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('sender.address', 'invalid@email.com'); $this->setMailPoetSendingMethod(); - $authorizedEmails = ['auth@email.com']; $bridgeMock = $this->make(Bridge::class, [ - 'getAuthorizedEmailAddresses' => Expected::once($authorizedEmails), + 'getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['auth@email.com']]), ]); $verifiedDomains = ['email.com']; @@ -170,7 +168,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', new Carbon()); $this->settings->set('sender.address', 'auth@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); $error = MailerLog::getError(); expect(is_array($error)); @@ -185,7 +183,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', new Carbon()); $this->settings->set('sender.address', 'invalid@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); $error = MailerLog::getError(); expect(is_array($error)); @@ -205,7 +203,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->settings->set('installed_at', new Carbon()); $this->settings->set('sender.address', 'auth@email.com'); $this->setMailPoetSendingMethod(); - $controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); + $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]); $controller->checkAuthorizedEmailAddresses(); $error = $this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING); verify(count($error['invalid_senders_in_newsletters']))->equals(1); @@ -216,7 +214,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { public function testItSetsFromAddressInSettings() { $this->settings->set('sender.address', ''); - $controller = $this->getController(['authorized@email.com']); + $controller = $this->getController(['authorized' => ['authorized@email.com']]); $controller->setFromEmailAddress('authorized@email.com'); verify($this->settings->get('sender.address'))->same('authorized@email.com'); } @@ -224,12 +222,17 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { public function testItSetsFromAddressInSettingsWhenDomainIsVerified() { $this->settings->set('sender.address', ''); + $bridgeMock = $this->make(Bridge::class, [ + 'getAuthorizedEmailAddresses' => Expected::once(['authorized' => []]), + ]); + $verifiedDomains = ['email.com']; $senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [ 'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains), ]); $mocks = [ + 'Bridge' => $bridgeMock, 'AuthorizedSenderDomainController' => $senderDomainMock, ]; $controller = $this->getControllerWithCustomMocks($mocks); @@ -373,7 +376,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->entityManager->flush(); $this->settings->set('sender.address', ''); - $controller = $this->getController(['authorized@email.com']); + $controller = $this->getController(['authorized' => ['authorized@email.com']]); $controller->setFromEmailAddress('authorized@email.com'); verify($newsletter->getSenderAddress())->same('authorized@email.com'); @@ -392,7 +395,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->entityManager->flush(); $this->settings->set('sender.address', ''); - $controller = $this->getController(['authorized@email.com']); + $controller = $this->getController(['authorized' => ['authorized@email.com']]); $controller->setFromEmailAddress('authorized@email.com'); verify($newsletter->getSenderAddress())->same('authorized@email.com'); @@ -411,7 +414,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { $this->entityManager->flush(); $this->settings->set('sender.address', ''); - $controller = $this->getController(['authorized@email.com']); + $controller = $this->getController(['authorized' => ['authorized@email.com']]); $controller->setFromEmailAddress('authorized@email.com'); verify($newsletter->getSenderAddress())->same('invalid@email.com'); @@ -423,7 +426,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { public function testSetsFromAddressThrowsForUnauthorizedEmail() { $this->expectException(InvalidArgumentException::class); $this->expectExceptionMessage("Email address 'invalid@email.com' is not authorized"); - $controller = $this->getController(['authorized@email.com']); + $controller = $this->getController(['authorized' => ['authorized@email.com']]); $controller->setFromEmailAddress('invalid@email.com'); } @@ -490,15 +493,13 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest { } public function testItReturnsTrueWhenAuthorizedForIsEmailAddressAuthorized() { - $array = ['authorized@email.com']; - $controller = $this->getController($array); + $controller = $this->getController(['authorized' => ['authorized@email.com']]); $result = $controller->isEmailAddressAuthorized('authorized@email.com'); verify($result)->equals(true); } public function testItReturnsFalseWhenNotAuthorizedForIsEmailAddressAuthorized() { - $array = ['authorized@email.com']; - $controller = $this->getController($array); + $controller = $this->getController(['authorized' => ['authorized@email.com']]); $result = $controller->isEmailAddressAuthorized('pending@email.com'); verify($result)->equals(false); } diff --git a/mailpoet/tests/integration/Services/BridgeTest.php b/mailpoet/tests/integration/Services/BridgeTest.php index b177cf482d..e63014cd35 100644 --- a/mailpoet/tests/integration/Services/BridgeTest.php +++ b/mailpoet/tests/integration/Services/BridgeTest.php @@ -262,19 +262,6 @@ class BridgeTest extends \MailPoetTest { $wp->removeFilter('mailpoet_bridge_api_request_timeout', $filter); } - public function testItReturnsOnlyAuthorizedEmails() { - $array = [ - 'pending' => ['pending@email.com'], - 'authorized' => ['authorized@email.com'], - 'main' => 'main@email.com', - ]; - $api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => $array], $this); - $this->bridge->api = $api; - - $result = $this->bridge->getAuthorizedEmailAddresses(); - verify($result)->same(['authorized@email.com']); - } - public function testItReturnsAllUserEmails() { $array = [ 'pending' => ['pending@email.com'], @@ -284,7 +271,7 @@ class BridgeTest extends \MailPoetTest { $api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => $array], $this); $this->bridge->api = $api; - $result = $this->bridge->getAuthorizedEmailAddresses('all'); + $result = $this->bridge->getAuthorizedEmailAddresses(); verify($result)->same($array); } @@ -292,7 +279,7 @@ class BridgeTest extends \MailPoetTest { $api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => []], $this); $this->bridge->api = $api; - $result = $this->bridge->getAuthorizedEmailAddresses('all'); + $result = $this->bridge->getAuthorizedEmailAddresses(); verify($result)->same([]); } @@ -304,14 +291,6 @@ class BridgeTest extends \MailPoetTest { verify($result)->same([]); } - public function testItReturnsAnEmptyArrayIfNoNullForAuthorizedParam() { - $api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => null], $this); - $this->bridge->api = $api; - - $result = $this->bridge->getAuthorizedEmailAddresses(); - verify($result)->same([]); - } - public function testItReturnsTheRightDataForSenderDomains() { // when API returns null $api = Stub::make(new API(null), ['getAuthorizedSenderDomains' => null], $this);