mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-09-12 23:23:49 +08:00
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:
parent
6c3e266b5d
commit
c1ef13322a
7 changed files with 545 additions and 18 deletions
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue