8000 Use ResultMockFactory · symfony/symfony@7067936 · GitHub
[go: up one dir, main page]

Skip to content

Commit 7067936

Browse files
committed
Use ResultMockFactory
1 parent 307e2ae commit 7067936

File tree

1 file changed

+32
-115
lines changed

1 file changed

+32
-115
lines changed

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/ConnectionTest.php

Lines changed: 32 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
namespace Symfony\Component\Messenger\Bridge\AmazonSqs\Tests\Transport;
1313

1414
use AsyncAws\Core\Exception\Http\HttpException;
15+
use AsyncAws\Core\Test\ResultMockFactory;
16+
use AsyncAws\Sqs\Result\GetQueueUrlResult;
17+
use AsyncAws\Sqs\Result\ReceiveMessageResult;
1518
use AsyncAws\Sqs\SqsClient;
19+
use AsyncAws\Sqs\ValueObject\Message;
1620
use PHPUnit\Framework\TestCase;
1721
use Symfony\Component\HttpClient\MockHttpClient;
1822
use Symfony\Component\HttpClient\Response\MockResponse;
@@ -86,131 +90,44 @@ public function testFromDsnWithQueryOptions()
8690

8791
public function testKeepGettingPendingMessages()
8892
{
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);
191113
$this->assertNotNull($connection->get());
192114
$this->assertNotNull($connection->get());
193115
$this->assertNotNull($connection->get());
116+
$this->assertNull($connection->get());
194117
}
195118

196119
public function testUnexpectedSqsError()
197120
{
198121
$this->expectException(HttpException::class);
199122
$this->expectExceptionMessage('SQS error happens');
200123

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);
214131
$connection->get();
215132
}
216133
}

0 commit comments

Comments
 (0)
0