diff --git a/src/Write/Event/FeatureWasRemoved.php b/src/Write/Event/FeatureWasRemoved.php new file mode 100644 index 0000000..4fd6a73 --- /dev/null +++ b/src/Write/Event/FeatureWasRemoved.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 1916ae5..220e5a3 100644 --- a/src/Write/Feature.php +++ b/src/Write/Feature.php @@ -8,6 +8,7 @@ use Pheature\Core\Toggle\Write\Event\FeatureWasDisabled; use Pheature\Core\Toggle\Write\Event\FeatureWasCreated; use JsonSerializable; +use Pheature\Core\Toggle\Write\Event\FeatureWasRemoved; use function array_map; use function array_values; @@ -78,6 +79,11 @@ public function disable(): void $this->events[] = FeatureWasDisabled::occur($this->featureId->value()); } + public function remove(): void + { + $this->events[] = FeatureWasRemoved::occur($this->featureId->value()); + } + public function isEnabled(): bool { return $this->enabled; diff --git a/test/Write/FeatureTest.php b/test/Write/FeatureTest.php index e9788f1..35c142d 100644 --- a/test/Write/FeatureTest.php +++ b/test/Write/FeatureTest.php @@ -6,6 +6,7 @@ use Pheature\Core\Toggle\Write\Event\FeatureWasDisabled; use Pheature\Core\Toggle\Write\Event\FeatureWasEnabled; +use Pheature\Core\Toggle\Write\Event\FeatureWasRemoved; use Pheature\Core\Toggle\Write\Feature; use Pheature\Core\Toggle\Write\FeatureId; use Pheature\Core\Toggle\Write\Strategy; @@ -120,6 +121,20 @@ public function testItShouldStoreAFeatureWasCreatedEventWhenNewFeatureIsCreated( $this->assertInstanceOf(DatetimeImmutable::class, $featureWasCreatedEvent->occurredAt()); } + public function testItShouldStoreAFeatureWasRemovedWhenItIsRemoved(): void + { + $feature = $this->createFeature(); + $feature->remove(); + + $events = $feature->release(); + $this->assertCount(1, $events); + $this->assertEventIsRecorded(FeatureWasRemoved::class, $events); + + $featureWasRemovedEvent = $events[0]; + $this->assertSame(self::FEATURE_ID, $featureWasRemovedEvent->featureId()->value()); + $this->assertInstanceOf(DatetimeImmutable::class, $featureWasRemovedEvent->occurredAt()); + } + private function createFeature(?bool $enabled = null, ?array $strategies = null): Feature { return new Feature(