63 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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));
 | 
						|
    }
 | 
						|
 | 
						|
} |