apiKeyService = $this->prophesize(ApiKeyService::class); $this->jwtService = $this->prophesize(JWTService::class); $this->jwtService->create(Argument::cetera())->willReturn(''); $this->action = new AuthenticateAction($this->apiKeyService->reveal(), $this->jwtService->reveal()); } /** @test */ public function notProvidingAuthDataReturnsError() { $resp = $this->action->handle(new ServerRequest()); $this->assertEquals(400, $resp->getStatusCode()); } /** @test */ public function properApiKeyReturnsTokenInResponse() { $this->apiKeyService->getByKey('foo')->willReturn((new ApiKey())->setId('5')) ->shouldBeCalledOnce(); $request = (new ServerRequest())->withParsedBody([ 'apiKey' => 'foo', ]); $response = $this->action->handle($request); $this->assertEquals(200, $response->getStatusCode()); $response->getBody()->rewind(); $this->assertTrue(strpos($response->getBody()->getContents(), '"token"') > 0); } /** @test */ public function invalidApiKeyReturnsErrorResponse() { $this->apiKeyService->getByKey('foo')->willReturn((new ApiKey())->disable()) ->shouldBeCalledOnce(); $request = (new ServerRequest())->withParsedBody([ 'apiKey' => 'foo', ]); $response = $this->action->handle($request); $this->assertEquals(401, $response->getStatusCode()); } }