First unit tests, misc fixes

This commit is contained in:
2024-03-12 01:45:21 +01:00
parent b3476881e1
commit 8be2e81054
8 changed files with 173 additions and 22 deletions

View File

@ -0,0 +1,70 @@
<?php
namespace NoccyLabs\Mercureact\Broker;
use PHPUnit\Framework\Attributes\CoversClass;
#[CoversClass(Message::class)]
class MessageTest extends \PHPUnit\Framework\TestCase
{
public function testCreatingMessageFromData()
{
$message = Message::fromData([
'id' => '1a',
'topic' => '2b',
'data' => '3c',
'type' => '4d',
'retry' => 42,
'private' => true,
]);
$this->assertEquals("1a", $message->id);
$this->assertEquals(["2b"], $message->topic);
$this->assertEquals("3c", $message->data);
$this->assertEquals("4d", $message->type);
$this->assertEquals(42, $message->retry);
$this->assertEquals(true, $message->private);
$message = Message::fromData([
'id' => '1a',
'topic' => ['2b'],
'data' => '3c',
'type' => '4d',
'retry' => 42,
'private' => true,
]);
$this->assertEquals("1a", $message->id);
$this->assertEquals(["2b"], $message->topic);
$this->assertEquals("3c", $message->data);
$this->assertEquals("4d", $message->type);
$this->assertEquals(42, $message->retry);
$this->assertEquals(true, $message->private);
}
public function testCreatingSseFromMessage()
{
$message = Message::fromData([
'id' => '1a',
'topic' => '2b',
'data' => '3c',
'type' => '4d',
'retry' => 42,
'private' => true,
]);
$sse = $message->toString();
$this->assertEquals(<<<EXPECT
event: 4d
retry: 42
id: 1a
data: 3c
EXPECT, $sse);
}
}

View File

@ -0,0 +1,63 @@
<?php
namespace NoccyLabs\Mercureact\Broker;
use PHPUnit\Framework\Attributes\CoversClass;
#[CoversClass(Topic::class)]
class TopicTest extends \PHPUnit\Framework\TestCase
{
public function testPublicMessagesAreDeliveredToAllSubscribers()
{
$authorizedSubscriber = new class implements SubscriberInterface {
public array $messages = [];
public function isAuthorized():bool { return true; }
public function deliver(Message $message):void { $this->messages[] = $message; }
public function getPayload(): ?array { return null; }
};
$unauthorizedSubscriber = new class implements SubscriberInterface {
public array $messages = [];
public function isAuthorized():bool { return false; }
public function deliver(Message $message):void { $this->messages[] = $message; }
public function getPayload(): ?array { return null; }
};
$topic = new Topic("foo");
$topic->addSubscriber($authorizedSubscriber);
$topic->addSubscriber($unauthorizedSubscriber);
$message = new Message(topic:["foo"], data:"test", private:false);
$topic->publish($message);
$this->assertEquals(1, count($authorizedSubscriber->messages));
$this->assertEquals(1, count($unauthorizedSubscriber->messages));
}
public function testPrivateMessagesAreNotDeliveredToUnauthorizedSubscribers()
{
$authorizedSubscriber = new class implements SubscriberInterface {
public array $messages = [];
public function isAuthorized():bool { return true; }
public function deliver(Message $message):void { $this->messages[] = $message; }
public function getPayload(): ?array { return null; }
};
$unauthorizedSubscriber = new class implements SubscriberInterface {
public array $messages = [];
public function isAuthorized():bool { return false; }
public function deliver(Message $message):void { $this->messages[] = $message; }
public function getPayload(): ?array { return null; }
};
$topic = new Topic("foo");
$topic->addSubscriber($authorizedSubscriber);
$topic->addSubscriber($unauthorizedSubscriber);
$message = new Message(topic:["foo"], data:"test", private:true);
$topic->publish($message);
$this->assertEquals(1, count($authorizedSubscriber->messages));
$this->assertEquals(0, count($unauthorizedSubscriber->messages));
}
}