Add functions to check activation restrictions

[MAILPOET-5786]
This commit is contained in:
Brezo Cordero
2024-01-12 23:21:41 -06:00
committed by Aschepikov
parent 01a3b3c5ca
commit 3b3be51324
2 changed files with 117 additions and 3 deletions

View File

@@ -2,9 +2,11 @@
namespace MailPoet\Services; namespace MailPoet\Services;
use MailPoet\Mailer\Mailer;
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository; use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
use MailPoet\Services\Bridge\API; use MailPoet\Services\Bridge\API;
use MailPoet\Settings\SettingsController; use MailPoet\Settings\SettingsController;
use MailPoet\Util\License\Features\Subscribers;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
class AuthorizedSenderDomainController { class AuthorizedSenderDomainController {
@@ -42,14 +44,19 @@ class AuthorizedSenderDomainController {
/** @var null|array */ /** @var null|array */
private $currentRawData = null; private $currentRawData = null;
/** @var Subscribers */
private $subscribers;
public function __construct( public function __construct(
Bridge $bridge, Bridge $bridge,
NewsletterStatisticsRepository $newsletterStatisticsRepository, NewsletterStatisticsRepository $newsletterStatisticsRepository,
SettingsController $settingsController SettingsController $settingsController,
Subscribers $subscribers
) { ) {
$this->bridge = $bridge; $this->bridge = $bridge;
$this->newsletterStatisticsRepository = $newsletterStatisticsRepository; $this->newsletterStatisticsRepository = $newsletterStatisticsRepository;
$this->settingsController = $settingsController; $this->settingsController = $settingsController;
$this->subscribers = $subscribers;
} }
/** /**
@@ -276,4 +283,21 @@ class AuthorizedSenderDomainController {
return $this->newsletterStatisticsRepository->countBy([]) === 0; return $this->newsletterStatisticsRepository->countBy([]) === 0;
} }
public function isSmallSender(): bool {
return $this->subscribers->getSubscribersCount() <= self::LOWER_LIMIT;
}
public function isAuthorizedDomainRequiredForNewCampaigns(): bool {
if ($this->settingsController->get('mta.method') !== Mailer::METHOD_MAILPOET) {
return false;
}
// TODO: Remove after the enforcement date has passed
if (!$this->isNewUser() && !$this->isEnforcementOfNewRestrictionsInEffect()) {
return false;
}
return !$this->isSmallSender();
}
} }

View File

@@ -13,6 +13,7 @@ use MailPoet\Settings\SettingsController;
use MailPoet\Test\DataFactories\Newsletter; use MailPoet\Test\DataFactories\Newsletter;
use MailPoet\Test\DataFactories\StatisticsNewsletters; use MailPoet\Test\DataFactories\StatisticsNewsletters;
use MailPoet\Test\DataFactories\Subscriber; use MailPoet\Test\DataFactories\Subscriber;
use MailPoet\Util\License\Features\Subscribers;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon; use MailPoetVendor\Carbon\Carbon;
@@ -291,9 +292,10 @@ class AuthorizedSenderDomainControllerTest extends \MailPoetTest {
$this->assertSame('jane.doe=gmail.com@replies.sendingservice.net', $this->getController()->getRewrittenEmailAddress($email)); $this->assertSame('jane.doe=gmail.com@replies.sendingservice.net', $this->getController()->getRewrittenEmailAddress($email));
} }
private function getController($bridgeMock = null): AuthorizedSenderDomainController { private function getController($bridgeMock = null, $subscribersMock = null): AuthorizedSenderDomainController {
$newsletterStatisticsRepository = $this->diContainer->get(NewsletterStatisticsRepository::class); $newsletterStatisticsRepository = $this->diContainer->get(NewsletterStatisticsRepository::class);
return new AuthorizedSenderDomainController($bridgeMock ?? $this->bridge, $newsletterStatisticsRepository, $this->settings); $subscribers = $this->diContainer->get(Subscribers::class);
return new AuthorizedSenderDomainController($bridgeMock ?? $this->bridge, $newsletterStatisticsRepository, $this->settings, $subscribersMock ?? $subscribers);
} }
public function testUserIsNewIfTheyHaveNotCompletedWelcomeWizard(): void { public function testUserIsNewIfTheyHaveNotCompletedWelcomeWizard(): void {
@@ -325,4 +327,92 @@ class AuthorizedSenderDomainControllerTest extends \MailPoetTest {
Carbon::setTestNow(Carbon::parse('2024-02-01 00:00:01 UTC')); Carbon::setTestNow(Carbon::parse('2024-02-01 00:00:01 UTC'));
$this->assertTrue($this->getController()->isEnforcementOfNewRestrictionsInEffect()); $this->assertTrue($this->getController()->isEnforcementOfNewRestrictionsInEffect());
} }
public function testIsSmallSenderIfSubscribersUnderLowerLimit(): void {
$subscribersMock = $this->make(Subscribers::class, [
'getSubscribersCount' => Expected::once(500),
]);
$this->assertTrue($this->getController(null, $subscribersMock)->isSmallSender());
}
public function testIsNotSmallSenderIfSubscribersOverLowerLimit(): void {
$subscribersMock = $this->make(Subscribers::class, [
'getSubscribersCount' => Expected::once(501),
]);
$this->assertFalse($this->getController(null, $subscribersMock)->isSmallSender());
}
public function testIsAuthorizedDomainRequiredForNewCampaigns(): void {
// Is new user
$this->settings->set('version', MAILPOET_VERSION);
$this->settings->set('installed_after_new_domain_restrictions', '1');
// Is big sender
$subscribersMock = $this->make(Subscribers::class, [
'getSubscribersCount' => Expected::once(501),
]);
$this->assertTrue($this->getController(null, $subscribersMock)->isAuthorizedDomainRequiredForNewCampaigns());
}
public function testNotIsAuthorizedDomainRequiredForNewCampaignsForExistingUsersBeforeEnforcementDate(): void {
// Is not new user
$this->settings->set('version', MAILPOET_VERSION);
$this->settings->delete('installed_after_new_domain_restrictions');
(new StatisticsNewsletters((new Newsletter())->withSendingQueue()->create(), (new Subscriber())->create()))->create();
// Before EnforcementDate
Carbon::setTestNow(Carbon::parse('2024-01-31 00:00:00 UTC'));
$this->assertFalse($this->getController()->isAuthorizedDomainRequiredForNewCampaigns());
}
public function testIsAuthorizedDomainRequiredForNewCampaignsForExistingUsersAfterEnforcementDate(): void {
// Is not new user
$this->settings->set('version', MAILPOET_VERSION);
$this->settings->delete('installed_after_new_domain_restrictions');
(new StatisticsNewsletters((new Newsletter())->withSendingQueue()->create(), (new Subscriber())->create()))->create();
// After EnforcementDate
Carbon::setTestNow(Carbon::parse('2024-02-01 00:00:01 UTC'));
// Is big sender
$subscribersMock = $this->make(Subscribers::class, [
'getSubscribersCount' => Expected::once(501),
]);
$this->assertTrue($this->getController(null, $subscribersMock)->isAuthorizedDomainRequiredForNewCampaigns());
}
public function testNotIsAuthorizedDomainRequiredForNewCampaignsForSmallSenders(): void {
// Is not new user
$this->settings->set('version', MAILPOET_VERSION);
$this->settings->delete('installed_after_new_domain_restrictions');
(new StatisticsNewsletters((new Newsletter())->withSendingQueue()->create(), (new Subscriber())->create()))->create();
// After EnforcementDate
Carbon::setTestNow(Carbon::parse('2024-02-01 00:00:01 UTC'));
// Is small sender
$subscribersMock = $this->make(Subscribers::class, [
'getSubscribersCount' => Expected::once(500),
]);
$this->assertFalse($this->getController(null, $subscribersMock)->isAuthorizedDomainRequiredForNewCampaigns());
}
public function testNotIsAuthorizedDomainRequiredForNewCampaignsForNewUsersSmallSenders(): void {
// Is new user
$this->settings->set('version', MAILPOET_VERSION);
$this->settings->set('installed_after_new_domain_restrictions', '1');
// Is small sender
$subscribersMock = $this->make(Subscribers::class, [
'getSubscribersCount' => Expected::once(500),
]);
$this->assertFalse($this->getController(null, $subscribersMock)->isAuthorizedDomainRequiredForNewCampaigns());
}
} }