Skip to content
This repository was archived by the owner on Jun 4, 2024. It is now read-only.

Commit 4ec9932

Browse files
committed
Tests
1 parent 1171bd9 commit 4ec9932

File tree

3 files changed

+216
-6
lines changed

3 files changed

+216
-6
lines changed

src/SqsDiskQueue.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,11 +167,7 @@ public function pop($queue = null)
167167
*/
168168
public function clear($queue)
169169
{
170-
return tap($this->size($queue), function () use ($queue) {
171-
$this->sqs->purgeQueue([
172-
'QueueUrl' => $this->getQueue($queue),
173-
]);
174-
170+
return tap(parent::clear($queue), function () {
175171
if (Arr::get($this->diskOptions, 'cleanup') && Arr::get($this->diskOptions, 'prefix')) {
176172
$this->resolveDisk()->deleteDirectory(Arr::get($this->diskOptions, 'prefix'));
177173
}

tests/SqsDiskJobTest.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Mockery;
66
use Aws\Sqs\SqsClient;
77
use PHPUnit\Framework\TestCase;
8+
use Illuminate\Container\Container;
89
use SimpleSoftwareIO\SqsDisk\SqsDiskJob;
910
use Illuminate\Filesystem\FilesystemAdapter;
1011
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
@@ -29,7 +30,7 @@ public function setUp(): void
2930

3031
$this->mockedSqsClient = Mockery::mock(SqsClient::class);
3132
$this->mockedFilesystemAdapter = Mockery::mock(FilesystemAdapter::class);
32-
$this->mockedContainer = Mockery::mock('Illuminate\Container\Container');
33+
$this->mockedContainer = Mockery::mock(Container::class);
3334
}
3435

3536
public function testItRemovesTheJobFromTheDiskIfCleanupIsEnabled()

tests/SqsDiskQueueTest.php

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,240 @@
22

33
namespace SimpleSoftwareIO\Tests\SqsDisk;
44

5+
use Mockery;
6+
use Aws\Result;
7+
use Aws\Sqs\SqsClient;
58
use PHPUnit\Framework\TestCase;
9+
use Illuminate\Container\Container;
10+
use SimpleSoftwareIO\SqsDisk\SqsDiskJob;
11+
use SimpleSoftwareIO\SqsDisk\SqsDiskQueue;
12+
use Illuminate\Filesystem\FilesystemAdapter;
13+
use Mockery\Adapter\Phpunit\MockeryPHPUnitIntegration;
614

715
class SqsDiskQueueTest extends TestCase
816
{
17+
use MockeryPHPUnitIntegration;
18+
19+
public function setUp(): void
20+
{
21+
$this->mockedMessageId = 'e3cd03ee-59a3-4ad8-b0aa-ee2e3808ac81';
22+
$this->mockedPayload = json_encode(['job' => 'foo', 'data' => ['data'], 'uuid' => $this->mockedMessageId]);
23+
$this->mockedPointerPayload = json_encode(['pointer' => 'prefix/e3cd03ee-59a3-4ad8-b0aa-ee2e3808ac81.json']);
24+
$this->mockedLargePayload = json_encode(['job' => 'foo', 'data' => [base64_encode(random_bytes(262144))], 'uuid' => $this->mockedMessageId]);
25+
$this->mockedReceiptHandle = '0NNAq8PwvXuWv5gMtS9DJ8qEdyiUwbAjpp45w2m6M4SJ1Y+PxCh7R930NRB8ylSacEmoSnW18bgd4nK\/O6ctE+VFVul4eD23mA07vVoSnPI4F\/voI1eNCp6Iax0ktGmhlNVzBwaZHEr91BRtqTRM3QKd2ASF8u+IQaSwyl\/DGK+P1+dqUOodvOVtExJwdyDLy1glZVgm85Yw9Jf5yZEEErqRwzYz\/qSigdvW4sm2l7e4phRol\/+IjMtovOyH\/ukueYdlVbQ4OshQLENhUKe7RNN5i6bE\/e5x9bnPhfj2gbM';
26+
27+
$this->mockedJobData = [
28+
'Body' => $this->mockedPayload,
29+
'MD5OfBody' => md5($this->mockedPayload),
30+
'ReceiptHandle' => $this->mockedReceiptHandle,
31+
'MessageId' => $this->mockedMessageId,
32+
'Attributes' => ['ApproximateReceiveCount' => 1],
33+
];
34+
35+
$this->mockedSqsClient = Mockery::mock(SqsClient::class);
36+
$this->mockedFilesystemAdapter = Mockery::mock(FilesystemAdapter::class);
37+
$this->mockedContainer = Mockery::mock(Container::class)->makePartial();
38+
}
39+
40+
public function testItDoesntPushToADiskIfTheAlwaysStoreIsDisabledAndThePayloadIsntLarge()
41+
{
42+
$this->mockedFilesystemAdapter->shouldReceive('disk')
43+
->never();
44+
45+
$this->mockedSqsClient->shouldReceive('sendMessage')
46+
->with([
47+
'QueueUrl' => '/default',
48+
'MessageBody' => $this->mockedPayload,
49+
])
50+
->once()
51+
->andReturnSelf();
52+
53+
$this->mockedSqsClient->shouldReceive('get')
54+
->once();
55+
56+
$diskOptions = [
57+
'always_store' => false,
58+
'cleanup' => true,
59+
'disk' => 's3',
60+
'prefix' => 'prefix',
61+
];
62+
63+
$sqsDiskQueue = new SqsDiskQueue($this->mockedSqsClient, 'default', $diskOptions);
64+
$sqsDiskQueue->pushRaw($this->mockedPayload);
65+
}
66+
967
public function testItPushesLargePayloadsToADisk()
1068
{
69+
$this->mockedFilesystemAdapter->shouldReceive('disk')
70+
->with('s3')
71+
->andReturnSelf();
72+
73+
$this->mockedFilesystemAdapter->shouldReceive('put')
74+
->with('prefix/e3cd03ee-59a3-4ad8-b0aa-ee2e3808ac81.json', $this->mockedLargePayload)
75+
->once();
76+
77+
$this->mockedContainer->shouldReceive('make')
78+
->with('filesystem')
79+
->andReturn($this->mockedFilesystemAdapter);
80+
81+
$this->mockedSqsClient->shouldReceive('sendMessage')
82+
->with([
83+
'QueueUrl' => '/default',
84+
'MessageBody' => $this->mockedPointerPayload,
85+
'DelaySeconds' => 0,
86+
])
87+
->once()
88+
->andReturnSelf();
89+
90+
$this->mockedSqsClient->shouldReceive('get')
91+
->once();
92+
93+
$diskOptions = [
94+
'always_store' => false,
95+
'cleanup' => true,
96+
'disk' => 's3',
97+
'prefix' => 'prefix',
98+
];
99+
100+
$sqsDiskQueue = new SqsDiskQueue($this->mockedSqsClient, 'default', $diskOptions);
101+
$sqsDiskQueue->setContainer($this->mockedContainer);
102+
$sqsDiskQueue->pushRaw($this->mockedLargePayload);
11103
}
12104

13105
public function testItAlwaysPushesPayloadsToADiskIfAlwaysPushIsEnabled()
14106
{
107+
$this->mockedFilesystemAdapter->shouldReceive('disk')
108+
->with('s3')
109+
->andReturnSelf();
110+
111+
$this->mockedFilesystemAdapter->shouldReceive('put')
112+
->with('prefix/e3cd03ee-59a3-4ad8-b0aa-ee2e3808ac81.json', $this->mockedPayload)
113+
->once();
114+
115+
$this->mockedContainer->shouldReceive('make')
116+
->with('filesystem')
117+
->andReturn($this->mockedFilesystemAdapter);
118+
119+
$this->mockedSqsClient->shouldReceive('sendMessage')
120+
->with([
121+
'QueueUrl' => '/default',
122+
'MessageBody' => $this->mockedPointerPayload,
123+
'DelaySeconds' => 0,
124+
])
125+
->once()
126+
->andReturnSelf();
127+
128+
$this->mockedSqsClient->shouldReceive('get')
129+
->once();
130+
131+
$diskOptions = [
132+
'always_store' => true,
133+
'cleanup' => true,
134+
'disk' => 's3',
135+
'prefix' => 'prefix',
136+
];
137+
138+
$sqsDiskQueue = new SqsDiskQueue($this->mockedSqsClient, 'default', $diskOptions);
139+
$sqsDiskQueue->setContainer($this->mockedContainer);
140+
$sqsDiskQueue->pushRaw($this->mockedPayload);
15141
}
16142

17143
public function testItDelaysAJob()
18144
{
145+
$this->mockedFilesystemAdapter->shouldReceive('disk')
146+
->with('s3')
147+
->andReturnSelf();
148+
149+
$this->mockedFilesystemAdapter->shouldReceive('put')
150+
->once();
151+
152+
$this->mockedContainer->shouldReceive('make')
153+
->with('filesystem')
154+
->andReturn($this->mockedFilesystemAdapter);
155+
156+
$this->mockedSqsClient->shouldReceive('sendMessage')
157+
->with(Mockery::on(function ($arguments) {
158+
return $arguments['DelaySeconds'] === 10;
159+
}))
160+
->once()
161+
->andReturnSelf();
162+
163+
$this->mockedSqsClient->shouldReceive('get')
164+
->once();
165+
166+
$diskOptions = [
167+
'always_store' => true,
168+
'cleanup' => true,
169+
'disk' => 's3',
170+
'prefix' => 'prefix',
171+
];
172+
173+
$sqsDiskQueue = new SqsDiskQueue($this->mockedSqsClient, 'default', $diskOptions);
174+
$sqsDiskQueue->setContainer($this->mockedContainer);
175+
$sqsDiskQueue->later(10, 'foo');
19176
}
20177

21178
public function testItCreatesANewSqsDiskJobWhenPopped()
22179
{
180+
$this->mockedSqsClient->shouldReceive('receiveMessage')
181+
->once()
182+
->andReturn([
183+
'Messages' => [
184+
0 => [
185+
'Body' => $this->mockedPayload,
186+
'MD5OfBody' => md5($this->mockedPayload),
187+
'ReceiptHandle' => $this->mockedReceiptHandle,
188+
'MessageId' => $this->mockedMessageId,
189+
],
190+
],
191+
]);
192+
193+
$diskOptions = [
194+
'always_store' => true,
195+
'cleanup' => true,
196+
'disk' => 's3',
197+
'prefix' => 'prefix',
198+
];
199+
200+
$sqsDiskQueue = new SqsDiskQueue($this->mockedSqsClient, 'default', $diskOptions);
201+
$sqsDiskQueue->setContainer($this->mockedContainer);
202+
$job = $sqsDiskQueue->pop();
203+
204+
$this->assertInstanceOf(SqsDiskJob::class, $job);
23205
}
24206

25207
public function testItClearsTheDiskWhenQueueisCleared()
26208
{
209+
$this->mockedFilesystemAdapter->shouldReceive('disk')
210+
->with('s3')
211+
->andReturnSelf();
212+
213+
$this->mockedFilesystemAdapter->shouldReceive('deleteDirectory')
214+
->with('prefix')
215+
->once();
216+
217+
$this->mockedContainer->shouldReceive('make')
218+
->with('filesystem')
219+
->andReturn($this->mockedFilesystemAdapter);
220+
221+
$this->mockedSqsClient->shouldReceive('getQueueAttributes')
222+
->andReturn(new Result([
223+
'Attributes' => [
224+
'ApproximateNumberOfMessages' => 1,
225+
],
226+
]));
227+
228+
$this->mockedSqsClient->shouldReceive('purgeQueue');
229+
230+
$diskOptions = [
231+
'always_store' => true,
232+
'cleanup' => true,
233+
'disk' => 's3',
234+
'prefix' => 'prefix',
235+
];
236+
237+
$sqsDiskQueue = new SqsDiskQueue($this->mockedSqsClient, 'default', $diskOptions);
238+
$sqsDiskQueue->setContainer($this->mockedContainer);
239+
$sqsDiskQueue->clear('default');
27240
}
28241
}

0 commit comments

Comments
 (0)