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'); $jsonRpc = new Handler(MessageFactory::make(), [$handlerA, $handlerB, $handlerC]); $result = $jsonRpc->process( '{"jsonrpc": "2.0", "method": "notifications/initialized"}' ); 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'); $jsonRpc = new Handler(MessageFactory::make(), [$handlerA, $handlerB, $handlerC]); $result = $jsonRpc->process( '{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}' ); iterator_to_array($result); } }