Strip service method to return raw responses

A preliminary step to enable caching authorized emails data from the API
This commit is contained in:
Mustapha Hadid
2024-09-27 13:39:27 +01:00
committed by Aschepikov
parent f39339a7ac
commit 32cd4c36dd
5 changed files with 40 additions and 60 deletions

View File

@@ -51,7 +51,7 @@ class AuthorizedEmailsController {
} }
public function setFromEmailAddress(string $address) { public function setFromEmailAddress(string $address) {
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses() ?: []; $authorizedEmails = $this->getAuthorizedEmailAddresses() ?: [];
$verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache(); $verifiedDomains = $this->senderDomainController->getVerifiedSenderDomainsIgnoringCache();
$isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $address); $isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $address);
@@ -74,12 +74,17 @@ class AuthorizedEmailsController {
$this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, null); $this->settings->set(self::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING, null);
} }
public function getAllAuthorizedEmailAddress(): array { public function getAuthorizedEmailAddresses(string $type = 'authorized'): array {
return $this->bridge->getAuthorizedEmailAddresses(self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_ALL); $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 { 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] : []; $authorizedEmails = isset($allEmails[self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_AUTHORIZED]) ? $allEmails[self::AUTHORIZED_EMAIL_ADDRESSES_API_TYPE_AUTHORIZED] : [];
$isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $email); $isAuthorized = $this->validateAuthorizedEmail($authorizedEmails, $email);
@@ -104,7 +109,7 @@ class AuthorizedEmailsController {
} }
public function isEmailAddressAuthorized(string $email): bool { public function isEmailAddressAuthorized(string $email): bool {
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses() ?: []; $authorizedEmails = $this->getAuthorizedEmailAddresses() ?: [];
return $this->validateAuthorizedEmail($authorizedEmails, $email); return $this->validateAuthorizedEmail($authorizedEmails, $email);
} }
@@ -115,7 +120,7 @@ class AuthorizedEmailsController {
return null; return null;
} }
$authorizedEmails = $this->bridge->getAuthorizedEmailAddresses(); $authorizedEmails = $this->getAuthorizedEmailAddresses();
// Keep previous check result for an invalid response from API // Keep previous check result for an invalid response from API
if (!$authorizedEmails) { if (!$authorizedEmails) {
return null; return null;

View File

@@ -133,15 +133,10 @@ class Bridge {
return $this->initApi($key); return $this->initApi($key);
} }
public function getAuthorizedEmailAddresses($type = 'authorized'): array { public function getAuthorizedEmailAddresses(): ?array {
$data = $this return $this
->getApi($this->settings->get(self::API_KEY_SETTING_NAME)) ->getApi($this->settings->get(self::API_KEY_SETTING_NAME))
->getAuthorizedEmailAddresses(); ->getAuthorizedEmailAddresses();
if ($data && $type === 'all') {
return $data;
}
return $data[$type] ?? [];
} }
/** /**

View File

@@ -131,7 +131,7 @@ class SettingsTest extends \MailPoetTest {
} }
public function testItSetsAuthorizedFromAddressAndResumesSending() { 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); $senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class);
$this->endpoint = new Settings( $this->endpoint = new Settings(
$this->settings, $this->settings,
@@ -162,7 +162,7 @@ class SettingsTest extends \MailPoetTest {
public function testItSaveUnauthorizedAddressAndReturnsMeta() { public function testItSaveUnauthorizedAddressAndReturnsMeta() {
$this->settings->set(Mailer::MAILER_CONFIG_SETTING_NAME, ['method' => Mailer::METHOD_MAILPOET]); $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); $senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class);
$this->endpoint = new Settings( $this->endpoint = new Settings(
$this->settings, $this->settings,
@@ -195,7 +195,7 @@ class SettingsTest extends \MailPoetTest {
} }
public function testItRejectsUnauthorizedFromAddress() { 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); $senderDomainController = $this->diContainer->get(AuthorizedSenderDomainController::class);
$this->endpoint = new Settings( $this->endpoint = new Settings(
$this->settings, $this->settings,

View File

@@ -42,7 +42,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->settings->set('installed_at', '2018-03-04'); $this->settings->set('installed_at', '2018-03-04');
$this->settings->set('sender.address', 'invalid@email.com'); $this->settings->set('sender.address', 'invalid@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
verify($this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING))->equals(['invalid_sender_address' => 'invalid@email.com']); 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('installed_at', new Carbon());
$this->settings->set('sender.address', 'invalid@email.com'); $this->settings->set('sender.address', 'invalid@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
verify($this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING))->equals(['invalid_sender_address' => 'invalid@email.com']); 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('installed_at', new Carbon());
$this->settings->set('sender.address', 'auth@email.com'); $this->settings->set('sender.address', 'auth@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
verify($this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING))->null(); 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->settings->set('sender.address', 'not-valid-auth@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$authorizedEmails = ['auth@email.com'];
$bridgeMock = $this->make(Bridge::class, [ $bridgeMock = $this->make(Bridge::class, [
'getAuthorizedEmailAddresses' => Expected::once($authorizedEmails), 'getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['auth@email.com']]),
]); ]);
$verifiedDomains = ['email.com']; $verifiedDomains = ['email.com'];
@@ -117,7 +116,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->settings->set('installed_at', new Carbon()); $this->settings->set('installed_at', new Carbon());
$this->settings->set('sender.address', 'auth@email.com'); $this->settings->set('sender.address', 'auth@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
$error = $this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING); $error = $this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING);
verify($error)->null(); verify($error)->null();
@@ -129,7 +128,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->settings->set('installed_at', new Carbon()); $this->settings->set('installed_at', new Carbon());
$this->settings->set('sender.address', 'auth@email.com'); $this->settings->set('sender.address', 'auth@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
$error = MailerLog::getError(); $error = MailerLog::getError();
verify($error)->null(); verify($error)->null();
@@ -142,9 +141,8 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->settings->set('sender.address', 'invalid@email.com'); $this->settings->set('sender.address', 'invalid@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$authorizedEmails = ['auth@email.com'];
$bridgeMock = $this->make(Bridge::class, [ $bridgeMock = $this->make(Bridge::class, [
'getAuthorizedEmailAddresses' => Expected::once($authorizedEmails), 'getAuthorizedEmailAddresses' => Expected::once(['authorized' => ['auth@email.com']]),
]); ]);
$verifiedDomains = ['email.com']; $verifiedDomains = ['email.com'];
@@ -170,7 +168,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->settings->set('installed_at', new Carbon()); $this->settings->set('installed_at', new Carbon());
$this->settings->set('sender.address', 'auth@email.com'); $this->settings->set('sender.address', 'auth@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
$error = MailerLog::getError(); $error = MailerLog::getError();
expect(is_array($error)); expect(is_array($error));
@@ -185,7 +183,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->settings->set('installed_at', new Carbon()); $this->settings->set('installed_at', new Carbon());
$this->settings->set('sender.address', 'invalid@email.com'); $this->settings->set('sender.address', 'invalid@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
$error = MailerLog::getError(); $error = MailerLog::getError();
expect(is_array($error)); expect(is_array($error));
@@ -205,7 +203,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->settings->set('installed_at', new Carbon()); $this->settings->set('installed_at', new Carbon());
$this->settings->set('sender.address', 'auth@email.com'); $this->settings->set('sender.address', 'auth@email.com');
$this->setMailPoetSendingMethod(); $this->setMailPoetSendingMethod();
$controller = $this->getController($authorizedEmailsFromApi = ['auth@email.com']); $controller = $this->getController($authorizedEmailsFromApi = ['authorized' => ['auth@email.com']]);
$controller->checkAuthorizedEmailAddresses(); $controller->checkAuthorizedEmailAddresses();
$error = $this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING); $error = $this->settings->get(AuthorizedEmailsController::AUTHORIZED_EMAIL_ADDRESSES_ERROR_SETTING);
verify(count($error['invalid_senders_in_newsletters']))->equals(1); verify(count($error['invalid_senders_in_newsletters']))->equals(1);
@@ -216,7 +214,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
public function testItSetsFromAddressInSettings() { public function testItSetsFromAddressInSettings() {
$this->settings->set('sender.address', ''); $this->settings->set('sender.address', '');
$controller = $this->getController(['authorized@email.com']); $controller = $this->getController(['authorized' => ['authorized@email.com']]);
$controller->setFromEmailAddress('authorized@email.com'); $controller->setFromEmailAddress('authorized@email.com');
verify($this->settings->get('sender.address'))->same('authorized@email.com'); verify($this->settings->get('sender.address'))->same('authorized@email.com');
} }
@@ -224,12 +222,17 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
public function testItSetsFromAddressInSettingsWhenDomainIsVerified() { public function testItSetsFromAddressInSettingsWhenDomainIsVerified() {
$this->settings->set('sender.address', ''); $this->settings->set('sender.address', '');
$bridgeMock = $this->make(Bridge::class, [
'getAuthorizedEmailAddresses' => Expected::once(['authorized' => []]),
]);
$verifiedDomains = ['email.com']; $verifiedDomains = ['email.com'];
$senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [ $senderDomainMock = $this->make(AuthorizedSenderDomainController::class, [
'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains), 'getVerifiedSenderDomainsIgnoringCache' => Expected::once($verifiedDomains),
]); ]);
$mocks = [ $mocks = [
'Bridge' => $bridgeMock,
'AuthorizedSenderDomainController' => $senderDomainMock, 'AuthorizedSenderDomainController' => $senderDomainMock,
]; ];
$controller = $this->getControllerWithCustomMocks($mocks); $controller = $this->getControllerWithCustomMocks($mocks);
@@ -373,7 +376,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->entityManager->flush(); $this->entityManager->flush();
$this->settings->set('sender.address', ''); $this->settings->set('sender.address', '');
$controller = $this->getController(['authorized@email.com']); $controller = $this->getController(['authorized' => ['authorized@email.com']]);
$controller->setFromEmailAddress('authorized@email.com'); $controller->setFromEmailAddress('authorized@email.com');
verify($newsletter->getSenderAddress())->same('authorized@email.com'); verify($newsletter->getSenderAddress())->same('authorized@email.com');
@@ -392,7 +395,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->entityManager->flush(); $this->entityManager->flush();
$this->settings->set('sender.address', ''); $this->settings->set('sender.address', '');
$controller = $this->getController(['authorized@email.com']); $controller = $this->getController(['authorized' => ['authorized@email.com']]);
$controller->setFromEmailAddress('authorized@email.com'); $controller->setFromEmailAddress('authorized@email.com');
verify($newsletter->getSenderAddress())->same('authorized@email.com'); verify($newsletter->getSenderAddress())->same('authorized@email.com');
@@ -411,7 +414,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
$this->entityManager->flush(); $this->entityManager->flush();
$this->settings->set('sender.address', ''); $this->settings->set('sender.address', '');
$controller = $this->getController(['authorized@email.com']); $controller = $this->getController(['authorized' => ['authorized@email.com']]);
$controller->setFromEmailAddress('authorized@email.com'); $controller->setFromEmailAddress('authorized@email.com');
verify($newsletter->getSenderAddress())->same('invalid@email.com'); verify($newsletter->getSenderAddress())->same('invalid@email.com');
@@ -423,7 +426,7 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
public function testSetsFromAddressThrowsForUnauthorizedEmail() { public function testSetsFromAddressThrowsForUnauthorizedEmail() {
$this->expectException(InvalidArgumentException::class); $this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage("Email address 'invalid@email.com' is not authorized"); $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'); $controller->setFromEmailAddress('invalid@email.com');
} }
@@ -490,15 +493,13 @@ class AuthorizedEmailsControllerTest extends \MailPoetTest {
} }
public function testItReturnsTrueWhenAuthorizedForIsEmailAddressAuthorized() { public function testItReturnsTrueWhenAuthorizedForIsEmailAddressAuthorized() {
$array = ['authorized@email.com']; $controller = $this->getController(['authorized' => ['authorized@email.com']]);
$controller = $this->getController($array);
$result = $controller->isEmailAddressAuthorized('authorized@email.com'); $result = $controller->isEmailAddressAuthorized('authorized@email.com');
verify($result)->equals(true); verify($result)->equals(true);
} }
public function testItReturnsFalseWhenNotAuthorizedForIsEmailAddressAuthorized() { public function testItReturnsFalseWhenNotAuthorizedForIsEmailAddressAuthorized() {
$array = ['authorized@email.com']; $controller = $this->getController(['authorized' => ['authorized@email.com']]);
$controller = $this->getController($array);
$result = $controller->isEmailAddressAuthorized('pending@email.com'); $result = $controller->isEmailAddressAuthorized('pending@email.com');
verify($result)->equals(false); verify($result)->equals(false);
} }

View File

@@ -262,19 +262,6 @@ class BridgeTest extends \MailPoetTest {
$wp->removeFilter('mailpoet_bridge_api_request_timeout', $filter); $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() { public function testItReturnsAllUserEmails() {
$array = [ $array = [
'pending' => ['pending@email.com'], 'pending' => ['pending@email.com'],
@@ -284,7 +271,7 @@ class BridgeTest extends \MailPoetTest {
$api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => $array], $this); $api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => $array], $this);
$this->bridge->api = $api; $this->bridge->api = $api;
$result = $this->bridge->getAuthorizedEmailAddresses('all'); $result = $this->bridge->getAuthorizedEmailAddresses();
verify($result)->same($array); verify($result)->same($array);
} }
@@ -292,7 +279,7 @@ class BridgeTest extends \MailPoetTest {
$api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => []], $this); $api = Stub::make(new API(null), ['getAuthorizedEmailAddresses' => []], $this);
$this->bridge->api = $api; $this->bridge->api = $api;
$result = $this->bridge->getAuthorizedEmailAddresses('all'); $result = $this->bridge->getAuthorizedEmailAddresses();
verify($result)->same([]); verify($result)->same([]);
} }
@@ -304,14 +291,6 @@ class BridgeTest extends \MailPoetTest {
verify($result)->same([]); 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() { public function testItReturnsTheRightDataForSenderDomains() {
// when API returns null // when API returns null
$api = Stub::make(new API(null), ['getAuthorizedSenderDomains' => null], $this); $api = Stub::make(new API(null), ['getAuthorizedSenderDomains' => null], $this);