getUrl(); } public function getProvider(): \Symfony\Component\Mercure\Jwt\TokenProviderInterface { throw new \LogicException('not used in test'); } public function getFactory(): ?\Symfony\Component\Mercure\Jwt\TokenFactoryInterface { return null; } public function publish(Update $update): string { $this->captured = $update; return 'urn:uuid:test'; } }; $publisher = new Publisher($hub); $id = $publisher->publish('app://model/todo', ['op' => 'upsert', 'id' => '1', 'data' => ['done' => true], 'version' => 7]); self::assertSame('urn:uuid:test', $id); self::assertInstanceOf(Update::class, $captured); self::assertSame(['app://model/todo'], $captured->getTopics()); self::assertJsonStringEqualsJsonString( '{"op":"upsert","id":"1","data":{"done":true},"version":7}', $captured->getData(), ); self::assertFalse($captured->isPrivate()); } public function testPrivateFlagIsForwarded(): void { $captured = null; $hub = new class($captured) implements HubInterface { public function __construct(private mixed &$captured) {} public function getUrl(): string { return ''; } public function getPublicUrl(): string { return ''; } public function getProvider(): \Symfony\Component\Mercure\Jwt\TokenProviderInterface { throw new \LogicException(); } public function getFactory(): ?\Symfony\Component\Mercure\Jwt\TokenFactoryInterface { return null; } public function publish(Update $update): string { $this->captured = $update; return ''; } }; (new Publisher($hub))->publish('app://event/internal', ['data' => 'x'], private: true); self::assertTrue($captured->isPrivate()); } }