Skip to content

Commit

Permalink
[#28] Create FeatureWasRemoved event and record it inside Feature Class
Browse files Browse the repository at this point in the history
  • Loading branch information
xserrat committed Oct 6, 2021
1 parent cd9e384 commit 633ff8b
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/Write/Event/FeatureWasRemoved.php
@@ -0,0 +1,35 @@
<?php

declare(strict_types=1);

namespace Pheature\Core\Toggle\Write\Event;

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

final class FeatureWasRemoved
{
private string $featureId;
private DatetimeImmutable $occurredAt;

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

0 comments on commit 633ff8b

Please sign in to comment.