Skip to content

Commit

Permalink
test(messaging): separate queue testing
Browse files Browse the repository at this point in the history
  • Loading branch information
papac committed Jan 26, 2025
1 parent 9d299bc commit 4fffef1
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 67 deletions.
63 changes: 0 additions & 63 deletions tests/Messaging/MessagingTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,69 +41,6 @@ public function test_can_send_message_synchronously(): void
$this->context->sendMessage($this->message);
}

public function test_can_send_message_to_queue(): void
{
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to queue and verify
static::$queueConnection->getAdapter()->push($producer);

$this->context->setMessageQueue($this->message);
}

public function test_can_send_message_to_specific_queue(): void
{
$queue = 'high-priority';
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to specific queue and verify
$adapter = static::$queueConnection->getAdapter();
$adapter->setQueue($queue);
$adapter->push($producer);

$this->context->sendMessageQueueOn($queue, $this->message);
}

public function test_can_send_message_with_delay(): void
{
$delay = 3600;
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to queue and verify
$adapter = static::$queueConnection->getAdapter();
$adapter->setSleep($delay);
$adapter->push($producer);

$this->context->sendMessageLater($delay, $this->message);
}

public function test_can_send_message_with_delay_on_specific_queue(): void
{
$delay = 3600;
$queue = 'delayed-notifications';
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to specific queue with delay and verify
$adapter = static::$queueConnection->getAdapter();
$adapter->setQueue($queue);
$adapter->setSleep($delay);
$adapter->push($producer);

$this->context->sendMessageLaterOn($delay, $queue, $this->message);
}

public function test_message_sends_to_correct_channels(): void
{
$context = new TestNotifiableModel();
Expand Down
9 changes: 5 additions & 4 deletions tests/Queue/MailQueueTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use Bow\Cache\CacheConfiguration;
use Bow\Configuration\EnvConfiguration;
use Bow\Configuration\LoggerConfiguration;
use Bow\Mail\Envelop;
use Bow\Mail\MailConfiguration;
use Bow\Mail\MailQueueProducer;
use Bow\Queue\Connection as QueueConnection;
Expand Down Expand Up @@ -32,10 +33,10 @@ public static function setUpBeforeClass(): void

public function testQueueMail()
{
$message = new Message();
$message->to("[email protected]");
$message->subject("hello from bow");
$producer = new MailQueueProducer("email", [], $message);
$envelop = new Envelop();
$envelop->to("[email protected]");
$envelop->subject("hello from bow");
$producer = new MailQueueProducer("email", [], $envelop);

$adapter = static::$connection->setConnection("beanstalkd")->getAdapter();

Expand Down
113 changes: 113 additions & 0 deletions tests/Queue/MessagingQueueTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<?php

namespace Bow\Tests\Queue;

use Bow\Database\Barry\Model;
use Bow\Messaging\MessagingQueueProducer;
use Bow\Queue\Connection as QueueConnection;
use Bow\Tests\Messaging\Stubs\TestMessage;
use Bow\Tests\Messaging\Stubs\TestNotifiableModel;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;

class MessagingTest extends TestCase
{
private static QueueConnection $queueConnection;
private MockObject|Model $context;
private MockObject|TestMessage $message;

public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();

// Initialize queue connection
static::$queueConnection = new QueueConnection([
'default' => 'sync',
'connections' => [
'sync' => [
'driver' => 'sync'
]
]
]);
}

public function test_can_send_message_synchronously(): void
{
$this->message->expects($this->once())
->method('process')
->with($this->context);

$this->context->sendMessage($this->message);
}

public function test_can_send_message_to_queue(): void
{
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to queue and verify
static::$queueConnection->getAdapter()->push($producer);

$this->context->setMessageQueue($this->message);
}

public function test_can_send_message_to_specific_queue(): void
{
$queue = 'high-priority';
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to specific queue and verify
$adapter = static::$queueConnection->getAdapter();
$adapter->setQueue($queue);
$adapter->push($producer);

$this->context->sendMessageQueueOn($queue, $this->message);
}

public function test_can_send_message_with_delay(): void
{
$delay = 3600;
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to queue and verify
$adapter = static::$queueConnection->getAdapter();
$adapter->setSleep($delay);
$adapter->push($producer);

$this->context->sendMessageLater($delay, $this->message);
}

public function test_can_send_message_with_delay_on_specific_queue(): void
{
$delay = 3600;
$queue = 'delayed-notifications';
$producer = new MessagingQueueProducer($this->context, $this->message);

// Verify that the producer is created with correct parameters
$this->assertInstanceOf(MessagingQueueProducer::class, $producer);

// Push to specific queue with delay and verify
$adapter = static::$queueConnection->getAdapter();
$adapter->setQueue($queue);
$adapter->setSleep($delay);
$adapter->push($producer);

$this->context->sendMessageLaterOn($delay, $queue, $this->message);
}

protected function setUp(): void
{
parent::setUp();

$this->context = $this->createMock(TestNotifiableModel::class);
$this->message = $this->createMock(TestMessage::class);
}
}

0 comments on commit 4fffef1

Please sign in to comment.