getMockBuilder(MethodHandlerInterface::class) ->disableOriginalConstructor() ->onlyMethods(['supports', 'handle']) ->getMock(); $handlerA->method('supports')->willReturn(true); $handlerA->expects($this->once())->method('handle'); $handlerB = $this->getMockBuilder(MethodHandlerInterface::class) ->disableOriginalConstructor() ->onlyMethods(['supports', 'handle']) ->getMock(); $handlerB->method('supports')->willReturn(false); $handlerB->expects($this->never())->method('handle'); $handlerC = $this->getMockBuilder(MethodHandlerInterface::class) ->disableOriginalConstructor() ->onlyMethods(['supports', 'handle']) ->getMock(); $handlerC->method('supports')->willReturn(true); $handlerC->expects($this->once())->method('handle'); $sessionFactory = $this->createMock(SessionFactoryInterface::class); $sessionStore = $this->createMock(SessionStoreInterface::class); $session = $this->createMock(SessionInterface::class); $sessionFactory->method('create')->willReturn($session); $sessionFactory->method('createWithId')->willReturn($session); $sessionStore->method('exists')->willReturn(true); $jsonRpc = new JsonRpcHandler( MessageFactory::make(), $sessionFactory, $sessionStore, [$handlerA, $handlerB, $handlerC] ); $sessionId = Uuid::v4(); $result = $jsonRpc->process( '{"jsonrpc": "2.0", "method": "notifications/initialized"}', $sessionId ); iterator_to_array($result); } #[TestDox('Make sure a single request can NOT be handled by multiple handlers.')] public function testHandleMultipleRequests() { $handlerA = $this->getMockBuilder(MethodHandlerInterface::class) ->disableOriginalConstructor() ->onlyMethods(['supports', 'handle']) ->getMock(); $handlerA->method('supports')->willReturn(true); $handlerA->expects($this->once())->method('handle')->willReturn(new Response(1, ['result' => 'success'])); $handlerB = $this->getMockBuilder(MethodHandlerInterface::class) ->disableOriginalConstructor() ->onlyMethods(['supports', 'handle']) ->getMock(); $handlerB->method('supports')->willReturn(false); $handlerB->expects($this->never())->method('handle'); $handlerC = $this->getMockBuilder(MethodHandlerInterface::class) ->disableOriginalConstructor() ->onlyMethods(['supports', 'handle']) ->getMock(); $handlerC->method('supports')->willReturn(true); $handlerC->expects($this->never())->method('handle'); $sessionFactory = $this->createMock(SessionFactoryInterface::class); $sessionStore = $this->createMock(SessionStoreInterface::class); $session = $this->createMock(SessionInterface::class); $sessionFactory->method('create')->willReturn($session); $sessionFactory->method('createWithId')->willReturn($session); $sessionStore->method('exists')->willReturn(true); $jsonRpc = new JsonRpcHandler( MessageFactory::make(), $sessionFactory, $sessionStore, [$handlerA, $handlerB, $handlerC] ); $sessionId = Uuid::v4(); $result = $jsonRpc->process( '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}', $sessionId ); iterator_to_array($result); } }