Add functions to check activation restrictions
[MAILPOET-5786]
This commit is contained in:
committed by
Aschepikov
parent
01a3b3c5ca
commit
3b3be51324
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user