diff --git a/src/Write/Event/StrategyWasRemoved.php b/src/Write/Event/StrategyWasRemoved.php new file mode 100644 index 0000000..1679e6b --- /dev/null +++ b/src/Write/Event/StrategyWasRemoved.php @@ -0,0 +1,43 @@ +featureId = $featureId; + $this->strategyId = $strategyId; + $this->occurredAt = $occurredAt; + } + + public static function occur(string $featureId, string $strategyId): self + { + return new self($featureId, $strategyId, new DatetimeImmutable()); + } + + public function featureId(): FeatureId + { + return FeatureId::fromString($this->featureId); + } + + public function strategyId(): StrategyId + { + return StrategyId::fromString($this->strategyId); + } + + public function occurredAt(): DatetimeImmutable + { + return $this->occurredAt; + } +} diff --git a/src/Write/Feature.php b/src/Write/Feature.php index 220e5a3..044c322 100644 --- a/src/Write/Feature.php +++ b/src/Write/Feature.php @@ -9,6 +9,7 @@ use Pheature\Core\Toggle\Write\Event\FeatureWasCreated; use JsonSerializable; use Pheature\Core\Toggle\Write\Event\FeatureWasRemoved; +use Pheature\Core\Toggle\Write\Event\StrategyWasRemoved; use function array_map; use function array_values; @@ -65,6 +66,7 @@ public function setStrategy(Strategy $strategy): void public function removeStrategy(StrategyId $strategyId): void { unset($this->strategies[$strategyId->value()]); + $this->events[] = StrategyWasRemoved::occur($this->featureId->value(), $strategyId->value()); } public function enable(): void diff --git a/test/Write/FeatureTest.php b/test/Write/FeatureTest.php index 35c142d..f4fc181 100644 --- a/test/Write/FeatureTest.php +++ b/test/Write/FeatureTest.php @@ -7,6 +7,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\Event\StrategyWasRemoved; use Pheature\Core\Toggle\Write\Feature; use Pheature\Core\Toggle\Write\FeatureId; use Pheature\Core\Toggle\Write\Strategy; @@ -96,7 +97,7 @@ public function testItShouldSetAnStrategy(): void $this->assertCount(0, $events); } - public function testItShouldRemoveAnStrategies(): void + public function testItShouldRemoveAnStrategy(): void { $feature = $this->createFeatureWithAnStrategy(); $this->assertCount(1, $feature->strategies()); @@ -105,7 +106,12 @@ public function testItShouldRemoveAnStrategies(): void $this->assertCount(0, $feature->strategies()); $events = $feature->release(); - $this->assertCount(0, $events); + $this->assertCount(1, $events); + $this->assertEventIsRecorded(StrategyWasRemoved::class, $events); + $strategyWasRemoved = $events[0]; + $this->assertSame(self::FEATURE_ID, $strategyWasRemoved->featureId()->value()); + $this->assertSame(self::STRATEGY_ID, $strategyWasRemoved->strategyId()->value()); + $this->assertInstanceOf(DatetimeImmutable::class, $strategyWasRemoved->occurredAt()); } public function testItShouldStoreAFeatureWasCreatedEventWhenNewFeatureIsCreated(): void