8000 Add tests · brefphp/symfony-messenger@4d096bf · GitHub
[go: up one dir, main page]

Skip to content

Commit 4d096bf

Browse files
author
Thibaut Cholley
committed
Add tests
1 parent c87b66a commit 4d096bf

File tree

7 files changed

+123
-5
lines changed

7 files changed

+123
-5
lines changed

compose.yaml

Whitespace-only changes.

src/Resources/config/services.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ services:
2020
class: AsyncAws\Sns\SnsClient
2121

2222
# SQS
23-
Bref\Symfony\Messenger\Service\Sqs\SQSMessengerTransportConfiguration:
23+
Bref\Symfony\Messenger\Service\Sqs\SQSMessengerTransportConfigurationInterface:
24+
class: Bref\Symfony\Messenger\Service\Sqs\SQSMessengerTransportConfiguration
2425
arguments:
2526
$messengerTransportsConfiguration: '%messenger.transports%'
2627

2728
Bref\Symfony\Messenger\Service\Sqs\SqsTransportNameResolver:
2829
arguments:
29-
- '@Bref\Symfony\Messenger\Service\Sqs\SQSMessengerTransportConfiguration'
30+
- '@Bref\Symfony\Messenger\Service\Sqs\SQSMessengerTransportConfigurationInterface'
3031

3132
# EventBridge
3233
Bref\Symfony\Messenger\Service\EventBridge\EventBridgeTransportFactory:

src/Service/Sqs/SQSMessengerTransportConfiguration.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
use InvalidArgumentException;
66

7-
final class SQSMessengerTransportConfiguration
7+
final class SQSMessengerTransportConfiguration implements SQSMessengerTransportConfigurationInterface
88
{
99
public function __construct(
1010
private array $messengerTransportsConfiguration
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace Bref\Symfony\Messenger\Service\Sqs;
4+
5+
use InvalidArgumentException;
6+
7+
interface SQSMessengerTransportConfigurationInterface
8+
{
9+
/** @throws InvalidArgumentException */
10+
public function provideTransportFromEventSource(string $eventSourceWithProtocol): string;
11+
}

src/Service/Sqs/SqsTransportNameResolver.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
namespace Bref\Symfony\Messenger\Service\Sqs;
44

55
use Bref\Event\Sqs\SqsRecord;
6-
use Bref\Symfony\Messenger\Service\MessengerTransportConfiguration;
76
use InvalidArgumentException;
87

98
/** @final */
@@ -12,7 +11,7 @@ class SqsTransportNameResolver
1211
private const TRANSPORT_PROTOCOL = 'sqs://';
1312

1413
public function __construct(
15-
private SQSMessengerTransportConfiguration $configurationProvider
14+
private SQSMessengerTransportConfigurationInterface $configurationProvider
1615
) {
1716
}
1817

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace Bref\Symfony\Messenger\Test\Unit\Service\Sqs;
4+
5+
use Bref\Symfony\Messenger\Service\Sqs\SQSMessengerTransportConfiguration;
6+
use PHPUnit\Framework\TestCase;
7+
8+
class SqsMessengerTransportConfigurationTest extends TestCase
9+
{
10+
11+
public function testProviderWithQueueUrl(): void
12+
{
13+
$messengerTransportsConfiguration = [
14+
'transport1' => [
15+
'dsn' => 'https://sqs.us-east-1.amazonaws.com/0123456789/some-queue-name',
16+
]
17+
];
18+
19+
$service = new SQSMessengerTransportConfiguration($messengerTransportsConfiguration);
20+
21+
$eventSourceWithProtocol = 'sqs://arn:aws:sqs:us-east-1:0123456789:some-queue-name';
22+
23+
self::assertEquals('transport1', $service->provideTransportFromEventSource($eventSourceWithProtocol));
24+
}
25+
26+
public function testProviderWithARN(): void
27+
{
28+
$messengerTransportsConfiguration = [
29+
'transport1' => [
30+
'dsn' => 'sqs://arn:aws:sqs:us-east-1:0123456789:some-queue-name',
31+
]
32+
];
33+
34+
$service = new SQSMessengerTransportConfiguration($messengerTransportsConfiguration);
35+
36+
$eventSourceWithProtocol = 'sqs://arn:aws:sqs:us-east-1:0123456789:some-queue-name';
37+
38+
self::assertEquals('transport1', $service->provideTransportFromEventSource($eventSourceWithProtocol));
39+
}
40+
41+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?php
2+
3+
namespace Bref\Symfony\Messenger\Test\Unit\Service\Sqs;
4+
5+
use Bref\Event\Sqs\SqsRecord;
6+
use Bref\Symfony\Messenger\Service\Sqs\SQSMessengerTransportConfigurationInterface;
7+
use Bref\Symfony\Messenger\Service\Sqs\SqsTransportNameResolver;
8+
use InvalidArgumentException;
9+
use PHPUnit\Framework\TestCase;
10+
use Prophecy\Argument;
11+
use Prophecy\PhpUnit\ProphecyTrait;
12+
13+
final class SqsTransportNameResolverTest extends TestCase
14+
{
15+
use ProphecyTrait;
16+
17+
public function test_event_source_can_resolved_as_expected(): void
18+
{
19+
$messengerTransportConfiguration = $this->prophesize(SQSMessengerTransportConfigurationInterface::class);
20+
/** @phpstan-ignore-next-line */
21+
$messengerTransportConfiguration
22+
->provideTransportFromEventSource(Argument::cetera())
23+
->willReturn('async');
24+
25+
$transportNameResolver = new SqsTransportNameResolver($messengerTransportConfiguration->reveal());
26+
27+
$event = new SqsRecord([
28+
'messageId' => '19dd0b57-b21e-4ac1-bd88-01bbb068cb78',
29+
'body' => 'Test message.',
30+
'messageAttributes' => [],
31+
'attributes' => [
32+
'ApproximateReceiveCount' => '1',
33+
],
34+
'receiptHandle' => 'AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...',
35+
'eventSource' => 'aws:sqs',
36+
'eventSourceARN' => 'aws:sqs:us-east-1:1234567890:some-queue-name',
37+
]);
38+
39+
self::assertSame('async', ($transportNameResolver)($event));
40+
}
41+
42+
public function test_throws_exception_if_event_source_arn_does_not_exist(): void
43+
{
44+
$messengerTransportConfiguration = $this->prophesize(SQSMessengerTransportConfigurationInterface::class);
45+
/** @phpstan-ignore-next-line */
46+
$messengerTransportConfiguration
47+
->provideTransportFromEventSource(Argument::cetera())
48+
->willReturn('async');
49+
50+
$transportNameResolver = new SqsTransportNameResolver($messengerTransportConfiguration->reveal());
51+
52+
$eventWithMissingeventSourceARN = new SqsRecord([
53+
'messageId' => '19dd0b57-b21e-4ac1-bd88-01bbb068cb78',
54+
'body' => 'Test message.',
55+
'messageAttributes' => [],
56+
'attributes' => [
57+
'ApproximateReceiveCount' => '1',
58+
],
59+
'receiptHandle' => 'AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...',
60+
'eventSource' => 'aws:sqs',
61+
]);
62+
63+
$this->expectException(InvalidArgumentException::class);
64+
($transportNameResolver)($eventWithMissingeventSourceARN);
65+
}
66+
}

0 commit comments

Comments
 (0)
0