mirror of
https://github.com/shlinkio/shlink.git
synced 2025-03-27 03:51:53 +03:00
Extended NotifyVisitToRabbitMqTest covering legacy and non-legacy use-cases
This commit is contained in:
parent
6ce2049935
commit
19b0f0d7dc
1 changed files with 81 additions and 10 deletions
|
@ -7,6 +7,7 @@ namespace ShlinkioTest\Shlink\Core\EventDispatcher\RabbitMq;
|
||||||
use Doctrine\ORM\EntityManagerInterface;
|
use Doctrine\ORM\EntityManagerInterface;
|
||||||
use DomainException;
|
use DomainException;
|
||||||
use Exception;
|
use Exception;
|
||||||
|
use PHPUnit\Framework\Assert;
|
||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Prophecy\Argument;
|
use Prophecy\Argument;
|
||||||
use Prophecy\PhpUnit\ProphecyTrait;
|
use Prophecy\PhpUnit\ProphecyTrait;
|
||||||
|
@ -37,12 +38,14 @@ class NotifyVisitToRabbitMqTest extends TestCase
|
||||||
private ObjectProphecy $helper;
|
private ObjectProphecy $helper;
|
||||||
private ObjectProphecy $em;
|
private ObjectProphecy $em;
|
||||||
private ObjectProphecy $logger;
|
private ObjectProphecy $logger;
|
||||||
|
private RabbitMqOptions $options;
|
||||||
|
|
||||||
protected function setUp(): void
|
protected function setUp(): void
|
||||||
{
|
{
|
||||||
$this->helper = $this->prophesize(RabbitMqPublishingHelperInterface::class);
|
$this->helper = $this->prophesize(RabbitMqPublishingHelperInterface::class);
|
||||||
$this->em = $this->prophesize(EntityManagerInterface::class);
|
$this->em = $this->prophesize(EntityManagerInterface::class);
|
||||||
$this->logger = $this->prophesize(LoggerInterface::class);
|
$this->logger = $this->prophesize(LoggerInterface::class);
|
||||||
|
$this->options = new RabbitMqOptions(['enabled' => true, 'legacy_visits_publishing' => true]);
|
||||||
|
|
||||||
$this->listener = new NotifyVisitToRabbitMq(
|
$this->listener = new NotifyVisitToRabbitMq(
|
||||||
$this->helper->reveal(),
|
$this->helper->reveal(),
|
||||||
|
@ -50,23 +53,16 @@ class NotifyVisitToRabbitMqTest extends TestCase
|
||||||
$this->logger->reveal(),
|
$this->logger->reveal(),
|
||||||
new OrphanVisitDataTransformer(),
|
new OrphanVisitDataTransformer(),
|
||||||
new ShortUrlDataTransformer(new ShortUrlStringifier([])),
|
new ShortUrlDataTransformer(new ShortUrlStringifier([])),
|
||||||
new RabbitMqOptions(['enabled' => true, 'legacy_visits_publishing' => true]),
|
$this->options,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @test */
|
/** @test */
|
||||||
public function doesNothingWhenTheFeatureIsNotEnabled(): void
|
public function doesNothingWhenTheFeatureIsNotEnabled(): void
|
||||||
{
|
{
|
||||||
$listener = new NotifyVisitToRabbitMq(
|
$this->options->enabled = false;
|
||||||
$this->helper->reveal(),
|
|
||||||
$this->em->reveal(),
|
|
||||||
$this->logger->reveal(),
|
|
||||||
new OrphanVisitDataTransformer(),
|
|
||||||
new ShortUrlDataTransformer(new ShortUrlStringifier([])),
|
|
||||||
new RabbitMqOptions(['enabled' => false, 'legacy_visits_publishing' => true]),
|
|
||||||
);
|
|
||||||
|
|
||||||
$listener(new VisitLocated('123'));
|
($this->listener)(new VisitLocated('123'));
|
||||||
|
|
||||||
$this->em->find(Argument::cetera())->shouldNotHaveBeenCalled();
|
$this->em->find(Argument::cetera())->shouldNotHaveBeenCalled();
|
||||||
$this->logger->warning(Argument::cetera())->shouldNotHaveBeenCalled();
|
$this->logger->warning(Argument::cetera())->shouldNotHaveBeenCalled();
|
||||||
|
@ -157,4 +153,79 @@ class NotifyVisitToRabbitMqTest extends TestCase
|
||||||
yield [new Exception('Exception Error')];
|
yield [new Exception('Exception Error')];
|
||||||
yield [new DomainException('DomainException Error')];
|
yield [new DomainException('DomainException Error')];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
* @dataProvider provideLegacyPayloads
|
||||||
|
*/
|
||||||
|
public function expectedPayloadIsPublishedDependingOnConfig(
|
||||||
|
bool $legacy,
|
||||||
|
Visit $visit,
|
||||||
|
callable $assertPayload,
|
||||||
|
): void {
|
||||||
|
$this->options->legacyVisitsPublishing = $legacy;
|
||||||
|
|
||||||
|
$visitId = '123';
|
||||||
|
$findVisit = $this->em->find(Visit::class, $visitId)->willReturn($visit);
|
||||||
|
|
||||||
|
($this->listener)(new VisitLocated($visitId));
|
||||||
|
|
||||||
|
$findVisit->shouldHaveBeenCalledOnce();
|
||||||
|
$this->helper->publishPayloadInQueue(Argument::that($assertPayload), Argument::type('string'))
|
||||||
|
->shouldHaveBeenCalled();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideLegacyPayloads(): iterable
|
||||||
|
{
|
||||||
|
yield 'non-legacy non-orphan visit' => [
|
||||||
|
true,
|
||||||
|
$visit = Visit::forValidShortUrl(ShortUrl::withLongUrl(''), Visitor::emptyInstance()),
|
||||||
|
function (array $payload) use ($visit): bool {
|
||||||
|
Assert::assertEquals($payload, $visit->jsonSerialize());
|
||||||
|
Assert::assertArrayNotHasKey('visitedUrl', $payload);
|
||||||
|
Assert::assertArrayNotHasKey('type', $payload);
|
||||||
|
Assert::assertArrayNotHasKey('visit', $payload);
|
||||||
|
Assert::assertArrayNotHasKey('shortUrl', $payload);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
];
|
||||||
|
yield 'non-legacy orphan visit' => [
|
||||||
|
true,
|
||||||
|
Visit::forBasePath(Visitor::emptyInstance()),
|
||||||
|
function (array $payload): bool {
|
||||||
|
Assert::assertArrayHasKey('visitedUrl', $payload);
|
||||||
|
Assert::assertArrayHasKey('type', $payload);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
];
|
||||||
|
yield 'legacy non-orphan visit' => [
|
||||||
|
false,
|
||||||
|
$visit = Visit::forValidShortUrl(ShortUrl::withLongUrl(''), Visitor::emptyInstance()),
|
||||||
|
function (array $payload) use ($visit): bool {
|
||||||
|
Assert::assertArrayHasKey('visit', $payload);
|
||||||
|
Assert::assertArrayHasKey('shortUrl', $payload);
|
||||||
|
Assert::assertIsArray($payload['visit']);
|
||||||
|
Assert::assertEquals($payload['visit'], $visit->jsonSerialize());
|
||||||
|
Assert::assertArrayNotHasKey('visitedUrl', ['visit']);
|
||||||
|
Assert::assertArrayNotHasKey('type', ['visit']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
];
|
||||||
|
yield 'legacy orphan visit' => [
|
||||||
|
false,
|
||||||
|
Visit::forBasePath(Visitor::emptyInstance()),
|
||||||
|
function (array $payload): bool {
|
||||||
|
Assert::assertArrayHasKey('visit', $payload);
|
||||||
|
Assert::assertArrayNotHasKey('shortUrl', $payload);
|
||||||
|
Assert::assertIsArray($payload['visit']);
|
||||||
|
Assert::assertArrayHasKey('visitedUrl', $payload['visit']);
|
||||||
|
Assert::assertArrayHasKey('type', $payload['visit']);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue