SuiteCRM-Core/tests/unit/core/legacy/SystemConfigHandlerTest.php
Clemente Raposo ac0b0eb1b4 Add Cache Reset Actions
- Add configuration file for module actions that should reset cache
- Expose cache reset actions in the system config api
- Add route event listener to reset cache when navigating a way from defined cache reset actions
- Update unit tests
2021-03-30 19:21:36 +01:00

325 lines
11 KiB
PHP

<?php
namespace App\Tests;
use ApiPlatform\Core\Exception\ItemNotFoundException;
use Codeception\Test\Unit;
use Exception;
use SuiteCRM\Core\Legacy\ActionNameMapperHandler;
use SuiteCRM\Core\Legacy\ClassicViewRoutingExclusionsHandler;
use SuiteCRM\Core\Legacy\CurrencyHandler;
use SuiteCRM\Core\Legacy\DateTimeHandler;
use SuiteCRM\Core\Legacy\ModuleNameMapperHandler;
use SuiteCRM\Core\Legacy\SystemConfig\DateFormatConfigMapper;
use SuiteCRM\Core\Legacy\SystemConfig\DefaultCurrencyConfigMapper;
use SuiteCRM\Core\Legacy\SystemConfig\SystemConfigMappers;
use SuiteCRM\Core\Legacy\SystemConfig\TimeFormatConfigMapper;
use SuiteCRM\Core\Legacy\SystemConfigHandler;
class SystemConfigHandlerTest extends Unit
{
/**
* @var UnitTester
*/
protected $tester;
/**
* @var SystemConfigHandler
*/
protected $handler;
/**
* @throws Exception
*/
protected function _before(): void
{
$projectDir = $this->tester->getProjectDir();
$legacyDir = $this->tester->getLegacyDir();
$legacySessionName = $this->tester->getLegacySessionName();
$defaultSessionName = $this->tester->getDefaultSessionName();
$legacyScope = $this->tester->getLegacyScope();
$exposedSystemConfigs = [
'default_language' => true,
'passwordsetting' => [
'forgotpasswordON' => true
],
'search' => [
'controller' => true,
'pagination' => [
'min' => true,
]
],
'languages' => true,
'module_name_map' => true,
'action_name_map' => true,
'datef' => true,
'timef' => true,
'currency' => true,
'cache_reset_actions' => true
];
$moduleMapper = new ModuleNameMapperHandler(
$projectDir,
$legacyDir,
$legacySessionName,
$defaultSessionName,
$legacyScope
);
$actionMapper = new ActionNameMapperHandler(
$projectDir,
$legacyDir,
$legacySessionName,
$defaultSessionName,
$legacyScope
);
$classicViewExclusionHandler = new ClassicViewRoutingExclusionsHandler(
$projectDir,
$legacyDir,
$legacySessionName,
$defaultSessionName,
$legacyScope
);
$dateTimeHandler = new DateTimeHandler(
$projectDir,
$legacyDir,
$legacySessionName,
$defaultSessionName,
$legacyScope,
$this->tester->getDatetimeFormatMap()
);
$currencyHandler = new CurrencyHandler(
$projectDir,
$legacyDir,
$legacySessionName,
$defaultSessionName,
$legacyScope
);
$mappersArray = [
'datef' => new DateFormatConfigMapper($dateTimeHandler),
'timef' => new TimeFormatConfigMapper($dateTimeHandler),
'currency' => new DefaultCurrencyConfigMapper($currencyHandler)
];
/** @var SystemConfigMappers $mappers */
$mappers = $this->make(
SystemConfigMappers::class,
[
'get' => static function (string $key) use ($mappersArray) {
return $mappersArray[$key] ?? null;
},
'hasMapper' => static function (string $key) use ($mappersArray) {
if (isset($mappersArray[$key])) {
return true;
}
return false;
},
]
);
$systemConfigKeyMap = [
'datef' => 'date_format',
'timef' => 'time_format'
];
global $sugar_config;
$sugar_config['datef'] = 'm/d/Y';
$sugar_config['timef'] = 'H:i';
$cacheResetActions = [
'users' => [
'edit'
]
];
$this->handler = new SystemConfigHandler(
$projectDir,
$legacyDir,
$legacySessionName,
$defaultSessionName,
$legacyScope,
$exposedSystemConfigs,
$actionMapper,
$moduleMapper,
$classicViewExclusionHandler,
$mappers,
$systemConfigKeyMap,
$cacheResetActions
);
}
// tests
/**
* Test empty config key handling in SystemConfigHandler
*/
public function testEmptySystemConfigKeyCheck(): void
{
$emptyConfig = $this->handler->getSystemConfig('');
static::assertNull($emptyConfig);
}
/**
* Test invalid config key handling in SystemConfigHandler
*/
public function testInvalidExposedSystemConfigCheck(): void
{
$this->expectException(ItemNotFoundException::class);
$this->handler->getSystemConfig('dbconfig');
}
/**
* Test retrieval of first level system config in SystemConfigHandler
*/
public function testGetValidOneLevelSystemConfig(): void
{
$defaultLanguage = $this->handler->getSystemConfig('default_language');
static::assertNotNull($defaultLanguage);
static::assertEquals('default_language', $defaultLanguage->getId());
static::assertEquals('en_us', $defaultLanguage->getValue());
static::assertEmpty($defaultLanguage->getItems());
}
/**
* Test retrieval of second level deep system config in SystemConfigHandler
*/
public function testGetValidTwoLevelSystemConfig(): void
{
$passwordSetting = $this->handler->getSystemConfig('passwordsetting');
static::assertNotNull($passwordSetting);
static::assertEquals('passwordsetting', $passwordSetting->getId());
static::assertNull($passwordSetting->getValue());
static::assertIsArray($passwordSetting->getItems());
static::assertArrayHasKey('forgotpasswordON', $passwordSetting->getItems());
static::assertIsNotArray($passwordSetting->getItems()['forgotpasswordON']);
}
/**
* Test retrieval of third level deep system config in SystemConfigHandler
*/
public function testGetValidThreeLevelSystemConfig(): void
{
$searchConfig = $this->handler->getSystemConfig('search');
static::assertNotNull($searchConfig);
static::assertEquals('search', $searchConfig->getId());
static::assertNull($searchConfig->getValue());
static::assertIsArray($searchConfig->getItems());
static::assertArrayHasKey('controller', $searchConfig->getItems());
static::assertArrayHasKey('pagination', $searchConfig->getItems());
static::assertIsArray($searchConfig->getItems()['pagination']);
static::assertArrayHasKey('min', $searchConfig->getItems()['pagination']);
}
/**
* Test injected module name map config
*/
public function testInjectedModuleNameMapConfig(): void
{
$moduleNameMap = $this->handler->getSystemConfig('module_name_map');
static::assertNotNull($moduleNameMap);
static::assertEquals('module_name_map', $moduleNameMap->getId());
static::assertNull($moduleNameMap->getValue());
static::assertIsArray($moduleNameMap->getItems());
static::assertArrayHasKey('Contacts', $moduleNameMap->getItems());
}
/**
* Test injected action name map config
*/
public function testInjectedActionNameMapConfig(): void
{
$actionNameMap = $this->handler->getSystemConfig('action_name_map');
static::assertNotNull($actionNameMap);
static::assertEquals('action_name_map', $actionNameMap->getId());
static::assertNull($actionNameMap->getValue());
static::assertIsArray($actionNameMap->getItems());
static::assertArrayHasKey('DetailView', $actionNameMap->getItems());
}
/**
* Test date format config transformation
*/
public function testDateFormatMapping(): void
{
$format = $this->handler->getSystemConfig('datef');
static::assertNotNull($format);
static::assertEquals('date_format', $format->getId());
static::assertNotNull($format->getValue());
static::assertIsArray($format->getItems());
static::assertEmpty($format->getItems());
static::assertEquals('MM/dd/yyyy', $format->getValue());
}
/**
* Test time format config transformation
*/
public function testTimeFormatMapping(): void
{
$format = $this->handler->getSystemConfig('timef');
static::assertNotNull($format);
static::assertEquals('time_format', $format->getId());
static::assertNotNull($format->getValue());
static::assertIsArray($format->getItems());
static::assertEmpty($format->getItems());
static::assertEquals('HH:mm', $format->getValue());
}
/**
* Test default currency mapping
*/
public function testDefaultCurrencyMapping(): void
{
$currencyConfig = $this->handler->getSystemConfig('currency');
static::assertNotNull($currencyConfig);
static::assertEquals('currency', $currencyConfig->getId());
static::assertNull($currencyConfig->getValue());
static::assertIsArray($currencyConfig->getItems());
static::assertNotEmpty($currencyConfig->getItems());
$currency = $currencyConfig->getItems();
static::assertNotNull($currency);
static::assertNotEmpty($currency);
static::assertArrayHasKey('id', $currency);
static::assertNotEmpty($currency['id']);
static::assertEquals($currency['id'], -99);
static::assertArrayHasKey('name', $currency);
static::assertNotEmpty($currency['name']);
static::assertArrayHasKey('symbol', $currency);
static::assertNotEmpty($currency['symbol']);
static::assertArrayHasKey('iso4217', $currency);
static::assertNotEmpty($currency['iso4217']);
}
/**
* Test cache reset actions
*/
public function testCacheResetActionsConfig(): void
{
$cacheClearActionsConfig = $this->handler->getSystemConfig('cache_reset_actions');
static::assertNotNull($cacheClearActionsConfig);
static::assertEquals('cache_reset_actions', $cacheClearActionsConfig->getId());
static::assertNull($cacheClearActionsConfig->getValue());
static::assertIsArray($cacheClearActionsConfig->getItems());
static::assertNotEmpty($cacheClearActionsConfig->getItems());
$cacheClearActions = $cacheClearActionsConfig->getItems();
static::assertNotNull($cacheClearActions);
static::assertNotEmpty($cacheClearActions);
static::assertArrayHasKey('users', $cacheClearActions);
static::assertNotEmpty($cacheClearActions['users']);
static::assertContains('edit', $cacheClearActions['users']);
}
}