mirror of
https://github.com/shlinkio/shlink.git
synced 2025-12-10 00:10:57 -06:00
Add RealTimeUpdatesOptions test
This commit is contained in:
parent
f4aaf02d55
commit
26fef87f3b
@ -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;
|
||||
}
|
||||
|
||||
@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Config\Options;
|
||||
|
||||
use PHPUnit\Framework\Attributes\Test;
|
||||
use PHPUnit\Framework\Attributes\TestWith;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Shlinkio\Shlink\Core\Config\Options\RealTimeUpdatesOptions;
|
||||
use Shlinkio\Shlink\Core\EventDispatcher\Topic;
|
||||
use Shlinkio\Shlink\Core\Exception\ValidationException;
|
||||
|
||||
class RealTimeUpdatesOptionsTest extends TestCase
|
||||
{
|
||||
#[Test]
|
||||
#[TestWith([null, ['NEW_VISIT', 'NEW_SHORT_URL_VISIT', 'NEW_ORPHAN_VISIT', 'NEW_SHORT_URL']])]
|
||||
#[TestWith([['NEW_VISIT'], ['NEW_VISIT']])]
|
||||
#[TestWith([['NEW_SHORT_URL_VISIT', 'NEW_ORPHAN_VISIT'], ['NEW_SHORT_URL_VISIT', 'NEW_ORPHAN_VISIT']])]
|
||||
public function expectedTopicsAreResolved(array|null $providedTopics, array $expectedTopics): void
|
||||
{
|
||||
$options = new RealTimeUpdatesOptions($providedTopics);
|
||||
self::assertEquals($expectedTopics, $options->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));
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user