Files
piratepoet/mailpoet/tests/integration/Util/License/Features/CapabilitiesManagerTest.php
Brezo Cordero 48465a7152 Refactor CapabilitiesManager
capabilities is an associate array of new class Capability  to make it more generic

[MAILPOET-5938]
2024-03-22 11:01:01 +01:00

170 lines
8.8 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Util\License\Features;
use MailPoet\Config\ServicesChecker;
use MailPoet\Settings\SettingsController;
class CapabilitiesManagerTest extends \MailPoetTest {
public function testItGetsCapabilities() {
$capabilitiesManager = $this->getCapabilitiesManager();
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->false();
verify($capabilities['detailedAnalytics']->isRestricted)->false();
verify($capabilities['automationSteps']->value)->equals(1);
verify($capabilities['segmentFilters']->value)->equals(1);
}
public function testItGetsCapabilitiesFromFreeTier() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap([
['mta.mailpoet_api_key_state.data.tier', null, 0],
]);
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->true();
verify($capabilities['detailedAnalytics']->isRestricted)->true();
verify($capabilities['automationSteps']->value)->equals(1);
verify($capabilities['segmentFilters']->value)->equals(1);
}
public function testItGetsCapabilitiesFromTier1Tier() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap([
['mta.mailpoet_api_key_state.data.tier', null, 1],
]);
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->false();
verify($capabilities['detailedAnalytics']->isRestricted)->false();
verify($capabilities['automationSteps']->value)->equals(1);
verify($capabilities['segmentFilters']->value)->equals(1);
}
public function testItGetsCapabilitiesFromTier2Tier() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap([
['mta.mailpoet_api_key_state.data.tier', null, 2],
]);
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->false();
verify($capabilities['detailedAnalytics']->isRestricted)->false();
verify($capabilities['automationSteps']->value)->equals(0);
verify($capabilities['segmentFilters']->value)->equals(0);
}
public function testIndividualCapsCanBeUsedToGiveGreaterAccessThanTier() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap([
['mta.mailpoet_api_key_state.data.tier', null, 0],
['mta.mailpoet_api_key_state.data.mailpoet_logo_in_emails', null, false],
['mta.mailpoet_api_key_state.data.detailed_analytics', null, true],
['mta.mailpoet_api_key_state.data.automation_steps', null, 2],
['mta.mailpoet_api_key_state.data.segment_filters', null, 0],
]);
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->false();
verify($capabilities['detailedAnalytics']->isRestricted)->false();
verify($capabilities['automationSteps']->value)->equals(2);
verify($capabilities['segmentFilters']->value)->equals(0);
}
public function testIndividualCapsAreOnlyAppliedIfLessRestrictiveThanTier() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap([
['mta.mailpoet_api_key_state.data.tier', null, 2],
['mta.mailpoet_api_key_state.data.mailpoet_logo_in_emails', null, true],
['mta.mailpoet_api_key_state.data.detailed_analytics', null, false],
['mta.mailpoet_api_key_state.data.automation_steps', null, 1],
['mta.mailpoet_api_key_state.data.segment_filters', null, 1],
]);
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->false();
verify($capabilities['detailedAnalytics']->isRestricted)->false();
verify($capabilities['automationSteps']->value)->equals(0);
verify($capabilities['segmentFilters']->value)->equals(0);
}
public function testIndividualCapsAreAppliedIfThereIsNoTier() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap([
['mta.mailpoet_api_key_state.data.mailpoet_logo_in_emails', null, true],
['mta.mailpoet_api_key_state.data.detailed_analytics', null, false],
['mta.mailpoet_api_key_state.data.automation_steps', null, 1],
['mta.mailpoet_api_key_state.data.segment_filters', null, 1],
]);
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->true();
verify($capabilities['detailedAnalytics']->isRestricted)->true();
verify($capabilities['automationSteps']->value)->equals(1);
verify($capabilities['segmentFilters']->value)->equals(1);
}
public function testLogoDisplayFallsBackToUserActivelyPayingIfNoCapabilities() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap($this->getLegacySettings());
$servicesChecker = $this->createMock(ServicesChecker::class);
$servicesChecker->method('isPremiumKeyValid')->willReturn(true);
$servicesChecker->method('isMailPoetAPIKeyValid')->willReturn(true);
$servicesChecker->method('isUserActivelyPaying')->willReturn(true);
$capabilitiesManager = $this->getCapabilitiesManager($settings, $servicesChecker);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['mailpoetLogoInEmails']->isRestricted)->false();
}
public function testDetailedAnalyticsFallsBackToPremiumKeyAndSubscribersChecksIfNoCapabilities() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap($this->getLegacySettings());
$servicesChecker = $this->createMock(ServicesChecker::class);
$servicesChecker->method('isPremiumKeyValid')->willReturn(true);
$servicesChecker->method('isMailPoetAPIKeyValid')->willReturn(true);
$servicesChecker->method('isUserActivelyPaying')->willReturn(true);
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['detailedAnalytics']->isRestricted)->false();
}
public function testAutomationStepsAndSegmentFiltersAreUnlimitedIfNoCapabilities() {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap($this->getLegacySettings());
$capabilitiesManager = $this->getCapabilitiesManager($settings);
$capabilities = $capabilitiesManager->getCapabilities();
verify($capabilities['automationSteps']->value)->equals(0);
verify($capabilities['segmentFilters']->value)->equals(0);
}
private function getCapabilitiesManager($settingsMock = null, $servicesCheckerMock = null, $subscribersFeatureMock = null): CapabilitiesManager {
$settings = $this->createMock(SettingsController::class);
$settings->method('get')->willReturnMap([
['mta.mailpoet_api_key_state.data.tier', null, 1],
['mta.mailpoet_api_key_state.data.mailpoet_logo_in_emails', null, false],
['mta.mailpoet_api_key_state.data.detailed_analytics', null, true],
['mta.mailpoet_api_key_state.data.automation_steps', null, 1],
['mta.mailpoet_api_key_state.data.segment_filters', null, 1],
]);
$servicesChecker = $this->createMock(ServicesChecker::class);
$servicesChecker->method('isPremiumKeyValid')->willReturn(true);
$servicesChecker->method('isMailPoetAPIKeyValid')->willReturn(true);
$servicesChecker->method('isUserActivelyPaying')->willReturn(true);
$servicesChecker->method('isPremiumPluginActive')->willReturn(true);
$subscribersFeature = $this->createMock(Subscribers::class);
$subscribersFeature->method('hasValidPremiumKey')->willReturn(true);
$subscribersFeature->method('check')->willReturn(false);
return new CapabilitiesManager($settingsMock ?? $settings, $servicesCheckerMock ?? $servicesChecker, $subscribersFeatureMock ?? $subscribersFeature);
}
private function getLegacySettings() {
return [
['mta.mailpoet_api_key_state.data.tier', null, null],
['mta.mailpoet_api_key_state.data.mailpoet_logo_in_emails', null, null],
['mta.mailpoet_api_key_state.data.detailed_analytics', null, null],
['mta.mailpoet_api_key_state.data.automation_steps', null, null],
['mta.mailpoet_api_key_state.data.segment_filters', null, null],
];
}
}