From 6f89b47b30906fb2a2817d8529ce619242e3d1e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Lys=C3=BD?= Date: Thu, 20 Oct 2022 17:49:17 +0200 Subject: [PATCH] Store time of change in SubscriberChangesNotifier [MAILPOET-4727] --- .../lib/Config/SubscriberChangesNotifier.php | 33 ++++++------ .../Config/SubscriberChangesNotifierTest.php | 50 +++++++++++-------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/mailpoet/lib/Config/SubscriberChangesNotifier.php b/mailpoet/lib/Config/SubscriberChangesNotifier.php index 24594da131..f94a9dcb8b 100644 --- a/mailpoet/lib/Config/SubscriberChangesNotifier.php +++ b/mailpoet/lib/Config/SubscriberChangesNotifier.php @@ -4,16 +4,17 @@ namespace MailPoet\Config; use MailPoet\Entities\SubscriberEntity; use MailPoet\WP\Functions as WPFunctions; +use MailPoetVendor\Carbon\Carbon; class SubscriberChangesNotifier { - /** @var int[] */ + /** @var array */ private $createdSubscriberIds = []; - /** @var int[] */ + /** @var array */ private $deletedSubscriberIds = []; - /** @var int[] */ + /** @var array */ private $updatedSubscriberIds = []; /** @var WPFunctions */ @@ -32,39 +33,39 @@ class SubscriberChangesNotifier { } private function notifyCreations(): void { - foreach ($this->createdSubscriberIds as $subscriberId) { - $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, $subscriberId); + foreach ($this->createdSubscriberIds as $subscriberId => $createdAt) { + $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, $subscriberId, $createdAt->getTimestamp()); } } private function notifyUpdates(): void { - foreach ($this->updatedSubscriberIds as $subscriberId) { + foreach ($this->updatedSubscriberIds as $subscriberId => $updatedAt) { // do not notify about changes when subscriber is new - if (in_array($subscriberId, $this->createdSubscriberIds, true)) { + if (isset($this->createdSubscriberIds[$subscriberId])) { continue; } - $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, $subscriberId); + $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, $subscriberId, $updatedAt->getTimestamp()); } } private function notifyDeletes(): void { - foreach ($this->deletedSubscriberIds as $subscriberId) { - $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, $subscriberId); + foreach ($this->deletedSubscriberIds as $subscriberId => $deletedAt) { + $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, $subscriberId, $deletedAt->getTimestamp()); } } public function subscriberCreated(int $subscriberId): void { - // to avoid duplicities we use id as a key - $this->createdSubscriberIds[$subscriberId] = $subscriberId; + // store id as a key and timestamp change as the value + $this->createdSubscriberIds[$subscriberId] = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'), 'UTC'); } public function subscriberUpdated(int $subscriberId): void { - // to avoid duplicities we use id as a key - $this->updatedSubscriberIds[$subscriberId] = $subscriberId; + // store id as a key and timestamp change as the value + $this->updatedSubscriberIds[$subscriberId] = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'), 'UTC'); } public function subscriberDeleted(int $subscriberId): void { - // to avoid duplicities we use id as a key - $this->deletedSubscriberIds[$subscriberId] = $subscriberId; + // store id as a key and timestamp change as the value + $this->deletedSubscriberIds[$subscriberId] = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'), 'UTC'); } } diff --git a/mailpoet/tests/unit/Config/SubscriberChangesNotifierTest.php b/mailpoet/tests/unit/Config/SubscriberChangesNotifierTest.php index b4f4979706..72981792b5 100644 --- a/mailpoet/tests/unit/Config/SubscriberChangesNotifierTest.php +++ b/mailpoet/tests/unit/Config/SubscriberChangesNotifierTest.php @@ -17,14 +17,16 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest { } public function testItNotifyCreatedSubscriberIds(): void { - $this->wpFunctions->expects($this->at(0)) + $this->wpFunctions->method('currentTime') + ->willReturn(1234); + $this->wpFunctions->expects($this->at(2)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 6) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 6, 1234) ->willReturn(true); - $this->wpFunctions->expects($this->at(1)) + $this->wpFunctions->expects($this->at(3)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 10) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 10, 1234) ->willReturn(true); $notifier = new SubscriberChangesNotifier($this->wpFunctions); @@ -34,14 +36,16 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest { } public function testItNotifyUpdatedSubscriberIds(): void { - $this->wpFunctions->expects($this->at(0)) + $this->wpFunctions->method('currentTime') + ->willReturn(4567); + $this->wpFunctions->expects($this->at(2)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 2) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 2, 4567) ->willReturn(true); - $this->wpFunctions->expects($this->at(1)) + $this->wpFunctions->expects($this->at(3)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 11) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 11, 4567) ->willReturn(true); $notifier = new SubscriberChangesNotifier($this->wpFunctions); @@ -51,14 +55,16 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest { } public function testItNotifyDeletedSubscriberIds(): void { - $this->wpFunctions->expects($this->at(0)) + $this->wpFunctions->method('currentTime') + ->willReturn(3456); + $this->wpFunctions->expects($this->at(2)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 1) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 1, 3456) ->willReturn(true); - $this->wpFunctions->expects($this->at(1)) + $this->wpFunctions->expects($this->at(3)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 12) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 12, 3456) ->willReturn(true); $notifier = new SubscriberChangesNotifier($this->wpFunctions); @@ -68,19 +74,21 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest { } public function testItNotifyDifferentSubscriberChanges(): void { - $this->wpFunctions->expects($this->at(0)) + $this->wpFunctions->method('currentTime') + ->willReturn(12345); + $this->wpFunctions->expects($this->at(3)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 1) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 1, 12345) ->willReturn(true); - $this->wpFunctions->expects($this->at(1)) + $this->wpFunctions->expects($this->at(4)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 3) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 3, 12345) ->willReturn(true); - $this->wpFunctions->expects($this->at(2)) + $this->wpFunctions->expects($this->at(5)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 5) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 5, 12345) ->willReturn(true); $notifier = new SubscriberChangesNotifier($this->wpFunctions); @@ -91,9 +99,11 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest { } public function testItNotifyUpdateForCreatedSubscriber(): void { - $this->wpFunctions->expects($this->once()) + $this->wpFunctions->method('currentTime') + ->willReturn(1235); + $this->wpFunctions->expects($this->at(2)) ->method('doAction') - ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 11) + ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 11, 1235) ->willReturn(true); $notifier = new SubscriberChangesNotifier($this->wpFunctions);