mirror of
https://github.com/SuiteCRM/SuiteCRM-Core.git
synced 2025-09-13 00:42:08 +08:00
Add Route conversion on legacy
- Add legacy handler to access RouteConverter - Add legacy handler to access ModuleNameMapper - Add legacy handler to access ActionNameMapper - Remove action and module name maps from Suite8 side - Update frontend route converter to check for suite 8 routes -- When link is a suite 8 route does not convert - Add LegacyScopeState to allow for nested legacy handler calls -- Add abstract getHandlerKey to base LegacyHandler -- Implement getHandlerKey on all legacy handlers - Update legacy handler init and close methods to use scope state -- Check if withing an already open legacy handler scope
This commit is contained in:
parent
3931ce40fa
commit
5d6aa45391
42 changed files with 1319 additions and 1133 deletions
|
@ -4,6 +4,7 @@ use ApiPlatform\Core\Exception\ItemNotFoundException;
|
|||
use App\Entity\AppListStrings;
|
||||
use Codeception\Test\Unit;
|
||||
use SuiteCRM\Core\Legacy\AppListStringsHandler;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
|
||||
class AppListStringsHandlerTest extends Unit
|
||||
{
|
||||
|
@ -23,7 +24,15 @@ class AppListStringsHandlerTest extends Unit
|
|||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
$this->handler = new AppListStringsHandler($projectDir, $legacyDir, $legacySessionName, $defaultSessionName);
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$this->handler = new AppListStringsHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
}
|
||||
|
||||
// tests
|
||||
|
|
|
@ -4,6 +4,7 @@ use ApiPlatform\Core\Exception\ItemNotFoundException;
|
|||
use App\Entity\AppStrings;
|
||||
use Codeception\Test\Unit;
|
||||
use SuiteCRM\Core\Legacy\AppStringsHandler;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
|
||||
class AppStringsHandlerTest extends Unit
|
||||
{
|
||||
|
@ -23,7 +24,15 @@ class AppStringsHandlerTest extends Unit
|
|||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
$this->handler = new AppStringsHandler($projectDir, $legacyDir, $legacySessionName, $defaultSessionName);
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$this->handler = new AppStringsHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
}
|
||||
|
||||
// tests
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
|
||||
use ApiPlatform\Core\Exception\ItemNotFoundException;
|
||||
use App\Entity\ModStrings;
|
||||
use App\Service\ModuleNameMapper;
|
||||
use Codeception\Test\Unit;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use SuiteCRM\Core\Legacy\ModStringsHandler;
|
||||
use SuiteCRM\Core\Legacy\ModuleNameMapperHandler;
|
||||
|
||||
class ModStringsHandlerTest extends Unit
|
||||
{
|
||||
|
@ -20,343 +21,27 @@ class ModStringsHandlerTest extends Unit
|
|||
|
||||
protected function _before(): void
|
||||
{
|
||||
$legacyModuleNameMap = [
|
||||
'Home' => [
|
||||
'frontend' => 'home',
|
||||
'core' => 'Home',
|
||||
],
|
||||
'Calendar' => [
|
||||
'frontend' => 'calendar',
|
||||
'core' => 'Calendar',
|
||||
],
|
||||
'Calls' => [
|
||||
'frontend' => 'calls',
|
||||
'core' => 'Calls',
|
||||
],
|
||||
'Calls_Reschedule' => [
|
||||
'frontend' => 'calls-reschedule',
|
||||
'core' => 'CallsReschedule',
|
||||
],
|
||||
'Meetings' => [
|
||||
'frontend' => 'meetings',
|
||||
'core' => 'Meetings',
|
||||
],
|
||||
'Tasks' => [
|
||||
'frontend' => 'tasks',
|
||||
'core' => 'Tasks',
|
||||
],
|
||||
'Notes' => [
|
||||
'frontend' => 'notes',
|
||||
'core' => 'Notes',
|
||||
],
|
||||
'Leads' => [
|
||||
'frontend' => 'leads',
|
||||
'core' => 'Leads',
|
||||
],
|
||||
'Contacts' => [
|
||||
'frontend' => 'contacts',
|
||||
'core' => 'Contacts',
|
||||
],
|
||||
'Accounts' => [
|
||||
'frontend' => 'accounts',
|
||||
'core' => 'Accounts',
|
||||
],
|
||||
'Opportunities' => [
|
||||
'frontend' => 'opportunities',
|
||||
'core' => 'Opportunities',
|
||||
],
|
||||
'Import' => [
|
||||
'frontend' => 'import',
|
||||
'core' => 'Import',
|
||||
],
|
||||
'Emails' => [
|
||||
'frontend' => 'emails',
|
||||
'core' => 'Emails',
|
||||
],
|
||||
'EmailTemplates' => [
|
||||
'frontend' => 'email-templates',
|
||||
'core' => 'EmailTemplates',
|
||||
],
|
||||
'Campaigns' => [
|
||||
'frontend' => 'campaigns',
|
||||
'core' => 'Campaigns',
|
||||
],
|
||||
'Targets' => [
|
||||
'frontend' => 'targets',
|
||||
'core' => 'Targets',
|
||||
],
|
||||
'Targets - Lists' => [
|
||||
'frontend' => 'prospect-lists',
|
||||
'core' => 'ProspectLists',
|
||||
],
|
||||
'Prospects' => [
|
||||
'frontend' => 'prospects',
|
||||
'core' => 'Prospects',
|
||||
],
|
||||
'ProspectLists' => [
|
||||
'frontend' => 'prospect-lists',
|
||||
'core' => 'ProspectLists',
|
||||
],
|
||||
'Documents' => [
|
||||
'frontend' => 'documents',
|
||||
'core' => 'Documents',
|
||||
],
|
||||
'Cases' => [
|
||||
'frontend' => 'cases',
|
||||
'core' => 'Cases',
|
||||
],
|
||||
'Project' => [
|
||||
'frontend' => 'project',
|
||||
'core' => 'Project',
|
||||
],
|
||||
'ProjectTask' => [
|
||||
'frontend' => 'project-task',
|
||||
'core' => 'ProjectTask',
|
||||
],
|
||||
'Bugs' => [
|
||||
'frontend' => 'bugs',
|
||||
'core' => 'Bugs',
|
||||
],
|
||||
'ResourceCalendar' => [
|
||||
'frontend' => 'resource-calendar',
|
||||
'core' => 'ResourceCalendar',
|
||||
],
|
||||
'AOBH_BusinessHours' => [
|
||||
'frontend' => 'business-hours',
|
||||
'core' => 'BusinessHours',
|
||||
],
|
||||
'Spots' => [
|
||||
'frontend' => 'spots',
|
||||
'core' => 'Spots',
|
||||
],
|
||||
'SecurityGroups' => [
|
||||
'frontend' => 'security-groups',
|
||||
'core' => 'SecurityGroups',
|
||||
],
|
||||
'ACL' => [
|
||||
'frontend' => 'acl',
|
||||
'core' => 'ACL',
|
||||
],
|
||||
'ACLRoles' => [
|
||||
'frontend' => 'acl-roles',
|
||||
'core' => 'ACLRoles',
|
||||
],
|
||||
'Configurator' => [
|
||||
'frontend' => 'configurator',
|
||||
'core' => 'Configurator',
|
||||
],
|
||||
'UserPreferences' => [
|
||||
'frontend' => 'user-preferences',
|
||||
'core' => 'UserPreferences',
|
||||
],
|
||||
'SavedSearch' => [
|
||||
'frontend' => 'saved-search',
|
||||
'core' => 'SavedSearch',
|
||||
],
|
||||
'Studio' => [
|
||||
'frontend' => 'studio',
|
||||
'core' => 'Studio',
|
||||
],
|
||||
'Connectors' => [
|
||||
'frontend' => 'connectors',
|
||||
'core' => 'Connectors',
|
||||
],
|
||||
'SugarFeed' => [
|
||||
'frontend' => 'sugar-feed',
|
||||
'core' => 'SugarFeed',
|
||||
],
|
||||
'EAPM' => [
|
||||
'frontend' => 'eapm',
|
||||
'core' => 'EAPM',
|
||||
],
|
||||
'OutboundEmailAccounts' => [
|
||||
'frontend' => 'outbound-email-accounts',
|
||||
'core' => 'OutboundEmailAccounts',
|
||||
],
|
||||
'TemplateSectionLine' => [
|
||||
'frontend' => 'template-section-line',
|
||||
'core' => 'TemplateSectionLine',
|
||||
],
|
||||
'OAuthKeys' => [
|
||||
'frontend' => 'oauth-keys',
|
||||
'core' => 'OAuthKeys',
|
||||
],
|
||||
'OAuthTokens' => [
|
||||
'frontend' => 'oauth-tokens',
|
||||
'core' => 'OAuthTokens',
|
||||
],
|
||||
'OAuth2Tokens' => [
|
||||
'frontend' => 'oauth2-tokens',
|
||||
'core' => 'OAuth2Tokens',
|
||||
],
|
||||
'OAuth2Clients' => [
|
||||
'frontend' => 'oauth2-clients',
|
||||
'core' => 'OAuth2Clients',
|
||||
],
|
||||
'Surveys' => [
|
||||
'frontend' => 'surveys',
|
||||
'core' => 'Surveys',
|
||||
],
|
||||
'SurveyResponses' => [
|
||||
'frontend' => 'survey-responses',
|
||||
'core' => 'SurveyResponses',
|
||||
],
|
||||
'SurveyQuestionResponses' => [
|
||||
'frontend' => 'survey-question-responses',
|
||||
'core' => 'SurveyQuestionResponses',
|
||||
],
|
||||
'SurveyQuestions' => [
|
||||
'frontend' => 'survey-questions',
|
||||
'core' => 'SurveyQuestions',
|
||||
],
|
||||
'SurveyQuestionOptions' => [
|
||||
'frontend' => 'survey-question-options',
|
||||
'core' => 'SurveyQuestionOptions',
|
||||
],
|
||||
'Reminders' => [
|
||||
'frontend' => 'reminders',
|
||||
'core' => 'Reminders',
|
||||
],
|
||||
'Reminders_Invitees' => [
|
||||
'frontend' => 'reminders-invitees',
|
||||
'core' => 'RemindersInvitees',
|
||||
],
|
||||
'AM_ProjectTemplates' => [
|
||||
'frontend' => 'project-templates',
|
||||
'core' => 'ProjectTemplates',
|
||||
],
|
||||
'AM_TaskTemplates' => [
|
||||
'frontend' => 'task-templates',
|
||||
'core' => 'TaskTemplates',
|
||||
],
|
||||
'AOK_Knowledge_Base_Categories' => [
|
||||
'frontend' => 'knowledge-base-categories',
|
||||
'core' => 'KnowledgeBaseCategories',
|
||||
],
|
||||
'AOK_KnowledgeBase' => [
|
||||
'frontend' => 'knowledge-base',
|
||||
'core' => 'KnowledgeBase',
|
||||
],
|
||||
'FP_events' => [
|
||||
'frontend' => 'events',
|
||||
'core' => 'Events',
|
||||
],
|
||||
'FP_Event_Locations' => [
|
||||
'frontend' => 'event-locations',
|
||||
'core' => 'EventLocations',
|
||||
],
|
||||
'AOS_Contracts' => [
|
||||
'frontend' => 'contracts',
|
||||
'core' => 'Contracts',
|
||||
],
|
||||
'AOS_Invoices' => [
|
||||
'frontend' => 'invoices',
|
||||
'core' => 'Invoices',
|
||||
],
|
||||
'AOS_PDF_Templates' => [
|
||||
'frontend' => 'pdf-templates',
|
||||
'core' => 'PDFTemplates',
|
||||
],
|
||||
'AOS_Product_Categories' => [
|
||||
'frontend' => 'product-categories',
|
||||
'core' => 'ProductCategories',
|
||||
],
|
||||
'AOS_Products' => [
|
||||
'frontend' => 'products',
|
||||
'core' => 'Products',
|
||||
],
|
||||
'AOS_Quotes' => [
|
||||
'frontend' => 'quotes',
|
||||
'core' => 'Quotes',
|
||||
],
|
||||
'AOS_Products_Quotes' => [
|
||||
'frontend' => 'products-quotes',
|
||||
'core' => 'ProductsQuotes',
|
||||
],
|
||||
'AOS_Line_Item_Groups' => [
|
||||
'frontend' => 'line-item-groups',
|
||||
'core' => 'LineItemGroups',
|
||||
],
|
||||
'jjwg_Maps' => [
|
||||
'frontend' => 'maps',
|
||||
'core' => 'Maps',
|
||||
],
|
||||
'jjwg_Markers' => [
|
||||
'frontend' => 'markers',
|
||||
'core' => 'Markers',
|
||||
],
|
||||
'jjwg_Areas' => [
|
||||
'frontend' => 'areas',
|
||||
'core' => 'Areas',
|
||||
],
|
||||
'jjwg_Address_Cache' => [
|
||||
'frontend' => 'address-cache',
|
||||
'core' => 'AddressCache',
|
||||
],
|
||||
'AOD_IndexEvent' => [
|
||||
'frontend' => 'index-event',
|
||||
'core' => 'IndexEvent',
|
||||
],
|
||||
'AOD_Index' => [
|
||||
'frontend' => 'index',
|
||||
'core' => 'index',
|
||||
],
|
||||
'AOP_Case_Events' => [
|
||||
'frontend' => 'case-events',
|
||||
'core' => 'CaseEvents',
|
||||
],
|
||||
'AOP_Case_Updates' => [
|
||||
'frontend' => 'case-updates',
|
||||
'core' => 'CaseUpdates',
|
||||
],
|
||||
'AOR_Reports' => [
|
||||
'frontend' => 'reports',
|
||||
'core' => 'Reports',
|
||||
],
|
||||
'AOR_Scheduled_Reports' => [
|
||||
'frontend' => 'scheduled-reports',
|
||||
'core' => 'ScheduledReports',
|
||||
],
|
||||
'AOR_Fields' => [
|
||||
'frontend' => 'report-fields',
|
||||
'core' => 'ReportFields',
|
||||
],
|
||||
'AOR_Charts' => [
|
||||
'frontend' => 'report-charts',
|
||||
'core' => 'ReportCharts',
|
||||
],
|
||||
'AOR_Conditions' => [
|
||||
'frontend' => 'report-conditions',
|
||||
'core' => 'ReportConditions',
|
||||
],
|
||||
'AOW_WorkFlow' => [
|
||||
'frontend' => 'workFlow',
|
||||
'core' => 'WorkFlow',
|
||||
],
|
||||
'AOW_Actions' => [
|
||||
'frontend' => 'workflow-actions',
|
||||
'core' => 'WorkflowActions',
|
||||
],
|
||||
'AOW_Processed' => [
|
||||
'frontend' => 'workflow-processed',
|
||||
'core' => 'WorflowProcessed',
|
||||
],
|
||||
'AOW_Conditions' => [
|
||||
'frontend' => 'workflow-conditions',
|
||||
'core' => 'WorkflowConditions',
|
||||
],
|
||||
];
|
||||
$moduleNameMapper = new ModuleNameMapper($legacyModuleNameMap);
|
||||
|
||||
$projectDir = codecept_root_dir();
|
||||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$moduleNameMapper = new ModuleNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$this->handler = new ModStringsHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope,
|
||||
$moduleNameMapper
|
||||
);
|
||||
}
|
||||
|
|
|
@ -3,12 +3,13 @@
|
|||
declare(strict_types=1);
|
||||
|
||||
use App\Entity\Navbar;
|
||||
use App\Service\ActionNameMapper;
|
||||
use App\Service\ModuleNameMapper;
|
||||
use App\Service\RouteConverter;
|
||||
use AspectMock\Test;
|
||||
use Codeception\Test\Unit;
|
||||
use SuiteCRM\Core\Legacy\ActionNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use SuiteCRM\Core\Legacy\ModuleNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\NavbarHandler;
|
||||
use SuiteCRM\Core\Legacy\RouteConverterHandler;
|
||||
|
||||
final class NavbarTest extends Unit
|
||||
{
|
||||
|
@ -27,58 +28,10 @@ final class NavbarTest extends Unit
|
|||
*/
|
||||
protected function _before()
|
||||
{
|
||||
|
||||
$legacyModuleNameMap = [
|
||||
'Home' => [
|
||||
'frontend' => 'home',
|
||||
'core' => 'Home',
|
||||
],
|
||||
'Leads' => [
|
||||
'frontend' => 'leads',
|
||||
'core' => 'Leads',
|
||||
],
|
||||
'Contacts' => [
|
||||
'frontend' => 'contacts',
|
||||
'core' => 'Contacts',
|
||||
],
|
||||
'Accounts' => [
|
||||
'frontend' => 'accounts',
|
||||
'core' => 'Accounts',
|
||||
],
|
||||
'Opportunities' => [
|
||||
'frontend' => 'opportunities',
|
||||
'core' => 'Opportunities',
|
||||
],
|
||||
'Import' => [
|
||||
'frontend' => 'import',
|
||||
'core' => 'Import',
|
||||
],
|
||||
'Documents' => [
|
||||
'frontend' => 'documents',
|
||||
'core' => 'Documents',
|
||||
]
|
||||
];
|
||||
|
||||
$legacyActionNameMap = [
|
||||
'index' => 'index',
|
||||
'multieditview' => 'multieditview',
|
||||
'DetailView' => 'record',
|
||||
'EditView' => 'edit',
|
||||
'ListView' => 'list',
|
||||
'Popup' => 'popup',
|
||||
'vcard' => 'vcard',
|
||||
'ImportVCard' => 'importvcard',
|
||||
'modulelistmenu' => 'modulelistmenu',
|
||||
'favorites' => 'favorites',
|
||||
'noaccess' => 'noaccess',
|
||||
'Step1' => 'step1',
|
||||
'ComposeView' => 'compose',
|
||||
'WizardHome' => 'wizard-home',
|
||||
'CampaignDiagnostic' => 'diagnostic',
|
||||
'WebToLeadCreation' => 'web-to-lead',
|
||||
'ResourceList' => 'resource-list',
|
||||
'quick_radius' => 'quick-radius',
|
||||
];
|
||||
$projectDir = codecept_root_dir();
|
||||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$menuItemMap = [
|
||||
'default' => [
|
||||
|
@ -122,9 +75,33 @@ final class NavbarTest extends Unit
|
|||
],
|
||||
];
|
||||
|
||||
$moduleNameMapper = new ModuleNameMapper($legacyModuleNameMap);
|
||||
$actionMapper = new ActionNameMapper($legacyActionNameMap);
|
||||
$routeConverter = new RouteConverter($moduleNameMapper, $actionMapper);
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$moduleNameMapper = new ModuleNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$actionMapper = new ActionNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$routeConverter = new RouteConverterHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope,
|
||||
$moduleNameMapper,
|
||||
$actionMapper
|
||||
);
|
||||
|
||||
$mockAccessibleModulesList = [
|
||||
'Home' => 'Home',
|
||||
|
@ -192,15 +169,11 @@ final class NavbarTest extends Unit
|
|||
},
|
||||
]);
|
||||
|
||||
$projectDir = codecept_root_dir();
|
||||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$this->navbarHandler = new NavbarHandler($projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope,
|
||||
$menuItemMap,
|
||||
$moduleNameMapper,
|
||||
$routeConverter
|
||||
|
@ -333,205 +306,205 @@ final class NavbarTest extends Unit
|
|||
public function testGetModule(): void
|
||||
{
|
||||
$expected = [
|
||||
"home" => [
|
||||
"path" => "home",
|
||||
"defaultRoute" => "./#/home",
|
||||
"name" => "home",
|
||||
"labelKey" => "Home",
|
||||
"menu" => []
|
||||
'home' => [
|
||||
'path' => 'home',
|
||||
'defaultRoute' => './#/home',
|
||||
'name' => 'home',
|
||||
'labelKey' => 'Home',
|
||||
'menu' => []
|
||||
],
|
||||
"accounts" => [
|
||||
"path" => "accounts",
|
||||
"defaultRoute" => "./#/accounts",
|
||||
"name" => "accounts",
|
||||
"labelKey" => "Accounts",
|
||||
"menu" => [
|
||||
'accounts' => [
|
||||
'path' => 'accounts',
|
||||
'defaultRoute' => './#/accounts',
|
||||
'name' => 'accounts',
|
||||
'labelKey' => 'Accounts',
|
||||
'menu' => [
|
||||
[
|
||||
"name" => "Create",
|
||||
"labelKey" => "LNK_NEW_ACCOUNT",
|
||||
"url" => "./#/accounts/edit",
|
||||
"params" => [
|
||||
"return_module" => "Accounts",
|
||||
"return_action" => "index"
|
||||
'name' => 'Create',
|
||||
'labelKey' => 'LNK_NEW_ACCOUNT',
|
||||
'url' => './#/accounts/edit',
|
||||
'params' => [
|
||||
'return_module' => 'Accounts',
|
||||
'return_action' => 'index'
|
||||
],
|
||||
"icon" => "plus"
|
||||
'icon' => 'plus'
|
||||
],
|
||||
[
|
||||
"name" => "List",
|
||||
"labelKey" => "LNK_ACCOUNT_LIST",
|
||||
"url" => "./#/accounts/index",
|
||||
"params" => [
|
||||
"return_module" => "Accounts",
|
||||
"return_action" => "DetailView"
|
||||
'name' => 'List',
|
||||
'labelKey' => 'LNK_ACCOUNT_LIST',
|
||||
'url' => './#/accounts/index',
|
||||
'params' => [
|
||||
'return_module' => 'Accounts',
|
||||
'return_action' => 'DetailView'
|
||||
],
|
||||
"icon" => "view"
|
||||
'icon' => 'view'
|
||||
],
|
||||
[
|
||||
"name" => "Import",
|
||||
"labelKey" => "LNK_IMPORT_ACCOUNTS",
|
||||
"url" => "./#/import/step1",
|
||||
"params" => [
|
||||
"import_module" => "Accounts",
|
||||
"return_module" => "Accounts",
|
||||
"return_action" => "index"
|
||||
'name' => 'Import',
|
||||
'labelKey' => 'LNK_IMPORT_ACCOUNTS',
|
||||
'url' => './#/import/step1',
|
||||
'params' => [
|
||||
'import_module' => 'Accounts',
|
||||
'return_module' => 'Accounts',
|
||||
'return_action' => 'index'
|
||||
],
|
||||
"icon" => "download"
|
||||
'icon' => 'download'
|
||||
]
|
||||
]
|
||||
],
|
||||
"contacts" => [
|
||||
"path" => "contacts",
|
||||
"defaultRoute" => "./#/contacts",
|
||||
"name" => "contacts",
|
||||
"labelKey" => "Contacts",
|
||||
"menu" => [
|
||||
'contacts' => [
|
||||
'path' => 'contacts',
|
||||
'defaultRoute' => './#/contacts',
|
||||
'name' => 'contacts',
|
||||
'labelKey' => 'Contacts',
|
||||
'menu' => [
|
||||
[
|
||||
"name" => "Create",
|
||||
"labelKey" => "LNK_NEW_CONTACT",
|
||||
"url" => "./#/contacts/edit",
|
||||
"params" => [
|
||||
"return_module" => "Contacts",
|
||||
"return_action" => "index"
|
||||
'name' => 'Create',
|
||||
'labelKey' => 'LNK_NEW_CONTACT',
|
||||
'url' => './#/contacts/edit',
|
||||
'params' => [
|
||||
'return_module' => 'Contacts',
|
||||
'return_action' => 'index'
|
||||
],
|
||||
"icon" => "plus"
|
||||
'icon' => 'plus'
|
||||
],
|
||||
[
|
||||
"name" => "Create_Contact_Vcard",
|
||||
"labelKey" => "LNK_IMPORT_VCARD",
|
||||
"url" => "./#/contacts/importvcard",
|
||||
"params" => [],
|
||||
"icon" => "plus"
|
||||
'name' => 'Create_Contact_Vcard',
|
||||
'labelKey' => 'LNK_IMPORT_VCARD',
|
||||
'url' => './#/contacts/importvcard',
|
||||
'params' => [],
|
||||
'icon' => 'plus'
|
||||
],
|
||||
[
|
||||
"name" => "List",
|
||||
"labelKey" => "LNK_CONTACT_LIST",
|
||||
"url" => "./#/contacts/index",
|
||||
"params" => [
|
||||
"return_module" => "Contacts",
|
||||
"return_action" => "DetailView"
|
||||
'name' => 'List',
|
||||
'labelKey' => 'LNK_CONTACT_LIST',
|
||||
'url' => './#/contacts/index',
|
||||
'params' => [
|
||||
'return_module' => 'Contacts',
|
||||
'return_action' => 'DetailView'
|
||||
],
|
||||
"icon" => "view"
|
||||
'icon' => 'view'
|
||||
],
|
||||
[
|
||||
"name" => "Import",
|
||||
"labelKey" => "LNK_IMPORT_CONTACTS",
|
||||
"url" => "./#/import/step1",
|
||||
"params" => [
|
||||
"import_module" => "Contacts",
|
||||
"return_module" => "Contacts",
|
||||
"return_action" => "index"
|
||||
'name' => 'Import',
|
||||
'labelKey' => 'LNK_IMPORT_CONTACTS',
|
||||
'url' => './#/import/step1',
|
||||
'params' => [
|
||||
'import_module' => 'Contacts',
|
||||
'return_module' => 'Contacts',
|
||||
'return_action' => 'index'
|
||||
],
|
||||
"icon" => "download"
|
||||
'icon' => 'download'
|
||||
]
|
||||
]
|
||||
],
|
||||
"opportunities" => [
|
||||
"path" => "opportunities",
|
||||
"defaultRoute" => "./#/opportunities",
|
||||
"name" => "opportunities",
|
||||
"labelKey" => "Opportunities",
|
||||
"menu" => [
|
||||
'opportunities' => [
|
||||
'path' => 'opportunities',
|
||||
'defaultRoute' => './#/opportunities',
|
||||
'name' => 'opportunities',
|
||||
'labelKey' => 'Opportunities',
|
||||
'menu' => [
|
||||
[
|
||||
"name" => "Create",
|
||||
"labelKey" => "LNK_NEW_OPPORTUNITY",
|
||||
"url" => "./#/opportunities/edit",
|
||||
"params" => [
|
||||
"return_module" => "Opportunities",
|
||||
"return_action" => "DetailView"
|
||||
'name' => 'Create',
|
||||
'labelKey' => 'LNK_NEW_OPPORTUNITY',
|
||||
'url' => './#/opportunities/edit',
|
||||
'params' => [
|
||||
'return_module' => 'Opportunities',
|
||||
'return_action' => 'DetailView'
|
||||
],
|
||||
"icon" => "plus"
|
||||
'icon' => 'plus'
|
||||
],
|
||||
[
|
||||
"name" => "List",
|
||||
"labelKey" => "LNK_OPPORTUNITY_LIST",
|
||||
"url" => "./#/opportunities/index",
|
||||
"params" => [
|
||||
"return_module" => "Opportunities",
|
||||
"return_action" => "DetailView"
|
||||
'name' => 'List',
|
||||
'labelKey' => 'LNK_OPPORTUNITY_LIST',
|
||||
'url' => './#/opportunities/index',
|
||||
'params' => [
|
||||
'return_module' => 'Opportunities',
|
||||
'return_action' => 'DetailView'
|
||||
],
|
||||
"icon" => "view"
|
||||
'icon' => 'view'
|
||||
],
|
||||
[
|
||||
"name" => "Import",
|
||||
"labelKey" => "LNK_IMPORT_OPPORTUNITIES",
|
||||
"url" => "./#/import/step1",
|
||||
"params" => [
|
||||
"import_module" => "Opportunities",
|
||||
"return_module" => "Opportunities",
|
||||
"return_action" => "index"
|
||||
'name' => 'Import',
|
||||
'labelKey' => 'LNK_IMPORT_OPPORTUNITIES',
|
||||
'url' => './#/import/step1',
|
||||
'params' => [
|
||||
'import_module' => 'Opportunities',
|
||||
'return_module' => 'Opportunities',
|
||||
'return_action' => 'index'
|
||||
],
|
||||
"icon" => "download"
|
||||
'icon' => 'download'
|
||||
]
|
||||
]
|
||||
],
|
||||
"leads" => [
|
||||
"path" => "leads",
|
||||
"defaultRoute" => "./#/leads",
|
||||
"name" => "leads",
|
||||
"labelKey" => "Leads",
|
||||
"menu" => [
|
||||
'leads' => [
|
||||
'path' => 'leads',
|
||||
'defaultRoute' => './#/leads',
|
||||
'name' => 'leads',
|
||||
'labelKey' => 'Leads',
|
||||
'menu' => [
|
||||
[
|
||||
"name" => "Create",
|
||||
"labelKey" => "LNK_NEW_LEAD",
|
||||
"url" => "./#/leads/edit",
|
||||
"params" => [
|
||||
"return_module" => "Leads",
|
||||
"return_action" => "DetailView"
|
||||
'name' => 'Create',
|
||||
'labelKey' => 'LNK_NEW_LEAD',
|
||||
'url' => './#/leads/edit',
|
||||
'params' => [
|
||||
'return_module' => 'Leads',
|
||||
'return_action' => 'DetailView'
|
||||
],
|
||||
"icon" => "plus"
|
||||
'icon' => 'plus'
|
||||
],
|
||||
[
|
||||
"name" => "Create_Lead_Vcard",
|
||||
"labelKey" => "LNK_IMPORT_VCARD",
|
||||
"url" => "./#/leads/importvcard",
|
||||
"params" => [],
|
||||
"icon" => "plus"
|
||||
'name' => 'Create_Lead_Vcard',
|
||||
'labelKey' => 'LNK_IMPORT_VCARD',
|
||||
'url' => './#/leads/importvcard',
|
||||
'params' => [],
|
||||
'icon' => 'plus'
|
||||
],
|
||||
[
|
||||
"name" => "List",
|
||||
"labelKey" => "LNK_LEAD_LIST",
|
||||
"url" => "./#/leads/index",
|
||||
"params" => [
|
||||
"return_module" => "Leads",
|
||||
"return_action" => "DetailView"
|
||||
'name' => 'List',
|
||||
'labelKey' => 'LNK_LEAD_LIST',
|
||||
'url' => './#/leads/index',
|
||||
'params' => [
|
||||
'return_module' => 'Leads',
|
||||
'return_action' => 'DetailView'
|
||||
],
|
||||
"icon" => "view"
|
||||
'icon' => 'view'
|
||||
],
|
||||
[
|
||||
"name" => "Import",
|
||||
"labelKey" => "LNK_IMPORT_LEADS",
|
||||
"url" => "./#/import/step1",
|
||||
"params" => [
|
||||
"import_module" => "Leads",
|
||||
"return_module" => "Leads",
|
||||
"return_action" => "index"
|
||||
'name' => 'Import',
|
||||
'labelKey' => 'LNK_IMPORT_LEADS',
|
||||
'url' => './#/import/step1',
|
||||
'params' => [
|
||||
'import_module' => 'Leads',
|
||||
'return_module' => 'Leads',
|
||||
'return_action' => 'index'
|
||||
],
|
||||
"icon" => "download"
|
||||
'icon' => 'download'
|
||||
]
|
||||
]
|
||||
],
|
||||
"documents" => [
|
||||
"path" => "documents",
|
||||
"defaultRoute" => "./#/documents",
|
||||
"name" => "documents",
|
||||
"labelKey" => "Documents",
|
||||
"menu" => [
|
||||
'documents' => [
|
||||
'path' => 'documents',
|
||||
'defaultRoute' => './#/documents',
|
||||
'name' => 'documents',
|
||||
'labelKey' => 'Documents',
|
||||
'menu' => [
|
||||
[
|
||||
"name" => "Create",
|
||||
"labelKey" => "LNK_NEW_DOCUMENT",
|
||||
"url" => "./#/documents/edit",
|
||||
"params" => [
|
||||
"return_module" => "Documents",
|
||||
"return_action" => "DetailView"
|
||||
'name' => 'Create',
|
||||
'labelKey' => 'LNK_NEW_DOCUMENT',
|
||||
'url' => './#/documents/edit',
|
||||
'params' => [
|
||||
'return_module' => 'Documents',
|
||||
'return_action' => 'DetailView'
|
||||
],
|
||||
"icon" => "plus"
|
||||
'icon' => 'plus'
|
||||
],
|
||||
[
|
||||
"name" => "List",
|
||||
"labelKey" => "LNK_DOCUMENT_LIST",
|
||||
"url" => "./#/documents/index",
|
||||
"params" => [],
|
||||
"icon" => "view"
|
||||
'name' => 'List',
|
||||
'labelKey' => 'LNK_DOCUMENT_LIST',
|
||||
'url' => './#/documents/index',
|
||||
'params' => [],
|
||||
'icon' => 'view'
|
||||
]
|
||||
]
|
||||
],
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
<?php namespace App\Tests;
|
||||
|
||||
use ApiPlatform\Core\Exception\ItemNotFoundException;
|
||||
use App\Service\ActionNameMapper;
|
||||
use App\Service\ModuleNameMapper;
|
||||
use Codeception\Test\Unit;
|
||||
use SuiteCRM\Core\Legacy\ActionNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use SuiteCRM\Core\Legacy\ModuleNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\SystemConfigHandler;
|
||||
|
||||
class SystemConfigHandlerTest extends Unit
|
||||
|
@ -41,25 +42,34 @@ class SystemConfigHandlerTest extends Unit
|
|||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$legacyModuleNameMap = [
|
||||
'Contacts' => [
|
||||
'frontend' => 'contacts',
|
||||
'core' => 'Contacts'
|
||||
],
|
||||
];
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$legacyActionNameMap = [
|
||||
'index ' => 'index',
|
||||
'DetailView' => 'record',
|
||||
'EditView' => 'edit',
|
||||
'ListView' => 'list',
|
||||
];
|
||||
$moduleMapper = new ModuleNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$moduleMapper = new ModuleNameMapper($legacyModuleNameMap);
|
||||
$actionMapper = new ActionNameMapper($legacyActionNameMap);
|
||||
$actionMapper = new ActionNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$this->handler = new SystemConfigHandler($projectDir, $legacyDir, $legacySessionName, $defaultSessionName,
|
||||
$exposedSystemConfigs, $actionMapper, $moduleMapper);
|
||||
$this->handler = new SystemConfigHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope,
|
||||
$exposedSystemConfigs,
|
||||
$actionMapper,
|
||||
$moduleMapper
|
||||
);
|
||||
}
|
||||
|
||||
// tests
|
||||
|
|
|
@ -4,6 +4,7 @@ use ApiPlatform\Core\Exception\ItemNotFoundException;
|
|||
use AspectMock\Test;
|
||||
use Codeception\Test\Unit;
|
||||
use Exception;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use SuiteCRM\Core\Legacy\UserPreferenceHandler;
|
||||
use User;
|
||||
|
||||
|
@ -45,7 +46,7 @@ class UserPreferencesHandlerTest extends Unit
|
|||
User::class,
|
||||
[
|
||||
'id' => '123',
|
||||
'getPreference' => function ($name, $category = 'global') use ($self, $mockPreferences) {
|
||||
'getPreference' => static function ($name, $category = 'global') use ($self, $mockPreferences) {
|
||||
return $mockPreferences[$category][$name];
|
||||
},
|
||||
]
|
||||
|
@ -64,8 +65,16 @@ class UserPreferencesHandlerTest extends Unit
|
|||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$this->handler = new UserPreferenceHandler($projectDir, $legacyDir, $legacySessionName, $defaultSessionName,
|
||||
$exposedUserPreferences);
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$this->handler = new UserPreferenceHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope,
|
||||
$exposedUserPreferences
|
||||
);
|
||||
}
|
||||
|
||||
// tests
|
||||
|
|
|
@ -6,6 +6,7 @@ use AuthenticationController;
|
|||
use Codeception\Test\Unit;
|
||||
use Exception;
|
||||
use SuiteCRM\Core\Legacy\Authentication;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
|
@ -89,7 +90,15 @@ class LegacySessionLogoutHandlerTest extends Unit
|
|||
]
|
||||
);
|
||||
|
||||
$originalHandler = new Authentication($projectDir, $legacyDir, $legacySessionName, $defaultSessionName);
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$originalHandler = new Authentication(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$this->handler = new LegacySessionLogoutHandler($sessionLogoutHandler, $originalHandler);
|
||||
}
|
||||
|
|
|
@ -141,7 +141,7 @@ class LegacySessionSecurityStageTest extends Unit
|
|||
$this->resourceAccessChecker = $this->makeEmpty(
|
||||
ResourceAccessCheckerInterface::class,
|
||||
[
|
||||
'isGranted' => function (
|
||||
'isGranted' => static function (
|
||||
string $resourceClass,
|
||||
string $expression,
|
||||
array $extraVariables = []
|
||||
|
@ -166,7 +166,7 @@ class LegacySessionSecurityStageTest extends Unit
|
|||
$this->activeSessionAuthentication = $this->make(
|
||||
Authentication::class,
|
||||
[
|
||||
'checkSession' => function () use ($self) {
|
||||
'checkSession' => static function () use ($self) {
|
||||
$self->checkSessionCalled = true;
|
||||
|
||||
return true;
|
||||
|
@ -177,7 +177,7 @@ class LegacySessionSecurityStageTest extends Unit
|
|||
$this->expiredSessionAuthentication = $this->make(
|
||||
Authentication::class,
|
||||
[
|
||||
'checkSession' => function () use ($self) {
|
||||
'checkSession' => static function () use ($self) {
|
||||
$self->checkSessionCalled = true;
|
||||
|
||||
return false;
|
||||
|
@ -191,8 +191,6 @@ class LegacySessionSecurityStageTest extends Unit
|
|||
[
|
||||
'invalidate' => function () use ($self) {
|
||||
$self->invalidateCalled = true;
|
||||
|
||||
return;
|
||||
},
|
||||
]
|
||||
);
|
||||
|
|
94
tests/unit/core/src/Service/ActionNameMapperTest.php
Normal file
94
tests/unit/core/src/Service/ActionNameMapperTest.php
Normal file
|
@ -0,0 +1,94 @@
|
|||
<?php namespace App\Tests;
|
||||
|
||||
use App\Service\ActionNameMapperInterface;
|
||||
use \Codeception\Test\Unit;
|
||||
use SuiteCRM\Core\Legacy\ActionNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
|
||||
class ActionNameMapperTest extends Unit
|
||||
{
|
||||
/**
|
||||
* @var UnitTester
|
||||
*/
|
||||
protected $tester;
|
||||
|
||||
|
||||
/**
|
||||
* @var ActionNameMapperInterface
|
||||
*/
|
||||
private $actionMapper;
|
||||
|
||||
protected function _before()
|
||||
{
|
||||
$projectDir = codecept_root_dir();
|
||||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$this->actionMapper = new ActionNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test action name check with the valid name
|
||||
*/
|
||||
public function testValidLegacyActionNameCheck(): void
|
||||
{
|
||||
$valid = $this->actionMapper->isValidAction('DetailView');
|
||||
|
||||
static::assertTrue($valid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test action name check with the invalid name
|
||||
*/
|
||||
public function testInvalidLegacyActionNameCheck(): void
|
||||
{
|
||||
$valid = $this->actionMapper->isValidAction('FakeAction');
|
||||
static::assertFalse($valid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test action name to frontend mapping with the valid name
|
||||
*/
|
||||
public function testLegacyActionNameToFrontEndConversion(): void
|
||||
{
|
||||
$frontendName = $this->actionMapper->toFrontEnd('DetailView');
|
||||
static::assertEquals('record', $frontendName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test action name to frontend mapping with the invalid name
|
||||
*/
|
||||
public function testInvalidLegacyActionNameToFrontEndConversion(): void
|
||||
{
|
||||
$action = $this->actionMapper->toFrontEnd('FakeAction');
|
||||
static::assertEquals('FakeAction', $action);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test action name to legacy mapping with the valid name
|
||||
*/
|
||||
public function testLegacyActionNameToLegacyConversion(): void
|
||||
{
|
||||
$legacyName = $this->actionMapper->toLegacy('record');
|
||||
static::assertEquals('DetailView', $legacyName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test action name to legacy mapping with the invalid name
|
||||
*/
|
||||
public function testInvalidLegacyActionNameToLegacyConversion(): void
|
||||
{
|
||||
$action = $this->actionMapper->toLegacy('fake-action');
|
||||
static::assertEquals('fake-action', $action);
|
||||
}
|
||||
|
||||
}
|
|
@ -28,6 +28,9 @@ class LegacyAssetRedirectHandlerTest extends Unit
|
|||
$this->legacyAssetHandler = new LegacyAssetRedirectHandler($legacyAssetPaths, '/legacy');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test asset path check with an api path
|
||||
*/
|
||||
public function testAPIRequestCheck(): void
|
||||
{
|
||||
$queryParams = [
|
||||
|
@ -55,6 +58,9 @@ class LegacyAssetRedirectHandlerTest extends Unit
|
|||
static::assertFalse($valid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test asset path check for valid path
|
||||
*/
|
||||
public function testLegacyValidAssetPathRequestCheck(): void
|
||||
{
|
||||
$queryParams = [
|
||||
|
@ -82,6 +88,9 @@ class LegacyAssetRedirectHandlerTest extends Unit
|
|||
static::assertTrue($valid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test asset path conversion for valid path
|
||||
*/
|
||||
public function testValidLegacyAssetPathConversion(): void
|
||||
{
|
||||
$resultingRoute = '/suiteinstance/legacy/themes/default/images/company_logo.png?v=Y0_lwfeIA-XvM4ey09-htw';
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
<?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 SuiteCRM\Core\Legacy\ActionNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use SuiteCRM\Core\Legacy\ModuleNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\RouteConverterHandler;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
|
||||
use Symfony\Component\Routing\Router;
|
||||
|
@ -27,23 +28,38 @@ class LegacyNonViewActionRedirectHandlerTest extends Unit
|
|||
*/
|
||||
protected function _before(): void
|
||||
{
|
||||
$legacyModuleNameMap = [
|
||||
'Contacts' => [
|
||||
'frontend' => 'contacts',
|
||||
'core' => 'Contacts'
|
||||
],
|
||||
];
|
||||
$projectDir = codecept_root_dir();
|
||||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$legacyActionNameMap = [
|
||||
'index ' => 'index',
|
||||
'DetailView' => 'detail',
|
||||
'EditView' => 'edit',
|
||||
'ListView' => 'list',
|
||||
];
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$moduleMapper = new ModuleNameMapper($legacyModuleNameMap);
|
||||
$actionMapper = new ActionNameMapper($legacyActionNameMap);
|
||||
$converter = new RouteConverter($moduleMapper, $actionMapper);
|
||||
$moduleMapper = new ModuleNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$actionMapper = new ActionNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$converter = new RouteConverterHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope,
|
||||
$moduleMapper,
|
||||
$actionMapper
|
||||
);
|
||||
|
||||
$routes = [
|
||||
'/login',
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<?php namespace App\Tests;
|
||||
|
||||
use App\Service\ModuleNameMapper;
|
||||
use App\Service\ModuleNameMapperInterface;
|
||||
use \Codeception\Test\Unit;
|
||||
use InvalidArgumentException;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use SuiteCRM\Core\Legacy\ModuleNameMapperHandler;
|
||||
|
||||
class ModuleNameMapperTest extends Unit
|
||||
{
|
||||
|
@ -13,56 +15,79 @@ class ModuleNameMapperTest extends Unit
|
|||
|
||||
|
||||
/**
|
||||
* @var ModuleNameMapper
|
||||
* @var ModuleNameMapperInterface
|
||||
*/
|
||||
private $moduleMapper;
|
||||
|
||||
protected function _before()
|
||||
{
|
||||
$legacyModuleNameMap = [
|
||||
'Contacts' => [
|
||||
'frontend' => 'contacts',
|
||||
'core' => 'Contacts'
|
||||
],
|
||||
];
|
||||
$projectDir = codecept_root_dir();
|
||||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$this->moduleMapper = new ModuleNameMapper($legacyModuleNameMap);
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$this->moduleMapper = new ModuleNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function testValidLegacyModuleNameCheck()
|
||||
/**
|
||||
* Test valid module name check with valid name
|
||||
*/
|
||||
public function testValidLegacyModuleNameCheck(): void
|
||||
{
|
||||
$valid = $this->moduleMapper->isValidModule('Contacts');
|
||||
|
||||
static::assertTrue($valid);
|
||||
}
|
||||
|
||||
public function testInvalidLegacyModuleNameCheck()
|
||||
/**
|
||||
* Test valid module name check with invalid name
|
||||
*/
|
||||
public function testInvalidLegacyModuleNameCheck(): void
|
||||
{
|
||||
$valid = $this->moduleMapper->isValidModule('FakeModule');
|
||||
|
||||
static::assertFalse($valid);
|
||||
}
|
||||
|
||||
public function testLegacyModuleNameToFrontEndConversion()
|
||||
/**
|
||||
* Test module name conversion to frontend with valid name
|
||||
*/
|
||||
public function testLegacyModuleNameToFrontEndConversion(): void
|
||||
{
|
||||
$frontendName = $this->moduleMapper->toFrontEnd('Contacts');
|
||||
static::assertEquals('contacts', $frontendName);
|
||||
}
|
||||
|
||||
public function testInvalidLegacyModuleNameToFrontEndConversion()
|
||||
/**
|
||||
* Test module name conversion to frontend with invalid name
|
||||
*/
|
||||
public function testInvalidLegacyModuleNameToFrontEndConversion(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->moduleMapper->toFrontEnd('FakeModule');
|
||||
}
|
||||
|
||||
public function testLegacyModuleNameToCoreConversion()
|
||||
/**
|
||||
* Test module name conversion to core with valid name
|
||||
*/
|
||||
public function testLegacyModuleNameToCoreConversion(): void
|
||||
{
|
||||
$coreName = $this->moduleMapper->toCore('Contacts');
|
||||
static::assertEquals('Contacts', $coreName);
|
||||
}
|
||||
|
||||
public function testInvalidLegacyModuleNameToCoreConversion()
|
||||
/**
|
||||
* Test module name conversion to core with invalid name
|
||||
*/
|
||||
public function testInvalidLegacyModuleNameToCoreConversion(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$this->moduleMapper->toCore('FakeModule');
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
<?php namespace App\Tests;
|
||||
|
||||
use App\Service\ActionNameMapper;
|
||||
use App\Service\ModuleNameMapper;
|
||||
use App\Service\RouteConverter;
|
||||
use App\Service\RouteConverterInterface;
|
||||
use \Codeception\Test\Unit;
|
||||
use InvalidArgumentException;
|
||||
use SuiteCRM\Core\Legacy\ActionNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\LegacyScopeState;
|
||||
use SuiteCRM\Core\Legacy\ModuleNameMapperHandler;
|
||||
use SuiteCRM\Core\Legacy\RouteConverterHandler;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
class RouteConverterTest extends Unit
|
||||
|
@ -16,32 +18,50 @@ class RouteConverterTest extends Unit
|
|||
|
||||
|
||||
/**
|
||||
* @var RouteConverter
|
||||
* @var RouteConverterInterface
|
||||
*/
|
||||
private $routeConverter;
|
||||
|
||||
protected function _before()
|
||||
{
|
||||
$legacyModuleNameMap = [
|
||||
'Contacts' => [
|
||||
'frontend' => 'contacts',
|
||||
'core' => 'Contacts'
|
||||
],
|
||||
];
|
||||
$projectDir = codecept_root_dir();
|
||||
$legacyDir = $projectDir . '/legacy';
|
||||
$legacySessionName = 'LEGACYSESSID';
|
||||
$defaultSessionName = 'PHPSESSID';
|
||||
|
||||
$legacyActionNameMap = [
|
||||
'index ' => 'index',
|
||||
'DetailView' => 'detail',
|
||||
'EditView' => 'edit',
|
||||
'ListView' => 'list',
|
||||
];
|
||||
$legacyScope = new LegacyScopeState();
|
||||
|
||||
$moduleMapper = new ModuleNameMapper($legacyModuleNameMap);
|
||||
$actionMapper = new ActionNameMapper($legacyActionNameMap);
|
||||
$this->routeConverter = new RouteConverter($moduleMapper, $actionMapper);
|
||||
$moduleMapper = new ModuleNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$actionMapper = new ActionNameMapperHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope
|
||||
);
|
||||
|
||||
$this->routeConverter = new RouteConverterHandler(
|
||||
$projectDir,
|
||||
$legacyDir,
|
||||
$legacySessionName,
|
||||
$defaultSessionName,
|
||||
$legacyScope,
|
||||
$moduleMapper,
|
||||
$actionMapper
|
||||
);
|
||||
}
|
||||
|
||||
public function testAPIRequestCheck()
|
||||
/**
|
||||
* Test check for to determine if is an API Request
|
||||
*/
|
||||
public function testAPIRequestCheck(): void
|
||||
{
|
||||
$queryParams = [
|
||||
];
|
||||
|
@ -68,7 +88,10 @@ class RouteConverterTest extends Unit
|
|||
static::assertFalse($valid);
|
||||
}
|
||||
|
||||
public function testLegacyValidSubPathRequestCheck()
|
||||
/**
|
||||
* Test legacy call request on instance installed in a subpath
|
||||
*/
|
||||
public function testLegacyValidSubPathRequestCheck(): void
|
||||
{
|
||||
$queryParams = [
|
||||
'module' => 'Contacts',
|
||||
|
@ -96,7 +119,10 @@ class RouteConverterTest extends Unit
|
|||
static::assertTrue($valid);
|
||||
}
|
||||
|
||||
public function testLegacyValidRequestCheck()
|
||||
/**
|
||||
* Test legacy call request check with valid request
|
||||
*/
|
||||
public function testLegacyValidRequestCheck(): void
|
||||
{
|
||||
$queryParams = [
|
||||
'module' => 'Contacts',
|
||||
|
@ -111,7 +137,10 @@ class RouteConverterTest extends Unit
|
|||
static::assertTrue($valid);
|
||||
}
|
||||
|
||||
public function testLegacyNoModuleRequestCheck()
|
||||
/**
|
||||
* Test legacy call request check with no module
|
||||
*/
|
||||
public function testLegacyNoModuleRequestCheck(): void
|
||||
{
|
||||
$queryParams = [];
|
||||
|
||||
|
@ -122,7 +151,10 @@ class RouteConverterTest extends Unit
|
|||
static::assertFalse($valid);
|
||||
}
|
||||
|
||||
public function testLegacyInvalidModuleRequestCheck()
|
||||
/**
|
||||
* Test legacy call request check with invalid module
|
||||
*/
|
||||
public function testLegacyInvalidModuleRequestCheck(): void
|
||||
{
|
||||
$queryParams = [
|
||||
'module' => 'FakeModule',
|
||||
|
@ -135,8 +167,10 @@ class RouteConverterTest extends Unit
|
|||
static::assertFalse($valid);
|
||||
}
|
||||
|
||||
|
||||
public function testLegacyInvalidActionRequestCheck()
|
||||
/**
|
||||
* Test legacy call request check with invalid action
|
||||
*/
|
||||
public function testLegacyInvalidActionRequestCheck(): void
|
||||
{
|
||||
$queryParams = [
|
||||
'module' => 'Contacts',
|
||||
|
@ -150,7 +184,10 @@ class RouteConverterTest extends Unit
|
|||
static::assertFalse($valid);
|
||||
}
|
||||
|
||||
public function testLegacyValidModuleIndexRRequest()
|
||||
/**
|
||||
* Test legacy call to valid module
|
||||
*/
|
||||
public function testLegacyValidModuleIndexRRequest(): void
|
||||
{
|
||||
$resultingRoute = './#/contacts';
|
||||
$queryParams = [
|
||||
|
@ -163,7 +200,10 @@ class RouteConverterTest extends Unit
|
|||
static::assertEquals($resultingRoute, $route);
|
||||
}
|
||||
|
||||
public function testLegacyValidModuleViewRequest()
|
||||
/**
|
||||
* Test legacy call to valid view
|
||||
*/
|
||||
public function testLegacyValidModuleViewRequest(): void
|
||||
{
|
||||
$resultingRoute = './#/contacts/list';
|
||||
$queryParams = [
|
||||
|
@ -178,9 +218,12 @@ class RouteConverterTest extends Unit
|
|||
static::assertEquals($resultingRoute, $route);
|
||||
}
|
||||
|
||||
public function testLegacyValidModuleRecordRequest()
|
||||
/**
|
||||
* Test legacy call to module record
|
||||
*/
|
||||
public function testLegacyValidModuleRecordRequest(): void
|
||||
{
|
||||
$resultingRoute = './#/contacts/detail/123';
|
||||
$resultingRoute = './#/contacts/record/123';
|
||||
$queryParams = [
|
||||
'module' => 'Contacts',
|
||||
'action' => 'DetailView',
|
||||
|
@ -194,11 +237,14 @@ class RouteConverterTest extends Unit
|
|||
static::assertEquals($resultingRoute, $route);
|
||||
}
|
||||
|
||||
public function testLegacyInvalidModuleIndexRequest()
|
||||
/**
|
||||
* test legacy call to invalid module
|
||||
*/
|
||||
public function testLegacyInvalidModuleIndexRequest(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$queryParams = [
|
||||
'module' => 'FakeAction',
|
||||
'module' => 'FakeModule',
|
||||
];
|
||||
|
||||
$request = new Request($queryParams);
|
||||
|
@ -207,9 +253,12 @@ class RouteConverterTest extends Unit
|
|||
|
||||
}
|
||||
|
||||
public function testLegacyModuleInvalidActionRequest()
|
||||
/**
|
||||
* Test legacy call with invalid action
|
||||
*/
|
||||
public function testLegacyModuleInvalidActionRequest(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$resultingRoute = './#/contacts/FakeAction';
|
||||
$queryParams = [
|
||||
'module' => 'Contacts',
|
||||
'action' => 'FakeAction'
|
||||
|
@ -217,10 +266,15 @@ class RouteConverterTest extends Unit
|
|||
|
||||
$request = new Request($queryParams);
|
||||
|
||||
$this->routeConverter->convert($request);
|
||||
$route = $this->routeConverter->convert($request);
|
||||
|
||||
static::assertEquals($resultingRoute, $route);
|
||||
}
|
||||
|
||||
public function testLegacyNoModuleRequest()
|
||||
/**
|
||||
* Test legacy call without module
|
||||
*/
|
||||
public function testLegacyNoModuleRequest(): void
|
||||
{
|
||||
$this->expectException(InvalidArgumentException::class);
|
||||
$queryParams = [];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue