Skip to content

Commit 9aed2de

Browse files
committed
Merge branch '2.x' into 2.next
2 parents d123eb8 + f532eb3 commit 9aed2de

File tree

6 files changed

+63
-28
lines changed

6 files changed

+63
-28
lines changed

src/Consumption/LimitAttemptsExtension.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ class LimitAttemptsExtension implements MessageResultExtensionInterface
2626

2727
/**
2828
* @param int|null $maxAttempts The maximum number of times a job may be attempted. $maxAttempts defined on a Job will override this value.
29-
* @return void
3029
*/
3130
public function __construct(
3231
protected readonly ?int $maxAttempts = null,

src/Consumption/LimitConsumedMessagesExtension.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ class LimitConsumedMessagesExtension implements PreConsumeExtensionInterface, Po
2222

2323
/**
2424
* @param int $messageLimit The number of messages to process before exiting.
25-
* @return void
2625
*/
2726
public function __construct(
2827
protected readonly int $messageLimit,

src/Consumption/RemoveUniqueJobIdFromCacheExtension.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ class RemoveUniqueJobIdFromCacheExtension implements MessageResultExtensionInter
1313
{
1414
/**
1515
* @param string $cache Cache engine name.
16-
* @return void
1716
*/
1817
public function __construct(
1918
protected readonly string $cache,

tests/TestCase/PluginTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public function testBootstrapNoConfig()
2323
$this->expectExceptionMessage('Missing `Queue` configuration key, please check the CakePHP Queue documentation to complete the plugin setup');
2424
Configure::delete('Queue');
2525
$plugin = new QueuePlugin();
26-
$app = $this->getMockBuilder(Application::class)->disableOriginalConstructor()->getMock();
26+
$app = $this->createStub(Application::class);
2727
$plugin->bootstrap($app);
2828
}
2929

@@ -41,7 +41,7 @@ public function testBootstrapWithConfig()
4141
];
4242
Configure::write('Queue', ['default' => $queueConfig]);
4343
$plugin = new QueuePlugin();
44-
$app = $this->getMockBuilder(Application::class)->disableOriginalConstructor()->getMock();
44+
$app = $this->createStub(Application::class);
4545
$plugin->bootstrap($app);
4646
$queueConfig['url'] = [
4747
'transport' => 'null:',

tests/TestCase/Queue/ProcessorTest.php

Lines changed: 60 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,39 @@
3030
use PHPUnit\Framework\Attributes\DataProvider;
3131
use TestApp\TestProcessor;
3232
use TestApp\WelcomeMailer;
33+
use Traversable;
3334

3435
class ProcessorTest extends TestCase
3536
{
3637
use QueueTestTrait;
3738

38-
public static $lastProcessMessage;
39+
/**
40+
* Convert EventList to array in a backwards-compatible way.
41+
*
42+
* In CakePHP 5.3.0+ EventList implements Traversable but array access is deprecated.
43+
* In older versions, EventList only supports array access.
44+
*
45+
* @param \Cake\Event\EventList $events The event list to convert.
46+
* @return array<\Cake\Event\EventInterface>
47+
*/
48+
protected function eventListToArray(EventList $events): array
49+
{
50+
if ($events instanceof Traversable) {
51+
/** @var array<\Cake\Event\EventInterface> */
52+
return iterator_to_array($events);
53+
}
54+
55+
$result = [];
56+
$count = $events->count();
57+
for ($i = 0; $i < $count; $i++) {
58+
$event = $events[$i];
59+
if ($event !== null) {
60+
$result[] = $event;
61+
}
62+
}
63+
64+
return $result;
65+
}
3966

4067
/**
4168
* Data provider for testProcess method
@@ -63,21 +90,23 @@ public static function dataProviderTestProcess(): array
6390
* @return void
6491
*/
6592
#[DataProvider('dataProviderTestProcess')]
66-
public function testProcess($jobMethod, $expected, $logMessage, $dispatchedEvent)
93+
public function testProcess(string $jobMethod, string $expected, string $logMessage, string $dispatchedEvent): void
6794
{
6895
$messageBody = [
6996
'class' => [TestProcessor::class, $jobMethod],
7097
'args' => [],
7198
];
7299
$connectionFactory = new NullConnectionFactory();
73100
$context = $connectionFactory->createContext();
74-
$queueMessage = new NullMessage(json_encode($messageBody));
101+
$queueMessage = new NullMessage((string)json_encode($messageBody));
75102
$message = new Message($queueMessage, $context);
76103

77104
$events = new EventList();
78105
$logger = new ArrayLog();
79106
$processor = new Processor($logger);
80-
$processor->getEventManager()->setEventList($events);
107+
/** @var \Cake\Event\EventManager $eventManager */
108+
$eventManager = $processor->getEventManager();
109+
$eventManager->setEventList($events);
81110

82111
$actual = $processor->process($queueMessage, $context);
83112
$this->assertSame($expected, $actual);
@@ -88,17 +117,18 @@ public function testProcess($jobMethod, $expected, $logMessage, $dispatchedEvent
88117
$this->assertStringContainsString($logMessage, $logs[0]);
89118

90119
$this->assertSame(3, $events->count());
91-
$this->assertSame('Processor.message.seen', $events[0]->getName());
92-
$this->assertEquals(['queueMessage' => $queueMessage], $events[0]->getData());
120+
$eventsList = $this->eventListToArray($events);
121+
$this->assertSame('Processor.message.seen', $eventsList[0]->getName());
122+
$this->assertEquals(['queueMessage' => $queueMessage], $eventsList[0]->getData());
93123

94124
// Events should contain a message with the same payload.
95-
$this->assertSame('Processor.message.start', $events[1]->getName());
96-
$data = $events[1]->getData();
125+
$this->assertSame('Processor.message.start', $eventsList[1]->getName());
126+
$data = $eventsList[1]->getData();
97127
$this->assertArrayHasKey('message', $data);
98128
$this->assertSame($message->jsonSerialize(), $data['message']->jsonSerialize());
99129

100-
$this->assertSame($dispatchedEvent, $events[2]->getName());
101-
$data = $events[2]->getData();
130+
$this->assertSame($dispatchedEvent, $eventsList[2]->getName());
131+
$data = $eventsList[2]->getData();
102132
$this->assertArrayHasKey('message', $data);
103133
$this->assertSame($message->jsonSerialize(), $data['message']->jsonSerialize());
104134

@@ -121,12 +151,14 @@ public function testProcessNotValidCallable()
121151
];
122152
$connectionFactory = new NullConnectionFactory();
123153
$context = $connectionFactory->createContext();
124-
$queueMessage = new NullMessage(json_encode($messageBody));
154+
$queueMessage = new NullMessage((string)json_encode($messageBody));
125155

126156
$events = new EventList();
127157
$logger = new ArrayLog();
128158
$processor = new Processor($logger);
129-
$processor->getEventManager()->setEventList($events);
159+
/** @var \Cake\Event\EventManager $eventManager */
160+
$eventManager = $processor->getEventManager();
161+
$eventManager->setEventList($events);
130162

131163
$result = $processor->process($queueMessage, $context);
132164
$this->assertSame(InteropProcessor::REJECT, $result);
@@ -137,8 +169,9 @@ public function testProcessNotValidCallable()
137169
$this->assertStringContainsString('Invalid callable for message. Rejecting message from queue', $logs[0]);
138170

139171
$this->assertSame(2, $events->count());
140-
$this->assertSame('Processor.message.seen', $events[0]->getName());
141-
$this->assertSame('Processor.message.invalid', $events[1]->getName());
172+
$eventsList = $this->eventListToArray($events);
173+
$this->assertSame('Processor.message.seen', $eventsList[0]->getName());
174+
$this->assertSame('Processor.message.invalid', $eventsList[1]->getName());
142175
}
143176

144177
/**
@@ -156,20 +189,23 @@ public function testProcessWillRequeueOnException()
156189
];
157190
$connectionFactory = new NullConnectionFactory();
158191
$context = $connectionFactory->createContext();
159-
$queueMessage = new NullMessage(json_encode($messageBody));
192+
$queueMessage = new NullMessage((string)json_encode($messageBody));
160193

161194
$events = new EventList();
162195
$logger = new ArrayLog();
163196
$processor = new Processor($logger);
164-
$processor->getEventManager()->setEventList($events);
197+
/** @var \Cake\Event\EventManager $eventManager */
198+
$eventManager = $processor->getEventManager();
199+
$eventManager->setEventList($events);
165200

166201
$result = $processor->process($queueMessage, $context);
167202
$this->assertEquals(InteropProcessor::REQUEUE, $result);
168203

169204
// Verify timing information is present in exception event
170205
$this->assertSame(3, $events->count());
171-
$this->assertSame('Processor.message.exception', $events[2]->getName());
172-
$data = $events[2]->getData();
206+
$eventsList = $this->eventListToArray($events);
207+
$this->assertSame('Processor.message.exception', $eventsList[2]->getName());
208+
$data = $eventsList[2]->getData();
173209
$this->assertArrayHasKey('duration', $data);
174210
$this->assertIsInt($data['duration']);
175211
$this->assertGreaterThanOrEqual(0, $data['duration']);
@@ -193,11 +229,13 @@ public function testProcessJobObject()
193229
];
194230
$connectionFactory = new NullConnectionFactory();
195231
$context = $connectionFactory->createContext();
196-
$queueMessage = new NullMessage(json_encode($messageBody));
232+
$queueMessage = new NullMessage((string)json_encode($messageBody));
197233
$processor = new Processor();
198234

199235
$result = $processor->process($queueMessage, $context);
200-
$logs = Log::engine('debug')->read();
236+
/** @var \Cake\Log\Engine\ArrayLog $debugLog */
237+
$debugLog = Log::engine('debug');
238+
$logs = $debugLog->read();
201239
Log::drop('debug');
202240

203241
$this->assertCount(1, $logs);
@@ -219,12 +257,12 @@ public function testProcessMessage()
219257
];
220258
$connectionFactory = new NullConnectionFactory();
221259
$context = $connectionFactory->createContext();
222-
$queueMessage = new NullMessage(json_encode($messageBody));
260+
$queueMessage = new NullMessage((string)json_encode($messageBody));
223261
$message = new Message($queueMessage, $context);
224262
$processor = new Processor();
225263

226264
$result = $processor->processMessage($message);
227265
$this->assertSame(InteropProcessor::ACK, $result);
228-
$this->assertNotEmpty(TestProcessor::$lastProcessMessage);
266+
$this->assertInstanceOf(Message::class, TestProcessor::$lastProcessMessage);
229267
}
230268
}

tests/TestCase/QueueManagerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public function testSetMultipleConfigs()
9999
public function testSetConfigWithInvalidConfigValue()
100100
{
101101
$this->expectException(LogicException::class);
102-
QueueManager::setConfig('test', null);
102+
QueueManager::setConfig('test');
103103
}
104104

105105
public function testSetConfigInvalidKeyValue()

0 commit comments

Comments
 (0)