Skip to content

Commit

Permalink
[#18] Add StrategyWasRemoved event
Browse files Browse the repository at this point in the history
  • Loading branch information
kpicaza committed Nov 4, 2021
1 parent 205ba73 commit cdc2a61
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 2 deletions.
43 changes: 43 additions & 0 deletions src/Write/Event/StrategyWasRemoved.php
@@ -0,0 +1,43 @@
<?php

declare(strict_types=1);

namespace Pheature\Core\Toggle\Write\Event;

use DateTimeImmutable;
use Pheature\Core\Toggle\Write\FeatureId;
use Pheature\Core\Toggle\Write\StrategyId;

final class StrategyWasRemoved
{
private string $featureId;
private string $strategyId;
private DatetimeImmutable $occurredAt;

public function __construct(string $featureId, string $strategyId, DatetimeImmutable $occurredAt)
{
$this->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;
}
}
2 changes: 2 additions & 0 deletions src/Write/Feature.php
Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down
10 changes: 8 additions & 2 deletions test/Write/FeatureTest.php
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
Expand All @@ -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
Expand Down

0 comments on commit cdc2a61

Please sign in to comment.