params = $this->normalizeParams($params); } protected function normalizeParams(array $params) { $namespaceToRemove = 'tests\\integration\\Espo'; $classPath = preg_replace('/^'.preg_quote($namespaceToRemove).'\\\\(.+)Test$/', '${1}', $params['className']); if (!isset($params['dataFile'])) { $params['dataFile'] = realpath($this->testDataPath) . '/' . str_replace('\\', '/', $classPath) . '.php'; } if (!isset($params['pathToFiles'])) { $params['pathToFiles'] = realpath($this->testDataPath) . '/' . str_replace('\\', '/', $classPath); } return $params; } protected function getParam($name, $returns = null) { if (isset($this->params[$name])) { return $this->params[$name]; } return $returns; } public function getApplication($reload = false, $userName = null, $password = null) { if (!isset($this->application) || $reload) { $this->application = new \Espo\Core\Application(); $auth = new \Espo\Core\Utils\Auth($this->application->getContainer()); if (isset($userName) && isset($password)) { $auth->login($userName, $password); } else { $auth->useNoAuth(); } } return $this->application; } protected function getDataLoader() { if (!isset($this->dataLoader)) { $this->dataLoader = new DataLoader($this->getApplication()); } return $this->dataLoader; } public function initialize() { $this->install(); $this->loadData(); } public function terminate() { $baseDir = str_replace('/' . $this->installPath, '', getcwd()); chdir($baseDir); set_include_path($baseDir); } protected function install() { $mainApplication = new \Espo\Core\Application(); $fileManager = $mainApplication->getContainer()->get('fileManager'); $latestEspo = Utils::getLatestBuildedPath($this->buildedPath); $configData = include($this->configPath); $configData['siteUrl'] = $mainApplication->getContainer()->get('config')->get('siteUrl') . '/' . $this->installPath; //remove and copy Espo files Utils::dropTables($configData['database']); $fileManager->removeInDir($this->installPath); $fileManager->copy($latestEspo, $this->installPath, true); Utils::fixUndefinedVariables(); chdir($this->installPath); set_include_path($this->installPath); require_once('install/core/Installer.php'); $installer = new \Installer(); $installer->saveData(array(), 'en_US'); $installer->saveConfig($configData); $installer = new \Installer(); //reload installer to get all config data $installer->buildDatabase(); $installer->setSuccess(); } protected function loadData() { if (!empty($this->params['dataFile'])) { $this->getDataLoader()->loadData($this->params['dataFile']); } if (!empty($this->params['pathToFiles'])) { $this->getDataLoader()->loadFiles($this->params['pathToFiles']); } } }