diff --git a/src/Write/Event/FeatureWasDisabled.php b/src/Write/Event/FeatureWasDisabled.php new file mode 100644 index 0000000..d9fa693 --- /dev/null +++ b/src/Write/Event/FeatureWasDisabled.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 185255f..b778da5 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\FeatureWasDisabled; use Pheature\Core\Toggle\Write\Event\FeatureWasCreated; use JsonSerializable; @@ -72,6 +73,7 @@ public function enable(): void public function disable(): void { $this->enabled = false; + $this->events[] = FeatureWasDisabled::occur($this->featureId->value()); } public function isEnabled(): bool diff --git a/test/Write/FeatureTest.php b/test/Write/FeatureTest.php index 8f449b4..ca926d8 100644 --- a/test/Write/FeatureTest.php +++ b/test/Write/FeatureTest.php @@ -4,6 +4,7 @@ namespace Pheature\Test\Core\Toggle\Write; +use Pheature\Core\Toggle\Write\Event\FeatureWasDisabled; use Pheature\Core\Toggle\Write\Feature; use Pheature\Core\Toggle\Write\FeatureId; use Pheature\Core\Toggle\Write\Strategy; @@ -62,7 +63,11 @@ public function testItShouldBeDisabled(): void $feature->disable(); $this->assertFalse($feature->isEnabled()); $events = $feature->release(); - $this->assertCount(1, $events); // Released FeatureWasCreated event + $this->assertCount(2, $events); // Released FeatureWasCreated event and FeatureWasDisabled event + $featureWasDisabledEvent = $events[1]; + $this->assertInstanceOf(FeatureWasDisabled::class, $featureWasDisabledEvent); + $this->assertSame(self::FEATURE_ID, $featureWasDisabledEvent->featureId()->value()); + $this->assertInstanceOf(DatetimeImmutable::class, $featureWasDisabledEvent->occurredAt()); } public function testItShouldSetAnStrategy(): void