Move onSettingsChange from Bridge service to SettingsChangeHandler

Bridge is a low level service that processes requests and responses to/from Bridge API.
This change is needed so that we can remove dependency on MailPoet\Util\License\Features\Subscribers
service from the Bridge. The dependecy is a higher level service and may easily cause a circular dependency issue.

The SettingsChangeHandler is service for handling side effects
when saving settings. This feels as a better place to put the functionality.
[MAILPOET-5191]
This commit is contained in:
Rostislav Wolny
2023-04-25 14:38:40 +02:00
committed by Veljko V
parent ab19ef92d5
commit cd5a023b35
6 changed files with 82 additions and 67 deletions

View File

@@ -5,7 +5,10 @@ namespace MailPoet\Settings;
use MailPoet\Cron\Workers\InactiveSubscribers;
use MailPoet\Cron\Workers\WooCommerceSync;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Mailer\Mailer;
use MailPoet\Newsletter\Sending\ScheduledTasksRepository;
use MailPoet\Services\Bridge;
use MailPoet\Services\SubscribersCountReporter;
use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
@@ -79,6 +82,49 @@ class SettingsChangeHandlerTest extends \MailPoetTest {
return $task;
}
public function testItChecksAndStoresKeysWhenUpdatingBridge() {
$key = 'valid-key';
$settings = [];
$settings[Mailer::MAILER_CONFIG_SETTING_NAME]['mailpoet_api_key'] = $key;
$settings['premium']['premium_key'] = $key;
$response = ['state' => Bridge::KEY_VALID];
$bridge = $this->createMock(Bridge::class);
$bridge->expects($this->once())
->method('checkMSSKey')
->with($this->equalTo($key))
->willReturn($response);
$bridge->expects($this->once())
->method('storeMSSKeyAndState')
->with(
$this->equalTo($key),
$this->equalTo($response)
);
$bridge->expects($this->once())
->method('checkPremiumKey')
->with($this->equalTo($key))
->willReturn($response);
$bridge->expects($this->once())
->method('storePremiumKeyAndState')
->with(
$this->equalTo($key),
$this->equalTo($response)
);
$countReporterMock = $this->createMock(SubscribersCountReporter::class);
$countReporterMock->expects($this->once())
->method('report')
->with($this->equalTo($key));
$changeHandler = $this->getServiceWithOverrides(SettingsChangeHandler::class, [
'bridge' => $bridge,
'subscribersCountReporter' => $countReporterMock,
]);
$changeHandler->updateBridge($settings);
}
private function getScheduledTaskByType(string $type): ?ScheduledTaskEntity {
return $this->tasksRepository->findOneBy([
'type' => $type,