|
12 | 12 | namespace Symfony\Component\Messenger\Bridge\AmazonSqs\Tests\Transport;
|
13 | 13 |
|
14 | 14 | use AsyncAws\Core\Exception\Http\HttpException;
|
| 15 | +use AsyncAws\Core\Test\ResultMockFactory; |
| 16 | +use AsyncAws\Sqs\Result\GetQueueUrlResult; |
| 17 | +use AsyncAws\Sqs\Result\ReceiveMessageResult; |
15 | 18 | use AsyncAws\Sqs\SqsClient;
|
| 19 | +use AsyncAws\Sqs\ValueObject\Message; |
16 | 20 | use PHPUnit\Framework\TestCase;
|
17 | 21 | use Symfony\Component\HttpClient\MockHttpClient;
|
18 | 22 | use Symfony\Component\HttpClient\Response\MockResponse;
|
@@ -86,131 +90,44 @@ public function testFromDsnWithQueryOptions()
|
86 | 90 |
|
87 | 91 | public function testKeepGettingPendingMessages()
|
88 | 92 | {
|
89 |
| - $httpClient = new MockHttpClient(function (string $method, string $url, array $options): ResponseInterface { |
90 |
| - if ('Action=GetQueueUrl&Version=2012-11-05&QueueName=queue' === $options['body']) { |
91 |
| - return new MockResponse('<GetQueueUrlResponse> |
92 |
| - <GetQueueUrlResult> |
93 |
| - <QueueUrl>https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue</QueueUrl> |
94 |
| - </GetQueueUrlResult> |
95 |
| - <ResponseMetadata> |
96 |
| - <RequestId>470a6f13-2ed9-4181-ad8a-2fdea142988e</RequestId> |
97 |
| - </ResponseMetadata> |
98 |
| - </GetQueueUrlResponse>'); |
99 |
| - } |
100 |
| - if ('Action=ReceiveMessage&Version=2012-11-05&QueueUrl=https%3A%2F%2Fsqs.us-east-2.amazonaws.com%2F123456789012%2FMyQueue&MaxNumberOfMessages=9&WaitTimeSeconds=20' === $options['body']) { |
101 |
| - return new MockResponse('<ReceiveMessageResponse> |
102 |
| - <ReceiveMessageResult> |
103 |
| - <Message> |
104 |
| - <MessageId>5fea7756-0ea4-451a-a703-a558b933e274</MessageId> |
105 |
| - <ReceiptHandle> |
106 |
| - MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+Cw |
107 |
| - Lj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QE |
108 |
| - auMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0= |
109 |
| - </ReceiptHandle> |
110 |
| - <MD5OfBody>fafb00f5732ab283681e124bf8747ed1</MD5OfBody> |
111 |
| - <Body>{"body":"this is a test","headers":{}}</Body> |
112 |
| - <Attribute> |
113 |
| - <Name>SenderId</Name> |
114 |
| - <Value>195004372649</Value> |
115 |
| - </Attribute> |
116 |
| - <Attribute> |
117 |
| - <Name>SentTimestamp</Name> |
118 |
| - <Value>1238099229000</Value> |
119 |
| - </Attribute> |
120 |
| - <Attribute> |
121 |
| - <Name>ApproximateReceiveCount</Name> |
122 |
| - <Value>5</Value> |
123 |
| - </Attribute> |
124 |
| - <Attribute> |
125 |
| - <Name>ApproximateFirstReceiveTimestamp</Name> |
126 |
| - <Value>1250700979248</Value> |
127 |
| - </Attribute> |
128 |
| - </Message> |
129 |
| - <Message> |
130 |
| - <MessageId>5fea7756-0ea4-451a-a703-a558b933e274</MessageId> |
131 |
| - <ReceiptHandle> |
132 |
| - MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+Cw |
133 |
| - Lj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QE |
134 |
| - auMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0= |
135 |
| - </ReceiptHandle> |
136 |
| - <MD5OfBody>fafb00f5732ab283681e124bf8747ed1</MD5OfBody> |
137 |
| - <Body>{"body":"this is a test","headers":{}}</Body> |
138 |
| - <Attribute> |
139 |
| - <Name>SenderId</Name> |
140 |
| - <Value>195004372649</Value> |
141 |
| - </Attribute> |
142 |
| - <Attribute> |
143 |
| - <Name>SentTimestamp</Name> |
144 |
| - <Value>1238099229000</Value> |
145 |
| - </Attribute> |
146 |
| - <Attribute> |
147 |
| - <Name>ApproximateReceiveCount</Name> |
148 |
| - <Value>5</Value> |
149 |
| - </Attribute> |
150 |
| - <Attribute> |
151 |
| - <Name>ApproximateFirstReceiveTimestamp</Name> |
152 |
| - <Value>1250700979248</Value> |
153 |
| - </Attribute> |
154 |
| - </Message> |
155 |
| - <Message> |
156 |
| - <MessageId>5fea7756-0ea4-451a-a703-a558b933e274</MessageId> |
157 |
| - <ReceiptHandle> |
158 |
| - MbZj6wDWli+JvwwJaBV+3dcjk2YW2vA3+STFFljTM8tJJg6HRG6PYSasuWXPJB+Cw |
159 |
| - Lj1FjgXUv1uSj1gUPAWV66FU/WeR4mq2OKpEGYWbnLmpRCJVAyeMjeU5ZBdtcQ+QE |
160 |
| - auMZc8ZRv37sIW2iJKq3M9MFx1YvV11A2x/KSbkJ0= |
161 |
| - </ReceiptHandle> |
162 |
| - <MD5OfBody>fafb00f5732ab283681e124bf8747ed1</MD5OfBody> |
163 |
| - <Body>{"body":"this is a test","headers":{}}</Body> |
164 |
| - <Attribute> |
165 |
| - <Name>SenderId</Name> |
166 |
| - <Value>195004372649</Value> |
167 |
| - </Attribute> |
168 |
| - <Attribute> |
169 |
| - <Name>SentTimestamp</Name> |
170 |
| - <Value>1238099229000</Value> |
171 |
| - </Attribute> |
172 |
| - <Attribute> |
173 |
| - <Name>ApproximateReceiveCount</Name> |
174 |
| - <Value>5</Value> |
175 |
| - </Attribute> |
176 |
| - <Attribute> |
177 |
| - <Name>ApproximateFirstReceiveTimestamp</Name> |
178 |
| - <Value>1250700979248</Value> |
179 |
| - </Attribute> |
180 |
| - </Message> |
181 |
| - </ReceiveMessageResult> |
182 |
| - <ResponseMetadata> |
183 |
| - <RequestId>b6633655-283d-45b4-aee4-4e84e0ae6afa</RequestId> |
184 |
| - </ResponseMetadata> |
185 |
| - </ReceiveMessageResponse>'); |
186 |
| - } |
187 |
| - $this->fail('Unexpected HTTP call'); |
188 |
| - }); |
189 |
| - |
190 |
| - $connection = Connection::fromDsn('sqs://localhost/queue', ['auto_setup' => false], $httpClient); |
| 93 | + $client = $this->createMock(SqsClient::class); |
| 94 | + $client->expects($this->any()) |
| 95 | + ->method('getQueueUrl') |
| 96 | + ->with(['QueueName' => 'queue', 'QueueOwnerAWSAccountId' => 123]) |
| 97 | + ->willReturn(ResultMockFactory::create(GetQueueUrlResult::class, ['QueueUrl' => 'https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue'])); |
| 98 | + $client->expects($this->at(1)) |
| 99 | + ->method('receiveMessage') |
| 100 | + ->with(['QueueUrl' => 'https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue', 'MaxNumberOfMessages' => 9, 'WaitTimeSeconds' => 20, 'VisibilityTimeout' => null]) |
| 101 | + ->willReturn(ResultMockFactory::create(ReceiveMessageResult::class, ['Messages' => [ |
| 102 | + new Message(['MessageId' => 1, 'Body' => '{"body":"this is a test","headers":{}}']), |
| 103 | + new Message(['MessageId' => 2, 'Body' => '{"body":"this is a test","headers":{}}']), |
| 104 | + new Message(['MessageId' => 3, 'Body' => '{"body":"this is a test","headers":{}}']), |
| 105 | + ]])); |
| 106 | + $client->expects($this->at(2)) |
| 107 | + ->method('receiveMessage') |
| 108 | + ->with(['QueueUrl' => 'https://sqs.us-east-2.amazonaws.com/123456789012/MyQueue', 'MaxNumberOfMessages' => 9, 'WaitTimeSeconds' => 20, 'VisibilityTimeout' => null]) |
| 109 | + ->willReturn(ResultMockFactory::create(ReceiveMessageResult::class, ['Messages' => [ |
| 110 | + ]])); |
| 111 | + |
| 112 | + $connection = new Connection(['queue_name' => 'queue', 'account' => 123, 'auto_setup' => false], $client); |
191 | 113 | $this->assertNotNull($connection->get());
|
192 | 114 | $this->assertNotNull($connection->get());
|
193 | 115 | $this->assertNotNull($connection->get());
|
| 116 | + $this->assertNull($connection->get()); |
194 | 117 | }
|
195 | 118 |
|
196 | 119 | public function testUnexpectedSqsError()
|
197 | 120 | {
|
198 | 121 | $this->expectException(HttpException::class);
|
199 | 122 | $this->expectExceptionMessage('SQS error happens');
|
200 | 123 |
|
201 |
| - $httpClient = new MockHttpClient(function (string $method, string $url, array $options): ResponseInterface { |
202 |
| - return new MockResponse('<ErrorResponse xmlns="http://queue.amazonaws.com/doc/2012-11-05/"> |
203 |
| - <Error> |
204 |
| - <Type>Sender</Type> |
205 |
| - <Code>boom</Code> |
206 |
| - <Message>SQS error happens</Message> |
207 |
| - <Detail/> |
208 |
| - </Error> |
209 |
| - <RequestId>30441e49-5246-5231-9c87-4bd704b81ce9</RequestId> |
210 |
| - </ErrorResponse>', ['http_code' => 400]); |
211 |
| - }); |
212 |
| - |
213 |
| - $connection = Connection::fromDsn('sqs://localhost/queue', [], $httpClient); |
| 124 | + $client = $this->createMock(SqsClient::class); |
| 125 | + $client->expects($this->any()) |
| 126 | + ->method('getQueueUrl') |
| 127 | + ->with(['QueueName' => 'queue', 'QueueOwnerAWSAccountId' => 123]) |
| 128 | + ->willReturn(ResultMockFactory::createFailing(GetQueueUrlResult::class, 400, 'SQS error happens')); |
| 129 | + |
| 130 | + $connection = new Connection(['queue_name' => 'queue', 'account' => 123, 'auto_setup' => false], $client); |
214 | 131 | $connection->get();
|
215 | 132 | }
|
216 | 133 | }
|
0 commit comments