Files
Traefik-Redis-Api/tests/Controllers/RoutesControllerTest.php

160 lines
4.7 KiB
PHP

<?php
declare(strict_types=1);
namespace Siteworxpro\Tests\Controllers;
use Nyholm\Psr7\ServerRequest;
use Siteworxpro\App\Controllers\RoutesController;
use Siteworxpro\App\Facades\RedisClient;
use Siteworxpro\App\Traefik\EntityEnum;
use Siteworxpro\App\Traefik\ProtocolEnum;
use Siteworxpro\Tests\Unit;
class RoutesControllerTest extends Unit
{
/**
* @throws \JsonException
*/
public function testGet(): void
{
$request = new ServerRequest('GET', '/routes');
$request = $request->withAttribute('protocol', 'http');
RedisClient::expects('getAllRouters')
->with(ProtocolEnum::HTTP)
->andReturn(['route1', 'route2']);
$controller = new RoutesController();
$response = $controller->get($request);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('["route1","route2"]', (string)$response->getBody());
$this->assertEquals('application/json', $response->getHeaderLine('Content-Type'));
}
/**
* @throws \JsonException
*/
public function testGetInd(): void
{
$request = new ServerRequest('GET', '/routes/foo');
$request = $request
->withAttribute('protocol', 'http')
->withAttribute('id', 'foo');
RedisClient::expects('getRouter')
->with('foo', ProtocolEnum::HTTP)
->andReturn([
'traefik/http/routers/foo' => 'bar',
]);
$controller = new RoutesController();
$response = $controller->get($request);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('{"traefik\/http\/routers\/foo":"bar"}', (string)$response->getBody());
$this->assertEquals('application/json', $response->getHeaderLine('Content-Type'));
}
/**
* @throws \JsonException
*/
public function testDelete(): void
{
$request = new ServerRequest('DELETE', '/routes/foo');
$request = $request
->withAttribute('protocol', 'http')
->withAttribute('id', 'foo');
RedisClient::expects('deleteAllKeys')
->with('foo', EntityEnum::ROUTER, ProtocolEnum::HTTP)
->andReturn(true);
$controller = new RoutesController();
$response = $controller->delete($request);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('{"message":"Router deleted successfully"}', (string)$response->getBody());
}
/**
* @throws \JsonException
*/
public function testPost(): void
{
$request = new ServerRequest('POST', '/routes/foo');
$request = $request
->withAttribute('protocol', 'http')
->withAttribute('id', 'foo')
->withParsedBody([
'service' => 'my-service',
'rule' => 'Host(`example.com`)',
]);
RedisClient::expects('createOrReplace')
->with(
'foo',
[
'service' => 'my-service',
'rule' => 'Host(`example.com`)',
],
EntityEnum::ROUTER,
ProtocolEnum::HTTP
)
->andReturn(true);
$controller = new RoutesController();
$response = $controller->post($request);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('{"message":"Router created successfully"}', (string)$response->getBody());
}
/**
* @throws \JsonException
*/
public function testPostWithoutService(): void
{
$request = new ServerRequest('POST', '/routes/foo');
$request = $request
->withAttribute('protocol', 'http')
->withAttribute('id', 'foo')
->withParsedBody([
'rule' => 'Host(`example.com`)',
]);
$controller = new RoutesController();
$response = $controller->post($request);
$this->assertEquals(400, $response->getStatusCode());
$this->assertEquals('{"error":"Service is required"}', (string)$response->getBody());
}
/**
* @throws \JsonException
*/
public function testPostWithoutRule(): void
{
$request = new ServerRequest('POST', '/routes/foo');
$request = $request
->withAttribute('protocol', 'http')
->withAttribute('id', 'foo')
->withParsedBody([
'service' => 'my-service',
]);
$controller = new RoutesController();
$response = $controller->post($request);
$this->assertEquals(400, $response->getStatusCode());
$this->assertEquals('{"error":"Rule is required"}', (string)$response->getBody());
}
}