createMock(Translator::class); /** @var Session|MockObject $session */ $session = $this->createMock(Session::class); /** @var ServerRequestInterface|MockObject $request */ $request = $this->getMockForAbstractClass(ServerRequestInterface::class); /** @var RequestHandlerInterface|MockObject $handler */ $handler = $this->getMockForAbstractClass(RequestHandlerInterface::class); /** @var ResponseInterface|MockObject $response */ $response = $this->getMockForAbstractClass(ResponseInterface::class); $locale = 'te_ST.UTF8'; $request->expects($this->exactly(3)) ->method('getQueryParams') ->willReturnOnConsecutiveCalls( [], ['set-locale' => 'en_US.UTF8'], ['set-locale' => $locale] ); $translator->expects($this->exactly(2)) ->method('hasLocale') ->withConsecutive( ['en_US.UTF8'], [$locale] ) ->willReturnOnConsecutiveCalls( false, true ); $translator->expects($this->once()) ->method('setLocale') ->with($locale); $session->expects($this->once()) ->method('set') ->with('locale', $locale); $handler->expects($this->exactly(3)) ->method('handle') ->with($request) ->willReturn($response); $middleware = new SetLocale($translator, $session); $middleware->process($request, $handler); $middleware->process($request, $handler); $middleware->process($request, $handler); } }