Skip to content

Commit 04edd9d

Browse files
committed
Fix snsqs non-SNS SQS message headers
1 parent 9149d43 commit 04edd9d

File tree

2 files changed

+73
-0
lines changed

2 files changed

+73
-0
lines changed

pkg/snsqs/SnsQsConsumer.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ private function convertMessage(SqsMessage $sqsMessage): SnsQsMessage
135135
}
136136

137137
$message->setBody($sqsMessage->getBody());
138+
$message->setHeaders($sqsMessage->getHeaders());
138139
$message->setProperties($sqsMessage->getProperties());
139140

140141
return $message;

pkg/snsqs/Tests/SnsQsConsumerTest.php

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Enqueue\SnsQs\Tests;
6+
7+
use Enqueue\SnsQs\SnsQsConsumer;
8+
use Enqueue\SnsQs\SnsQsContext;
9+
use Enqueue\SnsQs\SnsQsMessage;
10+
use Enqueue\SnsQs\SnsQsQueue;
11+
use Enqueue\Sqs\SqsConsumer;
12+
use Enqueue\Sqs\SqsMessage;
13+
use PHPUnit\Framework\TestCase;
14+
15+
final class SnsQsConsumerTest extends TestCase
16+
{
17+
public function testReceivesSnsMessage(): void
18+
{
19+
$context = $this->createMock(SnsQsContext::class);
20+
$context->expects($this->once())
21+
->method('createMessage')
22+
->willReturn(new SnsQsMessage());
23+
24+
$sqsConsumer = $this->createMock(SqsConsumer::class);
25+
$sqsConsumer->expects($this->once())
26+
->method('receive')
27+
->willReturn(new SqsMessage(json_encode([
28+
'Type' => 'Notification',
29+
'TopicArn' => 'arn:aws:sns:us-east-2:12345:topic-name',
30+
'Message' => 'The Body',
31+
'MessageAttributes' => [
32+
'Headers' => [
33+
'Type' => 'String',
34+
'Value' => '[{"headerKey":"headerVal"},{"propKey": "propVal"}]',
35+
],
36+
],
37+
])));
38+
39+
$consumer = new SnsQsConsumer($context, $sqsConsumer, new SnsQsQueue('queue'));
40+
$result = $consumer->receive();
41+
42+
$this->assertInstanceOf(SnsQsMessage::class, $result);
43+
$this->assertSame('The Body', $result->getBody());
44+
$this->assertSame(['headerKey' => 'headerVal'], $result->getHeaders());
45+
$this->assertSame(['propKey' => 'propVal'], $result->getProperties());
46+
}
47+
48+
public function testReceivesSqsMessage(): void
49+
{
50+
$context = $this->createMock(SnsQsContext::class);
51+
$context->expects($this->once())
52+
->method('createMessage')
53+
->willReturn(new SnsQsMessage());
54+
55+
$sqsConsumer = $this->createMock(SqsConsumer::class);
56+
$sqsConsumer->expects($this->once())
57+
->method('receive')
58+
->willReturn(new SqsMessage(
59+
'The Body',
60+
['propKey' => 'propVal'],
61+
['headerKey' => 'headerVal'],
62+
));
63+
64+
$consumer = new SnsQsConsumer($context, $sqsConsumer, new SnsQsQueue('queue'));
65+
$result = $consumer->receive();
66+
67+
$this->assertInstanceOf(SnsQsMessage::class, $result);
68+
$this->assertSame('The Body', $result->getBody());
69+
$this->assertSame(['headerKey' => 'headerVal'], $result->getHeaders());
70+
$this->assertSame(['propKey' => 'propVal'], $result->getProperties());
71+
}
72+
}

0 commit comments

Comments
 (0)