Refactor migrator to be a DI service

[MAILPOET-4061]
This commit is contained in:
John Oleksowicz
2022-01-27 12:14:37 -06:00
committed by Veljko V
parent ed28dcc6e6
commit 82a6fb8ac7
6 changed files with 20 additions and 10 deletions

View File

@@ -147,7 +147,7 @@ which will create a `storybook-static` folder with all necessary files. Don't fo
### DI ### DI
We use Symfony/dependency-injection container. Container configuration can be found in `libs/DI/ContainerFactory.php` We use Symfony/dependency-injection container. Container configuration can be found in `lib/DI/ContainerFactory.php`
The container is configured and used with minimum sub-dependencies to keep final package size small. The container is configured and used with minimum sub-dependencies to keep final package size small.
You can check [the docs](https://symfony.com/doc/3.4/components/dependency_injection.html) to learn more about Symfony Container. You can check [the docs](https://symfony.com/doc/3.4/components/dependency_injection.html) to learn more about Symfony Container.

View File

@@ -19,14 +19,19 @@ class Activator {
/** @var WPFunctions */ /** @var WPFunctions */
private $wp; private $wp;
/** @var Migrator */
private $migrator;
public function __construct( public function __construct(
SettingsController $settings, SettingsController $settings,
Populator $populator, Populator $populator,
WPFunctions $wp WPFunctions $wp,
Migrator $migrator
) { ) {
$this->settings = $settings; $this->settings = $settings;
$this->populator = $populator; $this->populator = $populator;
$this->wp = $wp; $this->wp = $wp;
$this->migrator = $migrator;
} }
public function activate() { public function activate() {
@@ -44,8 +49,7 @@ class Activator {
} }
private function processActivate(): void { private function processActivate(): void {
$migrator = new Migrator(); $this->migrator->up();
$migrator->up();
$this->populator->up(); $this->populator->up();
$this->updateDbVersion(); $this->updateDbVersion();
@@ -55,8 +59,7 @@ class Activator {
} }
public function deactivate() { public function deactivate() {
$migrator = new Migrator(); $this->migrator->down();
$migrator->down();
$caps = new Capabilities(); $caps = new Capabilities();
$caps->removeWPCapabilities(); $caps->removeWPCapabilities();

View File

@@ -24,10 +24,14 @@ class Migrator {
public $prefix; public $prefix;
private $charsetCollate; private $charsetCollate;
private $models; private $models;
/** @var SettingsController */
private $settings; private $settings;
public function __construct() { public function __construct(
$this->settings = SettingsController::getInstance(); SettingsController $settings
) {
$this->settings = $settings;
$this->prefix = Env::$dbPrefix; $this->prefix = Env::$dbPrefix;
$this->charsetCollate = Env::$dbCharsetCollate; $this->charsetCollate = Env::$dbCharsetCollate;
$this->models = [ $this->models = [

View File

@@ -111,6 +111,7 @@ class ContainerConfigurator implements IContainerConfigurator {
$container->autowire(\MailPoet\Config\Initializer::class)->setPublic(true); $container->autowire(\MailPoet\Config\Initializer::class)->setPublic(true);
$container->autowire(\MailPoet\Config\Localizer::class); $container->autowire(\MailPoet\Config\Localizer::class);
$container->autowire(\MailPoet\Config\Menu::class)->setPublic(true); $container->autowire(\MailPoet\Config\Menu::class)->setPublic(true);
$container->autowire(\MailPoet\Config\Migrator::class)->setPublic(true);
$container->autowire(\MailPoet\Config\MP2Migrator::class); $container->autowire(\MailPoet\Config\MP2Migrator::class);
$container->autowire(\MailPoet\Config\RendererFactory::class)->setPublic(true); $container->autowire(\MailPoet\Config\RendererFactory::class)->setPublic(true);
$container->autowire(\MailPoet\Config\ServicesChecker::class)->setPublic(true); $container->autowire(\MailPoet\Config\ServicesChecker::class)->setPublic(true);

View File

@@ -7,6 +7,7 @@ use Helper\WordPressHooks as WPHooksHelper;
use MailPoet\API\JSON\Response as APIResponse; use MailPoet\API\JSON\Response as APIResponse;
use MailPoet\API\JSON\v1\Setup; use MailPoet\API\JSON\v1\Setup;
use MailPoet\Config\Activator; use MailPoet\Config\Activator;
use MailPoet\Config\Migrator;
use MailPoet\Config\Populator; use MailPoet\Config\Populator;
use MailPoet\Form\FormsRepository; use MailPoet\Form\FormsRepository;
use MailPoet\Referrals\ReferralDetector; use MailPoet\Referrals\ReferralDetector;
@@ -40,7 +41,8 @@ class SetupTest extends \MailPoetTest {
$this->entityManager, $this->entityManager,
$this->diContainer->get(WP::class) $this->diContainer->get(WP::class)
); );
$router = new Setup($wpStub, new Activator($settings, $populator, $wpStub)); $migrator = $this->diContainer->get(Migrator::class);
$router = new Setup($wpStub, new Activator($settings, $populator, $wpStub, $migrator));
$response = $router->reset(); $response = $router->reset();
expect($response->status)->equals(APIResponse::STATUS_OK); expect($response->status)->equals(APIResponse::STATUS_OK);

View File

@@ -16,7 +16,7 @@ class MigratorTest extends \MailPoetTest {
public function _before() { public function _before() {
parent::_before(); parent::_before();
$this->migrator = new Migrator(); $this->migrator = $this->diContainer->get(Migrator::class);
$this->settings = $this->diContainer->get(SettingsController::class); $this->settings = $this->diContainer->get(SettingsController::class);
$this->truncateEntity(DynamicSegmentFilterEntity::class); $this->truncateEntity(DynamicSegmentFilterEntity::class);
} }