Add legacy non-view actions re-direction

- Listen to legacy non-view calls on the LegacyRedirectListener
- Add LegacyNonViewActionRedirectHandler to re-direct to legacy
-- Using 307 re-direction response to support post re-direction
- Add unit test for LegacyNonViewActionRedirectHandler
This commit is contained in:
Clemente Raposo 2020-05-08 16:12:15 +01:00 committed by Dillon-Brown
parent 6c3e266b5d
commit c1ef13322a
7 changed files with 545 additions and 18 deletions

View file

@ -0,0 +1,406 @@
<?php namespace App\Tests;

use App\Service\ActionNameMapper;
use App\Service\LegacyNonViewActionRedirectHandler;
use App\Service\ModuleNameMapper;
use App\Service\RouteConverter;
use Codeception\Test\Unit;
use Exception;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
use Symfony\Component\Routing\Router;

class LegacyNonViewActionRedirectHandlerTest extends Unit
{
/**
* @var UnitTester
*/
protected $tester;

/**
* @var LegacyNonViewActionRedirectHandler
*/
private $handler;

/**
* @throws Exception
*/
protected function _before(): void
{
$legacyModuleNameMap = [
'Contacts' => [
'frontend' => 'contacts',
'core' => 'Contacts'
],
];

$legacyActionNameMap = [
'index ' => 'index',
'DetailView' => 'detail',
'EditView' => 'edit',
'ListView' => 'list',
];

$moduleMapper = new ModuleNameMapper($legacyModuleNameMap);
$actionMapper = new ActionNameMapper($legacyActionNameMap);
$converter = new RouteConverter($moduleMapper, $actionMapper);

$routes = [
'/login',
'/logout',
'/api',
'/session-status'
];

/** @var Router $router */
$router = $this->make(
Router::class,
[
'matchRequest' => static function (Request $request) use ($routes) {

if ($request->getPathInfo() === '/') {
return [];
}

foreach ($routes as $route) {
if (strpos($request->getPathInfo(), $route) === 0) {
return [];
}
}
throw new ResourceNotFoundException('path not found');
},
]
);

$this->handler = new LegacyNonViewActionRedirectHandler($converter, $router, '/legacy');
}

/**
* Test request match with suite 8 api request
*/
public function testMatchCheckWithSuite8Request(): void
{
$queryParams = [
];

$serverParams = [
'REDIRECT_BASE' => '/suiteinstance',
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'HTTP_ORIGIN' => 'http://localhost',
'HTTP_REFERER' => 'http://localhost/suiteinstance/public/docs/graphql-playground/index.html',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/api/graphql',
'REQUEST_METHOD' => 'POST',
'REQUEST_URI' => '/suiteinstance/api/graphql',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php',
];

$request = new Request($queryParams, [], [], [], [], $serverParams);

$valid = $this->handler->isMatch($request);

static::assertFalse($valid);
}

/**
* Test request match with suite 8 login request
*/
public function testMatchCheckWithSuite8LoginRequest(): void
{
$queryParams = [
];

$serverParams = [
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/',
'REDIRECT_QUERY_STRING' => '',
'REQUEST_METHOD' => 'GET',
'QUERY_STRING' => '',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'REQUEST_URI' => '/suiteinstance/login',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php'
];

$request = new Request($queryParams, [], [], [], [], $serverParams);

$valid = $this->handler->isMatch($request);

static::assertFalse($valid);
}

/**
* Test request match with legacy view request
*/
public function testMatchCheckWithLegacyViewRequest(): void
{
$queryParams = [
'module' => 'Contacts',
'action' => 'ListView',
];

$serverParams = [
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/',
'REDIRECT_QUERY_STRING' => '',
'REQUEST_METHOD' => 'GET',
'QUERY_STRING' => 'module=Accounts&action=index',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'REQUEST_URI' => '/suiteinstance/index.php?module=Contacts&action=ListView',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php'
];

$request = new Request($queryParams, [], [], [], [], $serverParams);

$valid = $this->handler->isMatch($request);

static::assertFalse($valid);
}

/**
* Test request match with legacy entry point request
*/
public function testMatchCheckWithLegacyEntryPointRequest(): void
{
$queryParams = [
'entryPoint' => 'generatePdf'
];

$serverParams = [
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/',
'REDIRECT_QUERY_STRING' => '',
'REQUEST_METHOD' => 'GET',
'QUERY_STRING' => 'entryPoint=generatePdf',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'REQUEST_URI' => '/suiteinstance/index.php?entryPoint=generatePdf',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php'
];

$request = new Request($queryParams, [], [], [], [], $serverParams);

$valid = $this->handler->isMatch($request);

static::assertTrue($valid);
}

/**
* Test request match with legacy subpath request
*/
public function testMatchCheckWithSubPathRequest(): void
{
$queryParams = [
];

$serverParams = [
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/',
'REDIRECT_QUERY_STRING' => '',
'REQUEST_METHOD' => 'GET',
'QUERY_STRING' => '',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'REQUEST_URI' => '/suiteinstance/something',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php'
];

$request = new Request($queryParams, [], [], [], [], $serverParams);

$valid = $this->handler->isMatch($request);

static::assertTrue($valid);
}

/**
* Test request match with legacy save request
*/
public function testMatchCheckWithLegacySaveRequest(): void
{
$requestParameters = [
'module' => 'Accounts',
'record' => '134f0d4a-3cb8-bf3b-e228-5eb42212b284',
'isDuplicate' => 'false',
'action' => 'Save',
'return_module' => 'Accounts',
'return_action' => 'DetailView',
'return_id' => '134f0d4a-3cb8-bf3b-e228-5eb42212b284',
'module_tab' => '',
'contact_role' => '',
'relate_to' => 'Accounts',
'relate_id' => '134f0d4a-3cb8-bf3b-e228-5eb42212b284',
'offset' => '1',
'name' => 'V8 Api test Account',
'phone_office' => '',
'website' => 'http://',
'phone_fax' => '',
'Accounts_email_widget_id' => '0',
'emailAddressWidget' => '1',
'Accounts0emailAddress0' => '',
'Accounts0emailAddressId0' => '',
'Accounts0emailAddressVerifiedFlag' => 'true',
'Accounts0emailAddressVerifiedEmailValue' => 'true',
'Accounts0emailAddressPrimaryFlag' => 'Accounts0emailAddress0',
'useEmailWidget' => 'true',
'billing_address_street' => '',
'billing_address_city' => '',
'billing_address_state' => '',
'billing_address_postalcode' => '',
'billing_address_country' => '',
'shipping_address_street' => '',
'shipping_address_city' => '',
'shipping_address_state' => '',
'shipping_address_postalcode' => '',
'shipping_address_country' => '',
'description' => '',
'assigned_user_name' => '',
'assigned_user_id' => '',
'account_type' => '',
'industry' => '',
'annual_revenue' => '',
'employees' => '',
'parent_name' => '',
'parent_id' => '',
'campaign_name' => ''
];

$serverParams = [
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/',
'REDIRECT_QUERY_STRING' => '',
'REQUEST_METHOD' => 'POST',
'QUERY_STRING' => '',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'REQUEST_URI' => '/suiteinstance/index.php',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php'
];

$request = new Request([], $requestParameters, [], [], [], $serverParams);

$valid = $this->handler->isMatch($request);

static::assertTrue($valid);
}

/**
* Test path conversion with legacy entry point request
*/
public function testPathConversionWithLegacyEntryPointRequest(): void
{
$resultingRoute = '/suiteinstance/legacy/index.php?entryPoint=generatePdf';

$queryParams = [
'entryPoint' => 'generatePdf'
];

$serverParams = [
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/',
'REDIRECT_QUERY_STRING' => '',
'REQUEST_METHOD' => 'GET',
'QUERY_STRING' => 'entryPoint=generatePdf',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'REQUEST_URI' => '/suiteinstance/index.php?entryPoint=generatePdf',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php'
];

$request = new Request($queryParams, [], [], [], [], $serverParams);

$route = $this->handler->convert($request);

static::assertEquals($resultingRoute, $route);
}

/**
* Test path conversion with legacy save request
*/
public function testPathConversionWithLegacySaveRequest(): void
{
$resultingRoute = '/suiteinstance/legacy/index.php';

$requestParameters = [
'module' => 'Accounts',
'record' => '134f0d4a-3cb8-bf3b-e228-5eb42212b284',
'isDuplicate' => 'false',
'action' => 'Save',
'return_module' => 'Accounts',
'return_action' => 'DetailView',
'return_id' => '134f0d4a-3cb8-bf3b-e228-5eb42212b284',
'module_tab' => '',
'contact_role' => '',
'relate_to' => 'Accounts',
'relate_id' => '134f0d4a-3cb8-bf3b-e228-5eb42212b284',
'offset' => '1',
'name' => 'V8 Api test Account',
'phone_office' => '',
'website' => 'http://',
'phone_fax' => '',
'Accounts_email_widget_id' => '0',
'emailAddressWidget' => '1',
'Accounts0emailAddress0' => '',
'Accounts0emailAddressId0' => '',
'Accounts0emailAddressVerifiedFlag' => 'true',
'Accounts0emailAddressVerifiedEmailValue' => 'true',
'Accounts0emailAddressPrimaryFlag' => 'Accounts0emailAddress0',
'useEmailWidget' => 'true',
'billing_address_street' => '',
'billing_address_city' => '',
'billing_address_state' => '',
'billing_address_postalcode' => '',
'billing_address_country' => '',
'shipping_address_street' => '',
'shipping_address_city' => '',
'shipping_address_state' => '',
'shipping_address_postalcode' => '',
'shipping_address_country' => '',
'description' => '',
'assigned_user_name' => '',
'assigned_user_id' => '',
'account_type' => '',
'industry' => '',
'annual_revenue' => '',
'employees' => '',
'parent_name' => '',
'parent_id' => '',
'campaign_name' => ''
];

$serverParams = [
'BASE' => '/suiteinstance',
'HTTP_HOST' => 'localhost',
'SERVER_NAME' => 'localhost',
'REDIRECT_URL' => '/suiteinstance/',
'REDIRECT_QUERY_STRING' => '',
'REQUEST_METHOD' => 'POST',
'QUERY_STRING' => '',
'SCRIPT_FILENAME' => '/var/www/html/suiteinstance/index.php',
'REQUEST_URI' => '/suiteinstance/index.php',
'SCRIPT_NAME' => '/suiteinstance/index.php',
'PHP_SELF' => '/suiteinstance/index.php'
];

$request = new Request([], $requestParameters, [], [], [], $serverParams);

$route = $this->handler->convert($request);

static::assertEquals($resultingRoute, $route);
}
}

