withAttribute('protocol', 'http'); RedisClient::expects('getAllMiddlewares') ->with(ProtocolEnum::HTTP) ->andReturn(['middleware1', 'middleware2']); $controller = new MiddlewaresController(); $response = $controller->get($request); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('["middleware1","middleware2"]', (string)$response->getBody()); $this->assertEquals('application/json', $response->getHeaderLine('Content-Type')); } /** * @throws \JsonException */ public function testGetInd(): void { $request = new ServerRequest('GET', '/middlewares/foo'); $request = $request ->withAttribute('protocol', 'http') ->withAttribute('id', 'foo'); RedisClient::expects('getMiddleware') ->with('foo', ProtocolEnum::HTTP) ->andReturn([ 'traefik/http/middlewares/foo' => 'bar', ]); $controller = new MiddlewaresController(); $response = $controller->get($request); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('{"traefik\/http\/middlewares\/foo":"bar"}', (string)$response->getBody()); $this->assertEquals('application/json', $response->getHeaderLine('Content-Type')); } /** * @throws \JsonException */ public function testPost(): void { $request = new ServerRequest('POST', '/middlewares'); $request = $request ->withAttribute('protocol', 'http') ->withAttribute('id', 'foo') ->withParsedBody(['foo' => 'bar']); RedisClient::expects('createOrReplace') ->with('foo', ['foo' => 'bar'], EntityEnum::MIDDLEWARE, ProtocolEnum::HTTP) ->andReturn(true); $controller = new MiddlewaresController(); $response = $controller->post($request); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('{"message":"Middleware added successfully"}', (string)$response->getBody()); } public function testPostValidationFailure(): void { $request = new ServerRequest('POST', '/middlewares'); $request = $request ->withAttribute('protocol', 'http') ->withAttribute('id', 'foo') ->withParsedBody([]); RedisClient::expects('createOrReplace') ->never(); $controller = new MiddlewaresController(); $response = $controller->post($request); $this->assertEquals(400, $response->getStatusCode()); $this->assertEquals('{"error":"Middleware is invalid"}', (string)$response->getBody()); } /** * @throws \JsonException */ public function testDelete(): void { $request = new ServerRequest('DELETE', '/middlewares/foo'); $request = $request ->withAttribute('protocol', 'http') ->withAttribute('id', 'foo'); RedisClient::expects('deleteAllKeys') ->with('foo', EntityEnum::MIDDLEWARE, ProtocolEnum::HTTP) ->andReturn(true); $controller = new MiddlewaresController(); $response = $controller->delete($request); $this->assertEquals(200, $response->getStatusCode()); $this->assertEquals('{"message":"Middleware deleted successfully"}', (string)$response->getBody()); } /** * @throws \JsonException */ public function testDeleteValidationFailure(): void { $request = new ServerRequest('DELETE', '/middlewares'); $request = $request ->withAttribute('protocol', 'http') ->withAttribute('id', ''); RedisClient::expects('deleteAllKeys') ->never(); $controller = new MiddlewaresController(); $response = $controller->delete($request); $this->assertEquals(400, $response->getStatusCode()); $this->assertEquals('{"error":"Middleware is invalid"}', (string)$response->getBody()); } }