diff --git a/module/Core/src/Config/Options/RealTimeUpdatesOptions.php b/module/Core/src/Config/Options/RealTimeUpdatesOptions.php index 7e41f679..1800b92f 100644 --- a/module/Core/src/Config/Options/RealTimeUpdatesOptions.php +++ b/module/Core/src/Config/Options/RealTimeUpdatesOptions.php @@ -22,27 +22,26 @@ final readonly class RealTimeUpdatesOptions public function __construct(array|null $enabledTopics = null) { - $this->enabledTopics = $enabledTopics ?? Topic::allTopicNames(); + $validTopics = Topic::allTopicNames(); + $this->enabledTopics = $enabledTopics === null ? $validTopics : self::validateTopics( + $enabledTopics, + $validTopics, + ); } public static function fromEnv(): self { $enabledTopics = splitByComma(EnvVars::REAL_TIME_UPDATES_TOPICS->loadFromEnv()); - $validTopics = Topic::allTopicNames(); - - return new self( - enabledTopics: count($enabledTopics) === 0 ? $validTopics : self::topicsFromEnv($validTopics), - ); + return new self(enabledTopics: count($enabledTopics) === 0 ? null : $enabledTopics); } /** * @param string[] $validTopics * @return string[] */ - private static function topicsFromEnv(array $validTopics): array + private static function validateTopics(array $providedTopics, array $validTopics): array { - $topics = splitByComma(EnvVars::REAL_TIME_UPDATES_TOPICS->loadFromEnv()); - return map($topics, function (string $topic) use ($validTopics): string { + return map($providedTopics, function (string $topic) use ($validTopics): string { if (contains($topic, $validTopics)) { return $topic; } diff --git a/module/Core/test/Config/Options/RealTimeUpdatesOptionsTest.php b/module/Core/test/Config/Options/RealTimeUpdatesOptionsTest.php new file mode 100644 index 00000000..0e1634f1 --- /dev/null +++ b/module/Core/test/Config/Options/RealTimeUpdatesOptionsTest.php @@ -0,0 +1,41 @@ +enabledTopics); + } + + #[Test] + public function exceptionIsThrownIfAnyProvidedTopicIsInvalid(): void + { + $this->expectException(ValidationException::class); + new RealTimeUpdatesOptions(['NEW_SHORT_URL_VISIT', 'invalid']); + } + + #[Test] + public function checkingIfTopicIsEnabledWorks(): void + { + $options = new RealTimeUpdatesOptions(['NEW_ORPHAN_VISIT', 'NEW_SHORT_URL']); + + self::assertTrue($options->isTopicEnabled(Topic::NEW_ORPHAN_VISIT)); + self::assertTrue($options->isTopicEnabled(Topic::NEW_SHORT_URL)); + self::assertFalse($options->isTopicEnabled(Topic::NEW_VISIT)); + self::assertFalse($options->isTopicEnabled(Topic::NEW_SHORT_URL_VISIT)); + } +}