Files
piratepoet/mailpoet/tests/integration/Services/AuthorizedSenderDomainControllerTest.php
Jan Lysý 579de1cc86 Reduce the count of constants
[MAILPOET-4639]
2023-01-16 13:46:07 +01:00

193 lines
6.6 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Test\Services;
use Codeception\Stub\Expected;
use InvalidArgumentException;
use MailPoet\Mailer\Mailer;
use MailPoet\Services\AuthorizedSenderDomainController;
use MailPoet\Services\Bridge;
use MailPoet\Services\Bridge\API;
use MailPoet\Settings\SettingsController;
use MailPoet\Util\DmarcPolicyChecker;
use MailPoet\WP\Functions as WPFunctions;
require_once('BridgeTestMockAPI.php');
class AuthorizedSenderDomainControllerTest extends \MailPoetTest {
/** @var SettingsController */
private $settings;
/** @var Bridge */
private $bridge;
private $apiKey;
public function _before() {
parent::_before();
$this->apiKey = getenv('WP_TEST_MAILER_MAILPOET_API');
$this->bridge = new Bridge();
$this->bridge->api = new API($this->apiKey, new WPFunctions());
$this->settings = SettingsController::getInstance();
$this->settings->set(
Mailer::MAILER_CONFIG_SETTING_NAME,
[
'method' => 'MailPoet',
'mailpoet_api_key' => $this->apiKey,
]
);
}
public function testItFetchSenderDomains() {
$domains = ['mailpoet.com', 'good', 'testdomain.com'];
$bridgeResponse = [
'mailpoet.com' => ['data'],
'good' => ['data'],
'testdomain.com' => ['data'],
];
$bridgeMock = $this->make(Bridge::class, [
'getAuthorizedSenderDomains' => Expected::once($bridgeResponse),
]);
$controller = $this->getController($bridgeMock);
$allDomains = $controller->getAllSenderDomains();
expect($allDomains)->same($domains);
}
public function testItReturnsVerifiedSenderDomains() {
$bridgeResponse = [
'mailpoet.com' => Bridge\BridgeTestMockAPI::VERIFIED_DOMAIN_RESPONSE['dns'],
'good' => ['data'],
'testdomain.com' => ['data'],
];
$bridgeMock = $this->make(Bridge::class, [
'getAuthorizedSenderDomains' => Expected::once($bridgeResponse),
]);
$controller = $this->getController($bridgeMock);
$verifiedDomains = $controller->getVerifiedSenderDomains();
expect($verifiedDomains)->same(['mailpoet.com']); // only this is Verified for now
}
public function testItReturnsEmptyArrayWhenNoVerifiedSenderDomains() {
$expectation = Expected::once([]); // with empty array
$bridgeMock = $this->make(Bridge::class, ['getAuthorizedSenderDomains' => $expectation]);
$controller = $this->getController($bridgeMock);
$verifiedDomains = $controller->getVerifiedSenderDomains();
expect($verifiedDomains)->same([]);
$domains = ['testdomain.com' => []];
$expectation = Expected::once($domains);
$bridgeMock = $this->make(Bridge::class, ['getAuthorizedSenderDomains' => $expectation]);
$controller = $this->getController($bridgeMock);
$verifiedDomains = $controller->getVerifiedSenderDomains();
expect($verifiedDomains)->same([]);
}
public function testCreateAuthorizedSenderDomainThrowsForExistingDomains() {
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Sender domain exist');
$domains = ['testdomain.com' => []];
$getSenderDomainsExpectation = Expected::once($domains);
$createSenderDomainsExpectation = Expected::never();
$bridgeMock = $this->make(Bridge::class, [
'getAuthorizedSenderDomains' => $getSenderDomainsExpectation,
'createAuthorizedSenderDomain' => $createSenderDomainsExpectation,
]);
$controller = $this->getController($bridgeMock);
$controller->createAuthorizedSenderDomain('testdomain.com');
}
public function testVerifyAuthorizedSenderDomainThrowsForNoneExistingDomains() {
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Sender domain does not exist');
$domains = ['newdomain.com' => []];
$getSenderDomainsExpectation = Expected::once($domains);
$verifySenderDomainsExpectation = Expected::never();
$bridgeMock = $this->make(Bridge::class, [
'getAuthorizedSenderDomains' => $getSenderDomainsExpectation,
'verifyAuthorizedSenderDomain' => $verifySenderDomainsExpectation,
]);
$controller = $this->getController($bridgeMock);
$controller->verifyAuthorizedSenderDomain('testdomain.com');
}
public function testVerifyAuthorizedSenderDomainThrowsForVerifiedDomains() {
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('Sender domain already verified');
$domains = ['testdomain.com' => [
['status' => 'valid'],
['status' => 'valid'],
['status' => 'valid'],
]];
$getSenderDomainsExpectation = Expected::once($domains);
$verifySenderDomainsExpectation = Expected::never();
$bridgeMock = $this->make(Bridge::class, [
'getAuthorizedSenderDomains' => $getSenderDomainsExpectation,
'verifyAuthorizedSenderDomain' => $verifySenderDomainsExpectation,
]);
$controller = $this->getController($bridgeMock);
$controller->verifyAuthorizedSenderDomain('testdomain.com');
}
public function testVerifyAuthorizedSenderDomainThrowsForOtherErrors() {
$errorMessage = 'This is a test message';
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage($errorMessage);
$domains = ['testdomain.com' => []];
$getSenderDomainsExpectation = Expected::once($domains);
$verifySenderDomainsExpectation = Expected::once([
'error' => $errorMessage,
'message' => $errorMessage,
'status' => API::RESPONSE_STATUS_ERROR,
]);
$bridgeMock = $this->make(Bridge::class, [
'getAuthorizedSenderDomains' => $getSenderDomainsExpectation,
'verifyAuthorizedSenderDomain' => $verifySenderDomainsExpectation,
]);
$controller = $this->getController($bridgeMock);
$controller->verifyAuthorizedSenderDomain('testdomain.com');
}
public function testItReturnsTrueWhenDmarcIsEnabled() {
$controller = $this->getController();
$isRestricted = $controller->isDomainDmarcRestricted('mailpoet.com');
expect($isRestricted)->same(true);
}
public function testItReturnsFalseWhenDmarcIsNotEnabled() {
$controller = $this->getController();
$isRestricted = $controller->isDomainDmarcRestricted('example.com');
expect($isRestricted)->same(false);
}
public function testItReturnsDmarcStatus() {
$controller = $this->getController();
$isRestricted = $controller->getDmarcPolicyForDomain('example.com');
expect($isRestricted)->same('none');
}
private function getController($bridgeMock = null): AuthorizedSenderDomainController {
$dmarcPolicyChecker = $this->diContainer->get(DmarcPolicyChecker::class);
return new AuthorizedSenderDomainController($bridgeMock ?? $this->bridge, $dmarcPolicyChecker);
}
}