From f88494f2dfaf133e81f1d72ffa564d3b5b67f3aa Mon Sep 17 00:00:00 2001 From: vblinden Date: Mon, 4 Oct 2021 11:41:46 +0200 Subject: [PATCH] Add feature was enabled event --- src/Write/Event/FeatureWasEnabled.php | 35 +++++++++++++++++++++++++++ src/Write/Feature.php | 2 ++ test/Write/FeatureTest.php | 14 ++++++++--- 3 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/Write/Event/FeatureWasEnabled.php diff --git a/src/Write/Event/FeatureWasEnabled.php b/src/Write/Event/FeatureWasEnabled.php new file mode 100644 index 0000000..edab2d1 --- /dev/null +++ b/src/Write/Event/FeatureWasEnabled.php @@ -0,0 +1,35 @@ +featureId = $featureId; + $this->occurredAt = $occurredAt; + } + + public static function occur(string $featureId): self + { + return new self($featureId, new DatetimeImmutable()); + } + + public function featureId(): FeatureId + { + return FeatureId::fromString($this->featureId); + } + + public function occurredAt(): DatetimeImmutable + { + return $this->occurredAt; + } +} diff --git a/src/Write/Feature.php b/src/Write/Feature.php index b778da5..1916ae5 100644 --- a/src/Write/Feature.php +++ b/src/Write/Feature.php @@ -4,6 +4,7 @@ namespace Pheature\Core\Toggle\Write; +use Pheature\Core\Toggle\Write\Event\FeatureWasEnabled; use Pheature\Core\Toggle\Write\Event\FeatureWasDisabled; use Pheature\Core\Toggle\Write\Event\FeatureWasCreated; use JsonSerializable; @@ -68,6 +69,7 @@ public function removeStrategy(StrategyId $strategyId): void public function enable(): void { $this->enabled = true; + $this->events[] = FeatureWasEnabled::occur($this->featureId->value()); } public function disable(): void diff --git a/test/Write/FeatureTest.php b/test/Write/FeatureTest.php index ca926d8..1e6db5a 100644 --- a/test/Write/FeatureTest.php +++ b/test/Write/FeatureTest.php @@ -5,6 +5,7 @@ namespace Pheature\Test\Core\Toggle\Write; use Pheature\Core\Toggle\Write\Event\FeatureWasDisabled; +use Pheature\Core\Toggle\Write\Event\FeatureWasEnabled; use Pheature\Core\Toggle\Write\Feature; use Pheature\Core\Toggle\Write\FeatureId; use Pheature\Core\Toggle\Write\Strategy; @@ -53,7 +54,11 @@ public function testItShouldBeEnabled(): void $feature->enable(); $this->assertTrue($feature->isEnabled()); $events = $feature->release(); - $this->assertCount(1, $events); // Released FeatureWasCreated event + $this->assertCount(2, $events); // Released FeatureWasCreated event and FeatureWasEnabled event + $featureWasEnabledEvent = $events[1]; + $this->assertInstanceOf(FeatureWasEnabled::class, $featureWasEnabledEvent); + $this->assertSame(self::FEATURE_ID, $featureWasEnabledEvent->featureId()->value()); + $this->assertInstanceOf(DatetimeImmutable::class, $featureWasEnabledEvent->occurredAt()); } public function testItShouldBeDisabled(): void @@ -63,8 +68,11 @@ public function testItShouldBeDisabled(): void $feature->disable(); $this->assertFalse($feature->isEnabled()); $events = $feature->release(); - $this->assertCount(2, $events); // Released FeatureWasCreated event and FeatureWasDisabled event - $featureWasDisabledEvent = $events[1]; + // Released FeatureWasCreated event, + // FeatureWasEnabled event, + // FeatureWasDisabled event + $this->assertCount(3, $events); + $featureWasDisabledEvent = $events[2]; $this->assertInstanceOf(FeatureWasDisabled::class, $featureWasDisabledEvent); $this->assertSame(self::FEATURE_ID, $featureWasDisabledEvent->featureId()->value()); $this->assertInstanceOf(DatetimeImmutable::class, $featureWasDisabledEvent->occurredAt());