View file

@ -63,7 +63,7 @@ class RouteConverterTest extends Unit

$request = new Request($queryParams,[],[],[],[], $serverParams);

$valid = $this->routeConverter->isLegacyRoute($request);
$valid = $this->routeConverter->isLegacyViewRoute($request);

static::assertFalse($valid);
}
@ -91,7 +91,7 @@ class RouteConverterTest extends Unit

$request = new Request($queryParams,[],[],[],[], $serverParams);

$valid = $this->routeConverter->isLegacyRoute($request);
$valid = $this->routeConverter->isLegacyViewRoute($request);

static::assertTrue($valid);
}
@ -106,7 +106,7 @@ class RouteConverterTest extends Unit

$request = new Request($queryParams);

$valid = $this->routeConverter->isLegacyRoute($request);
$valid = $this->routeConverter->isLegacyViewRoute($request);

static::assertTrue($valid);
}
@ -117,7 +117,7 @@ class RouteConverterTest extends Unit

$request = new Request($queryParams);

$valid = $this->routeConverter->isLegacyRoute($request);
$valid = $this->routeConverter->isLegacyViewRoute($request);

static::assertFalse($valid);
}
@ -130,7 +130,7 @@ class RouteConverterTest extends Unit

$request = new Request($queryParams);

$valid = $this->routeConverter->isLegacyRoute($request);
$valid = $this->routeConverter->isLegacyViewRoute($request);

static::assertFalse($valid);
}
@ -145,7 +145,7 @@ class RouteConverterTest extends Unit

$request = new Request($queryParams);

$valid = $this->routeConverter->isLegacyRoute($request);
$valid = $this->routeConverter->isLegacyViewRoute($request);

static::assertFalse($valid);
}