Refactor lib/Router to use with container for endpoints

[MAILPOET-1605]
This commit is contained in:
Rostislav Wolny
2018-10-17 17:39:32 +02:00
parent 71ad9f50cb
commit fff8176a49
14 changed files with 132 additions and 111 deletions

View File

@ -5,6 +5,9 @@ namespace MailPoet\Test\Router;
use Codeception\Stub;
use Codeception\Stub\Expected;
use MailPoet\Config\AccessControl;
use MailPoet\Dependencies\Symfony\Component\DependencyInjection\Container;
use MailPoet\DI\ContainerFactory;
use MailPoet\Router\Endpoints\RouterTestMockEndpoint;
use MailPoet\Router\Router;
require_once('RouterTestMockEndpoint.php');
@ -12,6 +15,8 @@ require_once('RouterTestMockEndpoint.php');
class RouterTest extends \MailPoetTest {
public $access_control;
public $router_data;
/** @var Container */
private $container;
function _before() {
$this->router_data = array(
@ -21,7 +26,10 @@ class RouterTest extends \MailPoetTest {
'data' => base64_encode(json_encode(array('data' => 'dummy data')))
);
$this->access_control = new AccessControl();
$this->router = new Router($this->access_control, $this->router_data);
$this->container = ContainerFactory::createContainer();
$this->container->register(RouterTestMockEndpoint::class)->setPublic(true);
$this->container->compile();
$this->router = new Router($this->access_control, $this->container, $this->router_data);
}
function testItCanGetAPIDataFromGetRequest() {
@ -29,7 +37,7 @@ class RouterTest extends \MailPoetTest {
$url = 'http://example.com/?' . Router::NAME . '&endpoint=view_in_browser&action=view&data='
. base64_encode(json_encode($data));
parse_str(parse_url($url, PHP_URL_QUERY), $_GET);
$router = new Router($this->access_control);
$router = new Router($this->access_control, $this->container);
expect($router->api_request)->equals(true);
expect($router->endpoint)->equals('viewInBrowser');
expect($router->endpoint_action)->equals('view');
@ -41,7 +49,7 @@ class RouterTest extends \MailPoetTest {
unset($router_data[Router::NAME]);
$router = Stub::construct(
'\MailPoet\Router\Router',
array($this->access_control, $router_data)
array($this->access_control, $this->container, $router_data)
);
$result = $router->init();
expect($result)->null();
@ -52,7 +60,7 @@ class RouterTest extends \MailPoetTest {
$router_data['endpoint'] = 'invalid_endpoint';
$router = Stub::construct(
'\MailPoet\Router\Router',
array($this->access_control, $router_data),
array($this->access_control, $this->container, $router_data),
array(
'terminateRequest' => function($code, $error) {
return array(
@ -76,7 +84,7 @@ class RouterTest extends \MailPoetTest {
$router_data['action'] = 'invalid_action';
$router = Stub::construct(
'\MailPoet\Router\Router',
array($this->access_control, $router_data),
array($this->access_control, $this->container, $router_data),
array(
'terminateRequest' => function($code, $error) {
return array(
@ -164,7 +172,7 @@ class RouterTest extends \MailPoetTest {
function testItValidatesPermissionBeforeProcessingEndpointAction() {
$router = Stub::construct(
'\MailPoet\Router\Router',
array($this->access_control, $this->router_data),
array($this->access_control, $this->container, $this->router_data),
array(
'validatePermissions' => function($action, $permissions) {
expect($action)->equals($this->router_data['action']);
@ -186,7 +194,7 @@ class RouterTest extends \MailPoetTest {
function testItReturnsForbiddenResponseWhenPermissionFailsValidation() {
$router = Stub::construct(
'\MailPoet\Router\Router',
array($this->access_control, $this->router_data),
array($this->access_control, $this->container, $this->router_data),
array(
'validatePermissions' => false,
'terminateRequest' => function($code, $error) {