>, * files?: string, * config?: array, * preferences?: array, * } */ protected $initData = null; protected function createApplication(bool $clearCache = true, ?string $portalId = null): Application { return $this->espoTester->getApplication(true, $clearCache, $portalId); } protected function setApplication(Application $application): void { $this->espoApplication = $application; } protected function auth( ?string $userName = null, ?string $password = null, ?string $portalId = null, ?string $authenticationMethod = null, ?RequestWrapper $request = null ): void { $this->userName = $userName; $this->password = $password; $this->authenticationMethod = $authenticationMethod; if (isset($this->espoTester)) { $this->espoTester->auth($userName, $password, $portalId, $authenticationMethod, $request); } } /** * Get the application. */ protected function getApplication(): Application { return $this->espoApplication; } /** * Get container. */ protected function getContainer(): Container { return $this->getApplication()->getContainer(); } protected function getFileManager(): FileManager { return $this->getApplication()->getContainer()->get('fileManager'); } protected function getDataManager(): DataManager { return $this->getApplication()->getContainer()->get('dataManager'); } protected function getInjectableFactory(): InjectableFactory { return $this->getApplication()->getContainer()->get('injectableFactory'); } protected function getMetadata(): Metadata { return $this->getApplication()->getContainer()->get('metadata'); } protected function getEntityManager(): EntityManager { return $this->getApplication()->getContainer()->get('entityManager'); } protected function getConfig(): Config { return $this->getApplication()->getContainer()->get('config'); } protected function normalizePath(string $path): string { return $this->espoTester->normalizePath($path); } /*protected function sendRequest($method, $action, $data = null) { return $this->espoTester->sendRequest($method, $action, $data); }*/ protected function setUp(): void { $params = [ 'className' => get_class($this), 'dataFile' => $this->dataFile, 'pathToFiles' => $this->pathToFiles, 'initData' => $this->initData, ]; $this->espoTester = new Tester($params); $this->beforeSetUp(); $this->espoTester->initialize(); $this->auth($this->userName, $this->password, null, $this->authenticationMethod); $this->beforeStartApplication(); $this->espoApplication = $this->createApplication(); $this->afterStartApplication(); } /** * Re-create an application. */ protected function reCreateApplication(): void { $this->espoApplication = $this->createApplication(); } protected function tearDown(): void { $this->espoTester->terminate(); $this->espoTester = null; $this->espoApplication = null; } /** * @param array|string $userData Data or a user name. * @param ?array $role */ protected function createUser($userData, ?array $role = null, bool $isPortal = false): User { return $this->espoTester->createUser($userData, $role, $isPortal); } protected function beforeSetUp(): void {} protected function beforeStartApplication(): void {} protected function afterStartApplication(): void {} protected function createRequest( string $method, array $queryParams = [], array $headers = [], ?string $body = null, array $routeParams = [] ): RequestWrapper { $request = (new RequestFactory()) ->createRequest($method, 'http://localhost/?' . http_build_query($queryParams)); foreach ($headers as $name => $value) { $request = $request->withHeader($name, $value); } if ($body) { $request = $request->withBody( (new StreamFactory)->createStream($body) ); } return new RequestWrapper($request, '', $routeParams); } protected function createResponse(): ResponseWrapper { return new ResponseWrapper( (new ResponseFactory())->createResponse() ); } protected function setData(array $data): void { $this->espoTester->setData($data); } /** * @todo Revise whether needed. */ protected function fullReset(): void { $this->espoTester->setParam('fullReset', true); } }