From 9868f5cc21c4ae2a8bcc50a61793d9b63acb4c97 Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Wed, 20 Jan 2021 16:14:58 +0100 Subject: [PATCH] Remove dynamic segments services that are no longer needed [MAILPOET-3164] --- lib/DI/ContainerConfigurator.php | 4 - .../AddToNewslettersSegments.php | 48 ---------- .../Persistence/Loading/Loader.php | 34 ------- .../Persistence/Loading/SubscribersCount.php | 38 -------- .../Persistence/Loading/SubscribersIds.php | 43 --------- .../AddToNewslettersSegmentsTest.php | 60 ------------ .../Persistence/Loading/LoaderTest.php | 89 ----------------- .../Loading/SubscribersCountTest.php | 71 -------------- .../Loading/SubscribersIdsTest.php | 95 ------------------- 9 files changed, 482 deletions(-) delete mode 100644 lib/DynamicSegments/FreePluginConnectors/AddToNewslettersSegments.php delete mode 100644 lib/DynamicSegments/Persistence/Loading/Loader.php delete mode 100644 lib/DynamicSegments/Persistence/Loading/SubscribersCount.php delete mode 100644 lib/DynamicSegments/Persistence/Loading/SubscribersIds.php delete mode 100644 tests/integration/DynamicSegments/FreePluginConnectors/AddToNewslettersSegmentsTest.php delete mode 100644 tests/integration/DynamicSegments/Persistence/Loading/LoaderTest.php delete mode 100644 tests/integration/DynamicSegments/Persistence/Loading/SubscribersCountTest.php delete mode 100644 tests/integration/DynamicSegments/Persistence/Loading/SubscribersIdsTest.php diff --git a/lib/DI/ContainerConfigurator.php b/lib/DI/ContainerConfigurator.php index dbc4c98ce1..0ad0ad53c5 100644 --- a/lib/DI/ContainerConfigurator.php +++ b/lib/DI/ContainerConfigurator.php @@ -131,11 +131,7 @@ class ContainerConfigurator implements IContainerConfigurator { $container->autowire(\MailPoet\PostEditorBlocks\PostEditorBlock::class); $container->autowire(\MailPoet\PostEditorBlocks\SubscriptionFormBlock::class); // Dynamic segments - $container->autowire(\MailPoet\DynamicSegments\FreePluginConnectors\AddToNewslettersSegments::class)->setPublic(true); $container->autowire(\MailPoet\DynamicSegments\Mappers\DBMapper::class); - $container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\Loader::class); - $container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount::class); - $container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SubscribersIds::class); $container->autowire(\MailPoet\DynamicSegments\Persistence\Loading\SingleSegmentLoader::class)->setPublic(true); // Cron $container->autowire(\MailPoet\Cron\CronHelper::class)->setPublic(true); diff --git a/lib/DynamicSegments/FreePluginConnectors/AddToNewslettersSegments.php b/lib/DynamicSegments/FreePluginConnectors/AddToNewslettersSegments.php deleted file mode 100644 index b7822b450e..0000000000 --- a/lib/DynamicSegments/FreePluginConnectors/AddToNewslettersSegments.php +++ /dev/null @@ -1,48 +0,0 @@ -loader = $loader; - $this->subscribersCountLoader = $subscribersCountLoader; - } - - /** - * @param array $initialSegments - * - * @return array - */ - public function add(array $initialSegments) { - $dynamicSegments = $this->getListings(); - return array_merge($initialSegments, $dynamicSegments); - } - - private function getListings() { - $dynamicSegments = $this->loader->load(); - return $this->buildResult($dynamicSegments); - } - - private function buildResult($dynamicSegments) { - $result = []; - foreach ($dynamicSegments as $dynamicSegment) { - $result[] = [ - 'id' => $dynamicSegment->id, - 'name' => $dynamicSegment->name, - 'subscribers' => $this->subscribersCountLoader->getSubscribersCount($dynamicSegment), - 'deleted_at' => $dynamicSegment->deletedAt, - ]; - } - return $result; - } -} diff --git a/lib/DynamicSegments/Persistence/Loading/Loader.php b/lib/DynamicSegments/Persistence/Loading/Loader.php deleted file mode 100644 index 01a24c14db..0000000000 --- a/lib/DynamicSegments/Persistence/Loading/Loader.php +++ /dev/null @@ -1,34 +0,0 @@ -mapper = $mapper; - } - - /** - * @return DynamicSegment[] - */ - public function load() { - $segments = DynamicSegment::findAll(); - return $this->loadFilters($segments); - } - - private function loadFilters(array $segments) { - $ids = array_map(function($segment) { - return $segment->id; - }, $segments); - $filters = DynamicSegmentFilter::getAllBySegmentIds($ids); - - return $this->mapper->mapSegments($segments, $filters); - } -} diff --git a/lib/DynamicSegments/Persistence/Loading/SubscribersCount.php b/lib/DynamicSegments/Persistence/Loading/SubscribersCount.php deleted file mode 100644 index f5d10a5879..0000000000 --- a/lib/DynamicSegments/Persistence/Loading/SubscribersCount.php +++ /dev/null @@ -1,38 +0,0 @@ -requirementsChecker = $requirementsChecker; - } - - /** - * @param DynamicSegment $dynamicSegment - * - * @return int - */ - public function getSubscribersCount(DynamicSegment $dynamicSegment) { - $orm = Subscriber::selectExpr('count(distinct ' . Subscriber::$_table . '.id) as cnt'); - if ($this->requirementsChecker->shouldSkipSegment($dynamicSegment)) { - return 0; - } - foreach ($dynamicSegment->getFilters() as $filter) { - $orm = $filter->toSql($orm); - } - $orm->where(MP_SUBSCRIBERS_TABLE . '.status', Subscriber::STATUS_SUBSCRIBED); - return $orm->findOne()->cnt; - } -} diff --git a/lib/DynamicSegments/Persistence/Loading/SubscribersIds.php b/lib/DynamicSegments/Persistence/Loading/SubscribersIds.php deleted file mode 100644 index 689c3b9dfd..0000000000 --- a/lib/DynamicSegments/Persistence/Loading/SubscribersIds.php +++ /dev/null @@ -1,43 +0,0 @@ -requirementsChecker = $requirementsChecker; - } - - /** - * Finds subscribers in a dynamic segment and returns their ids. - * - * @param DynamicSegment $dynamicSegment - * @param array $limitToSubscribersIds If passed the result will be limited only to ids within this array - * - * @return Subscriber[] - */ - public function load(DynamicSegment $dynamicSegment, $limitToSubscribersIds = null) { - $orm = Subscriber::selectExpr(Subscriber::$_table . '.id'); - if ($this->requirementsChecker->shouldSkipSegment($dynamicSegment)) { - return []; - } - foreach ($dynamicSegment->getFilters() as $filter) { - $orm = $filter->toSql($orm); - } - if ($limitToSubscribersIds) { - $orm->whereIn(Subscriber::$_table . '.id', $limitToSubscribersIds); - } - return $orm->findMany(); - } -} diff --git a/tests/integration/DynamicSegments/FreePluginConnectors/AddToNewslettersSegmentsTest.php b/tests/integration/DynamicSegments/FreePluginConnectors/AddToNewslettersSegmentsTest.php deleted file mode 100644 index 4a6794425f..0000000000 --- a/tests/integration/DynamicSegments/FreePluginConnectors/AddToNewslettersSegmentsTest.php +++ /dev/null @@ -1,60 +0,0 @@ -hydrate([ - 'name' => 'segment1', - 'description' => '', - ]); - - $segmentLoader = Stub::makeEmpty('\MailPoet\DynamicSegments\Persistence\Loading\Loader', ['load' => Expected::once(function () { - return []; - })]); - - $subscribersCountLoader = Stub::makeEmpty('\MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount', ['getSubscribersCount' => Expected::never()]); - - $filter = new AddToNewslettersSegments($segmentLoader, $subscribersCountLoader); - $result = $filter->add([$dynamicSegment]); - expect($result)->equals([$dynamicSegment]); - } - - public function testItAddsDynamicSegments() { - $dynamicSegment = DynamicSegment::create(); - $dynamicSegment->hydrate([ - 'name' => 'segment2', - 'description' => '', - 'id' => 1, - ]); - - $segmentLoader = Stub::makeEmpty('\MailPoet\DynamicSegments\Persistence\Loading\Loader', ['load' => Expected::once(function () use ($dynamicSegment) { - return [$dynamicSegment]; - })]); - - /** @var \MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount|MockObject $subscribersCountLoader */ - $subscribersCountLoader = Stub::makeEmpty('\MailPoet\DynamicSegments\Persistence\Loading\SubscribersCount', ['getSubscribersCount']); - $subscribersCountLoader - ->expects($this->once()) - ->method('getSubscribersCount') - ->with($this->equalTo($dynamicSegment)) - ->will($this->returnValue(4)); - - $filter = new AddToNewslettersSegments($segmentLoader, $subscribersCountLoader); - $result = $filter->add([]); - - expect($result)->count(1); - expect($result[0])->equals([ - 'id' => 1, - 'name' => 'segment2', - 'subscribers' => 4, - 'deleted_at' => null, - ]); - } -} diff --git a/tests/integration/DynamicSegments/Persistence/Loading/LoaderTest.php b/tests/integration/DynamicSegments/Persistence/Loading/LoaderTest.php deleted file mode 100644 index 93876fd2bb..0000000000 --- a/tests/integration/DynamicSegments/Persistence/Loading/LoaderTest.php +++ /dev/null @@ -1,89 +0,0 @@ -loader = new Loader(new DBMapper()); - ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table); - ORM::raw_execute('TRUNCATE ' . DynamicSegmentFilter::$_table); - $this->segments[] = DynamicSegment::createOrUpdate([ - 'name' => 'segment 1', - 'description' => 'description', - ]); - $this->segments[] = DynamicSegment::createOrUpdate([ - 'name' => 'segment 2', - 'description' => 'description', - ]); - $filter = new UserRole('Administrator', 'and'); - $filterData = DynamicSegmentFilter::create(); - $filterData->hydrate([ - 'segment_id' => $this->segments[1]->id, - 'filter_data' => $filter->toArray(), - ]); - $filterData->save(); - $filter = new UserRole('Editor', 'or'); - $filterData = DynamicSegmentFilter::create(); - $filterData->hydrate([ - 'segment_id' => $this->segments[0]->id, - 'filter_data' => $filter->toArray(), - ]); - $filterData->save(); - } - - public function testItLoadsSegments() { - $data = $this->loader->load(); - expect($data)->count(2); - expect($data[0])->isInstanceOf('\MailPoet\Models\DynamicSegment'); - expect($data[1])->isInstanceOf('\MailPoet\Models\DynamicSegment'); - } - - public function testItDoesNotLoadTrashedSegments() { - $this->segments[0]->trash(); - $data = $this->loader->load(); - expect($data)->count(1); - expect($data[0])->isInstanceOf('\MailPoet\Models\DynamicSegment'); - expect($data[0]->name)->equals('segment 2'); - } - - public function testItPopulatesCommonData() { - $data = $this->loader->load(); - expect($data[0]->name)->equals('segment 1'); - expect($data[1]->name)->equals('segment 2'); - expect($data[0]->description)->equals('description'); - expect($data[1]->description)->equals('description'); - } - - public function testItPopulatesFilters() { - $data = $this->loader->load(); - $filters0 = $data[0]->getFilters(); - $filters1 = $data[1]->getFilters(); - expect($filters0)->count(1); - expect($filters1)->count(1); - /** @var UserRole $filter0 */ - $filter0 = $filters0[0]; - /** @var UserRole $filter1 */ - $filter1 = $filters1[0]; - expect($filter0)->isInstanceOf('\MailPoet\DynamicSegments\Filters\UserRole'); - expect($filter1)->isInstanceOf('\MailPoet\DynamicSegments\Filters\UserRole'); - expect($filter0->getRole())->equals('Editor'); - expect($filter1->getRole())->equals('Administrator'); - } - - public function _after() { - ORM::raw_execute('TRUNCATE ' . DynamicSegment::$_table); - ORM::raw_execute('TRUNCATE ' . DynamicSegmentFilter::$_table); - } -} diff --git a/tests/integration/DynamicSegments/Persistence/Loading/SubscribersCountTest.php b/tests/integration/DynamicSegments/Persistence/Loading/SubscribersCountTest.php deleted file mode 100644 index d678e68d32..0000000000 --- a/tests/integration/DynamicSegments/Persistence/Loading/SubscribersCountTest.php +++ /dev/null @@ -1,71 +0,0 @@ -cleanData(); - $this->tester->createWordPressUser('user-role-test1@example.com', 'editor'); - $this->tester->createWordPressUser('user-role-test2@example.com', 'administrator'); - $this->tester->createWordPressUser('user-role-test3@example.com', 'editor'); - $this->requirementChecker = $this - ->getMockBuilder(RequirementsChecker::class) - ->setMethods(['shouldSkipSegment']) - ->getMock(); - } - - public function testItConstructsQuery() { - $this->requirementChecker->method('shouldSkipSegment')->willReturn(false); - $userRole = DynamicSegment::create(); - $subscriber1 = Subscriber::findOne('user-role-test1@example.com'); - $subscriber1->status = Subscriber::STATUS_SUBSCRIBED; - $subscriber1->save(); - $subscriber3 = Subscriber::findOne('user-role-test3@example.com'); - $subscriber3->status = Subscriber::STATUS_SUBSCRIBED; - $subscriber3->save(); - $userRole->hydrate([ - 'name' => 'segment', - 'description' => 'description', - ]); - $userRole->setFilters([new UserRole('editor', 'and')]); - - $loader = new SubscribersCount($this->requirementChecker); - $count = $loader->getSubscribersCount($userRole); - expect($count)->equals(2); - } - - public function testItSkipsIfRequirementNotMet() { - $this->requirementChecker->method('shouldSkipSegment')->willReturn(true); - $userRole = DynamicSegment::create(); - $userRole->hydrate([ - 'name' => 'segment', - 'description' => 'description', - ]); - $userRole->setFilters([new UserRole('editor', 'and')]); - - $loader = new SubscribersCount($this->requirementChecker); - $count = $loader->getSubscribersCount($userRole); - expect($count)->equals(0); - } - - public function _after() { - $this->cleanData(); - } - - private function cleanData() { - $emails = ['user-role-test1@example.com', 'user-role-test2@example.com', 'user-role-test3@example.com']; - foreach ($emails as $email) { - $this->tester->deleteWordPressUser($email); - } - } -} diff --git a/tests/integration/DynamicSegments/Persistence/Loading/SubscribersIdsTest.php b/tests/integration/DynamicSegments/Persistence/Loading/SubscribersIdsTest.php deleted file mode 100644 index 580f6e59c5..0000000000 --- a/tests/integration/DynamicSegments/Persistence/Loading/SubscribersIdsTest.php +++ /dev/null @@ -1,95 +0,0 @@ -cleanData(); - $this->editorsWpIds[] = wp_insert_user([ - 'user_login' => 'user-role-test1', - 'user_email' => 'user-role-test1@example.com', - 'role' => 'editor', - 'user_pass' => '12123154', - ]); - wp_insert_user([ - 'user_login' => 'user-role-test2', - 'user_email' => 'user-role-test2@example.com', - 'role' => 'administrator', - 'user_pass' => '12123154', - ]); - $this->editorsWpIds[] = wp_insert_user([ - 'user_login' => 'user-role-test3', - 'user_email' => 'user-role-test3@example.com', - 'role' => 'editor', - 'user_pass' => '12123154', - ]); - $this->requirementChecker = $this - ->getMockBuilder(RequirementsChecker::class) - ->setMethods(['shouldSkipSegment']) - ->getMock(); - } - - public function testItConstructsSubscribersIdQueryForAnyDynamicSegment() { - $this->requirementChecker->method('shouldSkipSegment')->willReturn(false); - $userRole = DynamicSegment::create(); - $userRole->hydrate([ - 'name' => 'segment', - 'description' => 'description', - ]); - $userRole->setFilters([new UserRole('editor', 'and')]); - $loader = new SubscribersIds($this->requirementChecker); - $result = $loader->load($userRole); - $wpIds = [ - Subscriber::findOne($result[0]->id)->wp_user_id, - Subscriber::findOne($result[1]->id)->wp_user_id, - ]; - $this->assertEquals($wpIds, $this->editorsWpIds, $message = '', $delta = 0.0, $maxDepth = 10, $canonicalize = true); - } - - public function testItSkipsConstructingSubscribersIdQueryForAnyDynamicSegmentIfRequirementsNotMet() { - $this->requirementChecker->method('shouldSkipSegment')->willReturn(true); - $userRole = DynamicSegment::create(); - $userRole->hydrate([ - 'name' => 'segment', - 'description' => 'description', - ]); - $userRole->setFilters([new UserRole('editor', 'and')]); - $loader = new SubscribersIds($this->requirementChecker); - $result = $loader->load($userRole); - expect($result)->isEmpty(); - } - - public function _after() { - $this->cleanData(); - } - - private function cleanData() { - $emails = ['user-role-test1@example.com', 'user-role-test2@example.com', 'user-role-test3@example.com']; - foreach ($emails as $email) { - $user = get_user_by('email', $email); - if (!$user) { - continue; - } - - if (is_multisite()) { - wpmu_delete_user($user->ID); - } else { - wp_delete_user($user->ID); - } - } - } -}