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 extends _Subscriber { public function isAuthenticated():bool { return true; } }; $unauthorizedSubscriber = new class extends _Subscriber { public function isAuthenticated():bool { return false; } }; $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)); } } abstract class _Subscriber implements SubscriberInterface { public array $messages = []; public function isAuthenticated():bool { return false; } public function deliver(Message $message):void { $this->messages[] = $message; } public function getMercureClaims(): ?array { return []; } public function getPayload(): ?array { return null; } public function getId(): string { return ""; } };