messages[] = $message; } public function getPayload(): ?array { return null; } public function getId(): string { return ""; } }; $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; } public function getId(): string { return ""; } }; $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; } public function getId(): string { return ""; } }; $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; } public function getId(): string { return ""; } }; $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)); } }