Skip to content

Commit 25a6964

Browse files
committed
Works on code coverage
1 parent fe7f359 commit 25a6964

File tree

2 files changed

+337
-0
lines changed

2 files changed

+337
-0
lines changed

tests/TestCase/TestSuite/QueueTestSuiteTest.php

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Cake\Queue\QueueManager;
77
use Cake\Queue\TestSuite\QueueTrait as TestQueueTrait;
88
use Cake\Queue\TestSuite\TestQueueClient;
9+
use Cake\Queue\TestSuite\Transport\TestContext;
910
use Cake\TestSuite\TestCase;
1011
use Enqueue\Client\MessagePriority;
1112
use PHPUnit\Framework\AssertionFailedError;
@@ -408,4 +409,193 @@ public function testJobCapturedWithExpires(): void
408409
$this->assertCount(1, $jobs);
409410
$this->assertEquals(3600, $jobs[0]['options']['expires']);
410411
}
412+
413+
/**
414+
* Test getQueuedJobCount
415+
*
416+
* @return void
417+
*/
418+
public function testGetQueuedJobCount(): void
419+
{
420+
$this->assertEquals(0, TestQueueClient::getQueuedJobCount());
421+
422+
QueueManager::push(LogToDebugJob::class, []);
423+
$this->assertEquals(1, TestQueueClient::getQueuedJobCount());
424+
425+
QueueManager::push(LogToDebugJob::class, []);
426+
$this->assertEquals(2, TestQueueClient::getQueuedJobCount());
427+
}
428+
429+
/**
430+
* Test replaceAllClients with multiple configs
431+
*
432+
* @return void
433+
*/
434+
public function testReplaceAllClientsWithMultipleConfigs(): void
435+
{
436+
QueueManager::setConfig('test1', ['url' => 'null:']);
437+
QueueManager::setConfig('test2', ['url' => 'null:']);
438+
439+
TestQueueClient::replaceAllClients();
440+
441+
$config1 = QueueManager::getConfig('test1');
442+
$config2 = QueueManager::getConfig('test2');
443+
444+
$this->assertNotNull($config1);
445+
$this->assertNotNull($config2);
446+
447+
$url1 = $config1['url'];
448+
$url2 = $config2['url'];
449+
$transport1 = is_array($url1) ? $url1['transport'] : $url1;
450+
$transport2 = is_array($url2) ? $url2['transport'] : $url2;
451+
452+
$this->assertEquals('test:', $transport1);
453+
$this->assertEquals('test:', $transport2);
454+
}
455+
456+
/**
457+
* Test replaceAllClients handles null config gracefully
458+
*
459+
* @return void
460+
*/
461+
public function testReplaceAllClientsHandlesNullConfig(): void
462+
{
463+
QueueManager::setConfig('test-null', ['url' => 'null:']);
464+
QueueManager::drop('test-null');
465+
466+
TestQueueClient::replaceAllClients();
467+
468+
$this->assertNull(QueueManager::getConfig('test-null'));
469+
}
470+
471+
/**
472+
* Test job captured with custom method
473+
*
474+
* @return void
475+
*/
476+
public function testJobCapturedWithCustomMethod(): void
477+
{
478+
$body = json_encode([
479+
'class' => [LogToDebugJob::class, 'customMethod'],
480+
'data' => ['test' => 'value'],
481+
]);
482+
483+
$context = new TestContext();
484+
$destination = $context->createQueue('default');
485+
$message = $context->createMessage($body);
486+
487+
TestQueueClient::captureMessage($destination, $message);
488+
489+
$jobs = $this->getQueuedJobs();
490+
$this->assertCount(1, $jobs);
491+
$this->assertEquals(LogToDebugJob::class, $jobs[0]['jobClass']);
492+
$this->assertEquals('customMethod', $jobs[0]['method']);
493+
}
494+
495+
/**
496+
* Test job captured with topic destination
497+
*
498+
* @return void
499+
*/
500+
public function testJobCapturedWithTopicDestination(): void
501+
{
502+
$body = json_encode([
503+
'class' => [LogToDebugJob::class],
504+
'data' => [],
505+
]);
506+
507+
$context = new TestContext();
508+
$destination = $context->createTopic('test-topic');
509+
$message = $context->createMessage($body);
510+
511+
TestQueueClient::captureMessage($destination, $message);
512+
513+
$jobs = $this->getQueuedJobs();
514+
$this->assertCount(1, $jobs);
515+
$this->assertEquals('test-topic', $jobs[0]['options']['queue']);
516+
}
517+
518+
/**
519+
* Test job captured with requeue options
520+
*
521+
* @return void
522+
*/
523+
public function testJobCapturedWithRequeueOptions(): void
524+
{
525+
$body = json_encode([
526+
'class' => [LogToDebugJob::class],
527+
'data' => [],
528+
'requeueOptions' => [
529+
'config' => 'custom-config',
530+
'queue' => 'custom-queue',
531+
'priority' => 'high',
532+
],
533+
]);
534+
535+
$context = new TestContext();
536+
$destination = $context->createQueue('default');
537+
$message = $context->createMessage($body);
538+
539+
TestQueueClient::captureMessage($destination, $message);
540+
541+
$jobs = $this->getQueuedJobs();
542+
$this->assertCount(1, $jobs);
543+
$this->assertEquals('custom-config', $jobs[0]['options']['config']);
544+
$this->assertEquals('custom-queue', $jobs[0]['options']['queue']);
545+
$this->assertEquals('high', $jobs[0]['options']['priority']);
546+
}
547+
548+
/**
549+
* Test job captured with message properties for delay and expires
550+
*
551+
* @return void
552+
*/
553+
public function testJobCapturedWithMessageProperties(): void
554+
{
555+
$body = json_encode([
556+
'class' => [LogToDebugJob::class],
557+
'data' => [],
558+
]);
559+
560+
$context = new TestContext();
561+
$destination = $context->createQueue('default');
562+
$message = $context->createMessage($body, [
563+
'enqueue.delay' => '5',
564+
'enqueue.expire' => '10',
565+
'enqueue.priority' => '5',
566+
]);
567+
568+
TestQueueClient::captureMessage($destination, $message, 3000, 6000, 3);
569+
570+
$jobs = $this->getQueuedJobs();
571+
$this->assertCount(1, $jobs);
572+
$this->assertEquals(5, $jobs[0]['options']['delay']);
573+
$this->assertEquals(10, $jobs[0]['options']['expires']);
574+
$this->assertEquals(5, $jobs[0]['options']['priority']);
575+
}
576+
577+
/**
578+
* Test job captured with delivery delay and time to live from producer
579+
*
580+
* @return void
581+
*/
582+
public function testJobCapturedWithProducerDelayAndTtl(): void
583+
{
584+
$body = json_encode([
585+
'class' => [LogToDebugJob::class],
586+
'data' => [],
587+
]);
588+
589+
$context = new TestContext();
590+
$destination = $context->createQueue('default');
591+
$message = $context->createMessage($body);
592+
593+
TestQueueClient::captureMessage($destination, $message, 5000, 10000, 3);
594+
595+
$jobs = $this->getQueuedJobs();
596+
$this->assertCount(1, $jobs);
597+
$this->assertEquals(5, $jobs[0]['options']['delay']);
598+
$this->assertEquals(10, $jobs[0]['options']['expires']);
599+
$this->assertEquals(3, $jobs[0]['options']['priority']);
600+
}
411601
}
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace Cake\Queue\Test\TestCase\TestSuite\Transport;
5+
6+
use Cake\Queue\TestSuite\Transport\TestConnectionFactory;
7+
use Cake\Queue\TestSuite\Transport\TestConsumer;
8+
use Cake\Queue\TestSuite\Transport\TestContext;
9+
use Cake\Queue\TestSuite\Transport\TestDestination;
10+
use Cake\Queue\TestSuite\Transport\TestMessage;
11+
use Cake\Queue\TestSuite\Transport\TestProducer;
12+
use Cake\Queue\TestSuite\Transport\TestSubscriptionConsumer;
13+
use Cake\TestSuite\TestCase;
14+
15+
class TransportTest extends TestCase
16+
{
17+
public function testTestConnectionFactory(): void
18+
{
19+
$factory = new TestConnectionFactory();
20+
$context = $factory->createContext();
21+
$this->assertInstanceOf(TestContext::class, $context);
22+
$factory->close();
23+
}
24+
25+
public function testTestContext(): void
26+
{
27+
$context = new TestContext();
28+
29+
$message = $context->createMessage('body', ['prop' => 'value'], ['header' => 'value']);
30+
$this->assertInstanceOf(TestMessage::class, $message);
31+
$this->assertEquals('body', $message->getBody());
32+
33+
$queue = $context->createQueue('test-queue');
34+
$this->assertInstanceOf(TestDestination::class, $queue);
35+
$this->assertEquals('test-queue', $queue->getQueueName());
36+
37+
$topic = $context->createTopic('test-topic');
38+
$this->assertInstanceOf(TestDestination::class, $topic);
39+
$this->assertEquals('test-topic', $topic->getTopicName());
40+
41+
$producer = $context->createProducer();
42+
$this->assertInstanceOf(TestProducer::class, $producer);
43+
44+
$consumer = $context->createConsumer($queue);
45+
$this->assertInstanceOf(TestConsumer::class, $consumer);
46+
47+
$topicConsumer = $context->createConsumer($topic);
48+
$this->assertInstanceOf(TestConsumer::class, $topicConsumer);
49+
50+
$subscriptionConsumer = $context->createSubscriptionConsumer();
51+
$this->assertInstanceOf(TestSubscriptionConsumer::class, $subscriptionConsumer);
52+
53+
$tempQueue = $context->createTemporaryQueue();
54+
$this->assertInstanceOf(TestDestination::class, $tempQueue);
55+
$this->assertStringStartsWith('temp_', $tempQueue->getQueueName());
56+
57+
$context->purgeQueue($queue);
58+
$context->close();
59+
}
60+
61+
public function testTestMessage(): void
62+
{
63+
$message = new TestMessage('body', ['prop' => 'value'], ['header' => 'value']);
64+
65+
$this->assertEquals('body', $message->getBody());
66+
$message->setBody('new-body');
67+
$this->assertEquals('new-body', $message->getBody());
68+
69+
$this->assertEquals('value', $message->getProperty('prop'));
70+
$this->assertEquals('default', $message->getProperty('missing', 'default'));
71+
$message->setProperty('new-prop', 'new-value');
72+
$this->assertEquals('new-value', $message->getProperty('new-prop'));
73+
74+
$this->assertEquals('value', $message->getHeader('header'));
75+
$this->assertEquals('default', $message->getHeader('missing', 'default'));
76+
$message->setHeader('new-header', 'new-value');
77+
$this->assertEquals('new-value', $message->getHeader('new-header'));
78+
79+
$message->setProperties(['a' => 'b']);
80+
$this->assertEquals(['a' => 'b'], $message->getProperties());
81+
82+
$message->setHeaders(['x' => 'y']);
83+
$this->assertEquals(['x' => 'y'], $message->getHeaders());
84+
85+
$this->assertFalse($message->isRedelivered());
86+
87+
$message->setCorrelationId('corr-123');
88+
$this->assertEquals('corr-123', $message->getCorrelationId());
89+
90+
$message->setMessageId('msg-123');
91+
$this->assertEquals('msg-123', $message->getMessageId());
92+
93+
$message->setTimestamp(1234567890);
94+
$this->assertEquals(1234567890, $message->getTimestamp());
95+
96+
$message->setReplyTo('reply-to');
97+
$this->assertEquals('reply-to', $message->getReplyTo());
98+
}
99+
100+
public function testTestProducer(): void
101+
{
102+
$producer = new TestProducer();
103+
$destination = new TestDestination('test-queue');
104+
$message = new TestMessage('body');
105+
106+
$producer->setDeliveryDelay(1000);
107+
$this->assertEquals(1000, $producer->getDeliveryDelay());
108+
109+
$producer->setPriority(5);
110+
$this->assertEquals(5, $producer->getPriority());
111+
112+
$producer->setTimeToLive(2000);
113+
$this->assertEquals(2000, $producer->getTimeToLive());
114+
115+
$producer->send($destination, $message);
116+
}
117+
118+
public function testTestConsumer(): void
119+
{
120+
$subscriptionConsumer = new TestSubscriptionConsumer();
121+
$queue = new TestDestination('test-queue');
122+
$consumer = new TestConsumer($queue);
123+
124+
$this->assertEquals($queue, $consumer->getQueue());
125+
$this->assertNull($consumer->receive());
126+
$this->assertNull($consumer->receiveNoWait());
127+
128+
$message = new TestMessage('body');
129+
$consumer->acknowledge($message);
130+
$consumer->reject($message, true);
131+
132+
$subscriptionConsumer->consume(1000);
133+
$subscriptionConsumer->subscribe($consumer, function () {
134+
});
135+
$subscriptionConsumer->unsubscribe($consumer);
136+
$subscriptionConsumer->unsubscribeAll();
137+
}
138+
139+
public function testTestDestination(): void
140+
{
141+
$destination = new TestDestination('test-name');
142+
143+
$this->assertEquals('test-name', $destination->getQueueName());
144+
$this->assertEquals('test-name', $destination->getTopicName());
145+
$this->assertEquals('test-name', $destination->getDestinationName());
146+
}
147+
}

0 commit comments

Comments
 (0)