diff --git a/src/Service/Sns/SnsTransportNameResolver.php b/src/Service/Sns/SnsTransportNameResolver.php index fc78707..b9db664 100644 --- a/src/Service/Sns/SnsTransportNameResolver.php +++ b/src/Service/Sns/SnsTransportNameResolver.php @@ -19,11 +19,11 @@ public function __construct( /** @throws InvalidArgumentException */ public function __invoke(SnsRecord $snsRecord): string { - if (!array_key_exists('EventSubscriptionArn', $snsRecord->toArray())) { - throw new InvalidArgumentException('EventSubscriptionArn is missing in sns record.'); + if (!array_key_exists('TopicArn', $snsRecord->toArray()['Sns'])) { + throw new InvalidArgumentException('TopicArn is missing in sns record.'); } - $eventSourceArn = $snsRecord->getEventSubscriptionArn(); + $eventSourceArn = $snsRecord->getTopicArn(); return $this->configurationProvider->provideTransportFromEventSource(self::TRANSPORT_PROTOCOL . $eventSourceArn); } diff --git a/tests/Unit/Service/Sns/SnsTransportNameResolverTest.php b/tests/Unit/Service/Sns/SnsTransportNameResolverTest.php index a33043d..cf0c5e1 100644 --- a/tests/Unit/Service/Sns/SnsTransportNameResolverTest.php +++ b/tests/Unit/Service/Sns/SnsTransportNameResolverTest.php @@ -5,6 +5,7 @@ use Bref\Event\Sns\SnsEvent; use Bref\Symfony\Messenger\Service\MessengerTransportConfiguration; use Bref\Symfony\Messenger\Service\Sns\SnsTransportNameResolver; +use InvalidArgumentException; use PHPUnit\Framework\TestCase; use Prophecy\Argument; use Prophecy\PhpUnit\ProphecyTrait; @@ -26,9 +27,7 @@ public function test_event_source_can_resolved_as_expected(): void $event = new SnsEvent([ 'Records' => [ [ - 'EventSource'=>'aws:sns', - 'EventSubscriptionArn' => 'arn:aws:sns:us-east-1:1234567890:async', 'Sns' => [ 'Message' => 'Test message.', 'MessageAttributes' => [ @@ -37,6 +36,7 @@ public function test_event_source_can_resolved_as_expected(): void 'Value'=> ['Content-Type' => 'application/json'], ], ], + 'TopicArn' => 'arn:aws:sns:us-east-1:1234567890:async', ], ], ], @@ -44,4 +44,35 @@ public function test_event_source_can_resolved_as_expected(): void self::assertSame('async', ($transportNameResolver)($event->getRecords()[0])); } + + public function test_throws_exception_if_topic_arn_deos_not_exist(): void + { + $messengerTransportConfiguration = $this->prophesize(MessengerTransportConfiguration::class); + /** @phpstan-ignore-next-line */ + $messengerTransportConfiguration + ->provideTransportFromEventSource(Argument::cetera()) + ->willReturn('async'); + + $transportNameResolver = new SnsTransportNameResolver($messengerTransportConfiguration->reveal()); + + $eventWithMissingTopicArn = new SnsEvent([ + 'Records' => [ + [ + 'EventSource'=>'aws:sns', + 'Sns' => [ + 'Message' => 'Test message.', + 'MessageAttributes' => [ + 'Headers' => [ + 'Type'=> 'String', + 'Value'=> ['Content-Type' => 'application/json'], + ], + ], + ], + ], + ], + ]); + + $this->expectException(InvalidArgumentException::class); + ($transportNameResolver)($eventWithMissingTopicArn->getRecords()[0]); + } } \ No newline at end of file