-
-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathQueueTest.php
More file actions
164 lines (126 loc) · 4.57 KB
/
Copy pathQueueTest.php
File metadata and controls
164 lines (126 loc) · 4.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<?php
declare(strict_types=1);
namespace Yiisoft\Queue\Tests\Unit;
use Yiisoft\Queue\Adapter\AdapterInterface;
use Yiisoft\Queue\Cli\SignalLoop;
use Yiisoft\Queue\Message\IdEnvelope;
use Yiisoft\Queue\Message\GenericMessage;
use Yiisoft\Queue\MessageStatus;
use Yiisoft\Queue\Stubs\InMemoryAdapter;
use Yiisoft\Queue\Tests\TestCase;
use function extension_loaded;
// Test enum for BackedEnum testing
enum TestQueue: string
{
case DEFAULT = 'default';
case HIGH_PRIORITY = 'high-priority';
}
final class QueueTest extends TestCase
{
public function testPushSuccessful(): void
{
$adapter = new InMemoryAdapter();
$queue = $this->createQueue($adapter);
$message = new GenericMessage('simple', null);
$queue->push($message);
self::assertSame([$message], $adapter->getMessagesList());
}
public function testPushLogsWhenIdNotAssigned(): void
{
$message = new GenericMessage('simple', null);
$adapter = $this->createMock(AdapterInterface::class);
$adapter->method('push')->willReturn($message);
$queue = $this->createQueue($adapter);
$result = $queue->push($message);
self::assertNull(IdEnvelope::fromMessage($result)->getId());
}
public function testPushSynchronouslyProcessesMessage(): void
{
$queue = $this->createQueue();
$message = new GenericMessage('simple', null);
$queue->push($message);
$queue->push(clone $message);
self::assertSame(2, $this->executionTimes);
}
public function testRunWithoutAdapterReturnsZero(): void
{
$queue = $this->createQueue();
$message = new GenericMessage('simple', null);
$queue->push($message);
$queue->push(clone $message);
self::assertSame(0, $queue->run());
self::assertSame(2, $this->executionTimes);
}
public function testListenWithoutAdapter(): void
{
$queue = $this->createQueue();
$queue->listen();
$this->expectNotToPerformAssertions();
}
public function testStatusReturnsNotFoundWithoutAdapter(): void
{
$queue = $this->createQueue();
self::assertSame(MessageStatus::NOT_FOUND, $queue->status('1'));
}
public function testRunWithAdapter(): void
{
$queue = $this->createQueue(new InMemoryAdapter());
$message = new GenericMessage('simple', null);
$queue->push($message);
$queue->push(clone $message);
self::assertSame(2, $queue->run());
self::assertSame(2, $this->executionTimes);
}
public function testRunPartlyWithAdapter(): void
{
$queue = $this->createQueue(new InMemoryAdapter());
$message = new GenericMessage('simple', null);
$queue->push($message);
$queue->push(clone $message);
self::assertSame(1, $queue->run(1));
self::assertSame(1, $this->executionTimes);
}
public function testListenWithAdapter(): void
{
$queue = $this->createQueue(new InMemoryAdapter());
$message = new GenericMessage('simple', null);
$queue->push($message);
$queue->push(clone $message);
$queue->listen();
self::assertSame(2, $this->executionTimes);
}
public function testStatusWithAdapter(): void
{
$queue = $this->createQueue(new InMemoryAdapter());
$envelope = $queue->push(new GenericMessage('simple', null));
self::assertArrayHasKey(IdEnvelope::META_ID, $envelope->getMetadata());
/** @var int|string $id */
$id = $envelope->getMetadata()[IdEnvelope::META_ID];
self::assertSame(MessageStatus::WAITING, $queue->status($id));
$queue->run();
self::assertSame(MessageStatus::DONE, $queue->status($id));
}
public function testRunWithSignalLoop(): void
{
if (!extension_loaded('pcntl')) {
$this->markTestSkipped('This rest requires PCNTL extension');
}
$this->loop = new SignalLoop();
$queue = $this->createQueue();
$message = new GenericMessage('simple', null);
$queue->push($message);
$queue->push(clone $message);
self::assertSame(0, $queue->run());
self::assertSame(2, $this->executionTimes);
}
public function testGetName(): void
{
$queue = $this->createQueue(name: 'test-queue');
$this->assertSame('test-queue', $queue->getName());
}
public function testGetNameWithBackedEnum(): void
{
$queue = $this->createQueue(name: TestQueue::HIGH_PRIORITY);
$this->assertSame('high-priority', $queue->getName());
}
}