Store time of change in SubscriberChangesNotifier

[MAILPOET-4727]
This commit is contained in:
Jan Lysý
2022-10-20 17:49:17 +02:00
committed by Veljko V
parent 8d5c07a317
commit 6f89b47b30
2 changed files with 47 additions and 36 deletions

View File

@@ -4,16 +4,17 @@ namespace MailPoet\Config;
use MailPoet\Entities\SubscriberEntity; use MailPoet\Entities\SubscriberEntity;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
class SubscriberChangesNotifier { class SubscriberChangesNotifier {
/** @var int[] */ /** @var array<int, Carbon> */
private $createdSubscriberIds = []; private $createdSubscriberIds = [];
/** @var int[] */ /** @var array<int, Carbon> */
private $deletedSubscriberIds = []; private $deletedSubscriberIds = [];
/** @var int[] */ /** @var array<int, Carbon> */
private $updatedSubscriberIds = []; private $updatedSubscriberIds = [];
/** @var WPFunctions */ /** @var WPFunctions */
@@ -32,39 +33,39 @@ class SubscriberChangesNotifier {
} }
private function notifyCreations(): void { private function notifyCreations(): void {
foreach ($this->createdSubscriberIds as $subscriberId) { foreach ($this->createdSubscriberIds as $subscriberId => $createdAt) {
$this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, $subscriberId); $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, $subscriberId, $createdAt->getTimestamp());
} }
} }
private function notifyUpdates(): void { private function notifyUpdates(): void {
foreach ($this->updatedSubscriberIds as $subscriberId) { foreach ($this->updatedSubscriberIds as $subscriberId => $updatedAt) {
// do not notify about changes when subscriber is new // do not notify about changes when subscriber is new
if (in_array($subscriberId, $this->createdSubscriberIds, true)) { if (isset($this->createdSubscriberIds[$subscriberId])) {
continue; continue;
} }
$this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, $subscriberId); $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, $subscriberId, $updatedAt->getTimestamp());
} }
} }
private function notifyDeletes(): void { private function notifyDeletes(): void {
foreach ($this->deletedSubscriberIds as $subscriberId) { foreach ($this->deletedSubscriberIds as $subscriberId => $deletedAt) {
$this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, $subscriberId); $this->wp->doAction(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, $subscriberId, $deletedAt->getTimestamp());
} }
} }
public function subscriberCreated(int $subscriberId): void { public function subscriberCreated(int $subscriberId): void {
// to avoid duplicities we use id as a key // store id as a key and timestamp change as the value
$this->createdSubscriberIds[$subscriberId] = $subscriberId; $this->createdSubscriberIds[$subscriberId] = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'), 'UTC');
} }
public function subscriberUpdated(int $subscriberId): void { public function subscriberUpdated(int $subscriberId): void {
// to avoid duplicities we use id as a key // store id as a key and timestamp change as the value
$this->updatedSubscriberIds[$subscriberId] = $subscriberId; $this->updatedSubscriberIds[$subscriberId] = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'), 'UTC');
} }
public function subscriberDeleted(int $subscriberId): void { public function subscriberDeleted(int $subscriberId): void {
// to avoid duplicities we use id as a key // store id as a key and timestamp change as the value
$this->deletedSubscriberIds[$subscriberId] = $subscriberId; $this->deletedSubscriberIds[$subscriberId] = Carbon::createFromTimestamp($this->wp->currentTime('timestamp'), 'UTC');
} }
} }

View File

@@ -17,14 +17,16 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest {
} }
public function testItNotifyCreatedSubscriberIds(): void { public function testItNotifyCreatedSubscriberIds(): void {
$this->wpFunctions->expects($this->at(0)) $this->wpFunctions->method('currentTime')
->willReturn(1234);
$this->wpFunctions->expects($this->at(2))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 6) ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 6, 1234)
->willReturn(true); ->willReturn(true);
$this->wpFunctions->expects($this->at(1)) $this->wpFunctions->expects($this->at(3))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 10) ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 10, 1234)
->willReturn(true); ->willReturn(true);
$notifier = new SubscriberChangesNotifier($this->wpFunctions); $notifier = new SubscriberChangesNotifier($this->wpFunctions);
@@ -34,14 +36,16 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest {
} }
public function testItNotifyUpdatedSubscriberIds(): void { public function testItNotifyUpdatedSubscriberIds(): void {
$this->wpFunctions->expects($this->at(0)) $this->wpFunctions->method('currentTime')
->willReturn(4567);
$this->wpFunctions->expects($this->at(2))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 2) ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 2, 4567)
->willReturn(true); ->willReturn(true);
$this->wpFunctions->expects($this->at(1)) $this->wpFunctions->expects($this->at(3))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 11) ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 11, 4567)
->willReturn(true); ->willReturn(true);
$notifier = new SubscriberChangesNotifier($this->wpFunctions); $notifier = new SubscriberChangesNotifier($this->wpFunctions);
@@ -51,14 +55,16 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest {
} }
public function testItNotifyDeletedSubscriberIds(): void { public function testItNotifyDeletedSubscriberIds(): void {
$this->wpFunctions->expects($this->at(0)) $this->wpFunctions->method('currentTime')
->willReturn(3456);
$this->wpFunctions->expects($this->at(2))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 1) ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 1, 3456)
->willReturn(true); ->willReturn(true);
$this->wpFunctions->expects($this->at(1)) $this->wpFunctions->expects($this->at(3))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 12) ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 12, 3456)
->willReturn(true); ->willReturn(true);
$notifier = new SubscriberChangesNotifier($this->wpFunctions); $notifier = new SubscriberChangesNotifier($this->wpFunctions);
@@ -68,19 +74,21 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest {
} }
public function testItNotifyDifferentSubscriberChanges(): void { public function testItNotifyDifferentSubscriberChanges(): void {
$this->wpFunctions->expects($this->at(0)) $this->wpFunctions->method('currentTime')
->willReturn(12345);
$this->wpFunctions->expects($this->at(3))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 1) ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 1, 12345)
->willReturn(true); ->willReturn(true);
$this->wpFunctions->expects($this->at(1)) $this->wpFunctions->expects($this->at(4))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 3) ->with(SubscriberEntity::HOOK_SUBSCRIBER_UPDATED, 3, 12345)
->willReturn(true); ->willReturn(true);
$this->wpFunctions->expects($this->at(2)) $this->wpFunctions->expects($this->at(5))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 5) ->with(SubscriberEntity::HOOK_SUBSCRIBER_DELETED, 5, 12345)
->willReturn(true); ->willReturn(true);
$notifier = new SubscriberChangesNotifier($this->wpFunctions); $notifier = new SubscriberChangesNotifier($this->wpFunctions);
@@ -91,9 +99,11 @@ class SubscriberChangesNotifierTest extends \MailPoetUnitTest {
} }
public function testItNotifyUpdateForCreatedSubscriber(): void { public function testItNotifyUpdateForCreatedSubscriber(): void {
$this->wpFunctions->expects($this->once()) $this->wpFunctions->method('currentTime')
->willReturn(1235);
$this->wpFunctions->expects($this->at(2))
->method('doAction') ->method('doAction')
->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 11) ->with(SubscriberEntity::HOOK_SUBSCRIBER_CREATED, 11, 1235)
->willReturn(true); ->willReturn(true);
$notifier = new SubscriberChangesNotifier($this->wpFunctions); $notifier = new SubscriberChangesNotifier($this->wpFunctions);