snapshot of https://github.com/espocrm/espocrm.git (master, 2026-09-18; blobs > 131072B omitted)
Some checks failed
Test / Test on PHP 8.3 (push) Failing after 5s
Test / Test on PHP 8.4 (push) Failing after 4s
Test / Test on PHP 8.5 (push) Failing after 3s
TypeScript static analysis / TypeScript check (push) Failing after 14s
Test Integration on MySQL / Test on PHP 8.3 (push) Failing after 2s
Test Integration on MySQL / Test on PHP 8.5 (push) Failing after 0s
Test Integration on PostgreSQL / Test on PHP 8.4 fix (push) Failing after 1s
Test Integration on PostgreSQL / Test on PHP 8.4 master (push) Failing after 1s

This commit is contained in:
upstream-mirror
2026-09-18 04:19:15 +05:00
commit 7cc7e6b4f3
10077 changed files with 900756 additions and 0 deletions

View File

@@ -0,0 +1,133 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM – Open Source CRM application.
* Copyright (C) 2014-2026 EspoCRM, Inc.
* Website: https://www.espocrm.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace tests\integration\Espo\Core\Utils\FieldManager;
use Espo\ORM\EntityManager;
use tests\integration\Core\BaseTestCase;
class ArrayTypeTest extends BaseTestCase
{
private $jsonFieldDefs = '{
"name":"testArray",
"label":"TestArray",
"type":"array",
"required":false,
"noEmptyString":false,
"dynamicLogicVisible":null,
"dynamicLogicRequired":null,
"dynamicLogicReadOnly":null,
"dynamicLogicOptions":null,
"options":["option1","option2","option3"],
"translatedOptions":{"option1":"option1","option2":"option2","option3":"option3"},
"tooltipText":null,
"isPersonalData":false,
"inlineEditDisabled":false,
"audited":false,
"readOnly":false,
"tooltip":false
}';
protected function createFieldManager($app = null)
{
if (!$app) {
$app = $this;
}
return $app->getContainer()->get('injectableFactory')->create(
'Espo\\Tools\\FieldManager\\FieldManager'
);
}
public function testCreate()
{
$fieldManager = $this->createFieldManager();
$fieldDefs = get_object_vars(json_decode($this->jsonFieldDefs));
$fieldManager->create('Account', 'testArray', $fieldDefs);
$this->getContainer()->get('dataManager')->rebuild(['Account']);
$app = $this->createApplication();
$metadata = $app->getContainer()->get('metadata');
$savedFieldDefs = $metadata->get('entityDefs.Account.fields.cTestArray');
$this->assertArrayHasKey('type', $savedFieldDefs);
$this->assertArrayHasKey('isCustom', $savedFieldDefs);
$this->assertArrayHasKey('options', $savedFieldDefs);
$this->assertEquals('array', $savedFieldDefs['type']);
$this->assertTrue($savedFieldDefs['isCustom']);
$entityManager = $app->getContainer()->getByClass(EntityManager::class);
$account = $entityManager->getNewEntity('Account');
$account->set([
'name' => 'Test',
'cTestArray' => ['option1', 'option3']
]);
$entityManager->saveEntity($account);
$account = $entityManager->getEntityById('Account', $account->getId());
$this->assertEquals(['option1', 'option3'], $account->get('cTestArray'));
}
public function testUpdate()
{
$this->testCreate();
$app = $this->createApplication();
$fieldManager = $this->createFieldManager($app);
$fieldDefs = get_object_vars(json_decode($this->jsonFieldDefs));
$fieldDefs['required'] = true;
$fieldManager->update('Account', 'cTestArray', $fieldDefs);
$this->getContainer()->get('dataManager')->rebuild(['Account']);
$app = $this->createApplication();
$metadata = $app->getContainer()->get('metadata');
$savedFieldDefs = $metadata->get('entityDefs.Account.fields.cTestArray');
$this->assertTrue($savedFieldDefs['required']);
$entityManager = $app->getContainer()->getByClass(EntityManager::class);
$account = $entityManager->getNewEntity('Account');
$account->set([
'name' => 'Test',
]);
$entityManager->saveEntity($account);
}
}

View File

@@ -0,0 +1,141 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM – Open Source CRM application.
* Copyright (C) 2014-2026 EspoCRM, Inc.
* Website: https://www.espocrm.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace tests\integration\Espo\Core\Utils\FieldManager;
use Espo\Core\Utils\Metadata;
use Espo\ORM\EntityManager;
use tests\integration\Core\BaseTestCase;
class EnumTypeTest extends BaseTestCase
{
private $jsonFieldDefs = '{
"type":"enum",
"required":true,
"dynamicLogicVisible":null,
"dynamicLogicRequired":null,
"dynamicLogicReadOnly":null,
"dynamicLogicOptions":null,
"name":"testEnum",
"label":"TestEnum",
"audited":true,
"options":["option1","option2","option3"],
"translatedOptions":{"option1":"option1","option2":"option2","option3":"option3"},
"default":"option2",
"tooltipText":"",
"isPersonalData":false,
"isSorted":false,
"readOnly":false,
"tooltip":false
}';
protected function createFieldManager($app = null)
{
if (!$app) {
$app = $this;
}
return $app->getContainer()->get('injectableFactory')->create(
'Espo\\Tools\\FieldManager\\FieldManager'
);
}
public function testCreate()
{
$fieldManager = $this->createFieldManager();
$fieldDefs = get_object_vars(json_decode($this->jsonFieldDefs));
$fieldManager->create('Account', 'testEnum', $fieldDefs);
$this->getDataManager()->rebuild(['Account']);
$app = $this->createApplication();
$metadata = $app->getContainer()->getByClass(Metadata::class);
$savedFieldDefs = $metadata->get('entityDefs.Account.fields.cTestEnum');
$this->assertEquals('enum', $savedFieldDefs['type']);
$this->assertEquals('option2', $savedFieldDefs['default']);
$this->assertTrue($savedFieldDefs['required']);
$this->assertTrue($savedFieldDefs['isCustom']);
$this->assertTrue($savedFieldDefs['audited']);
$entityManager = $app->getContainer()->getByClass(EntityManager::class);
$account = $entityManager->getNewEntity('Account');
$account->set([
'name' => 'Test',
'cTestEnum' => 'option1',
]);
$entityManager->saveEntity($account);
$account = $entityManager->getEntityById('Account', $account->getId());
$this->assertEquals('option1', $account->get('cTestEnum'));
}
public function testUpdate()
{
$this->testCreate();
$app = $this->createApplication();
$fieldManager = $this->createFieldManager($app);
$fieldDefs = get_object_vars(json_decode($this->jsonFieldDefs));
$fieldDefs['required'] = false;
$fieldDefs['default'] = 'option3';
$fieldDefs['readOnly'] = true;
$fieldManager->update('Account', 'cTestEnum', $fieldDefs);
$this->getDataManager()->rebuild(['Account']);
$app = $this->createApplication();
$metadata = $app->getContainer()->get('metadata');
$savedFieldDefs = $metadata->get('entityDefs.Account.fields.cTestEnum');
$this->assertFalse($savedFieldDefs['required']);
$this->assertEquals('option3', $savedFieldDefs['default']);
$this->assertTrue($savedFieldDefs['audited']);
$this->assertTrue($savedFieldDefs['readOnly']);
$entityManager = $app->getContainer()->getByClass(EntityManager::class);
$account = $entityManager->getNewEntity('Account');
$account->set([
'name' => 'New Test',
]);
$entityManager->saveEntity($account);
$account = $entityManager->getEntityById('Account', $account->getId());
$this->assertEquals('option3', $account->get('cTestEnum'));
}
}

View File

@@ -0,0 +1,133 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM – Open Source CRM application.
* Copyright (C) 2014-2026 EspoCRM, Inc.
* Website: https://www.espocrm.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "EspoCRM" word.
************************************************************************/
namespace tests\integration\Espo\Core\Utils\FieldManager;
use tests\integration\Core\BaseTestCase;
class VarcharTypeTest extends BaseTestCase
{
private $jsonFieldDefs = '{
"type":"varchar",
"required":true,
"trim":true,
"dynamicLogicVisible":null,
"dynamicLogicRequired":null,
"dynamicLogicReadOnly":null,
"name":"testVarchar",
"label":"TestVarchar",
"tooltipText":"",
"isPersonalData":false,
"default":"",
"maxLength":null,
"audited":false,
"readOnly":false,
"tooltip":false
}';
protected function createFieldManager($app = null)
{
if (!$app) {
$app = $this;
}
return $app->getContainer()->get('injectableFactory')->create(
'Espo\\Tools\\FieldManager\\FieldManager'
);
}
public function testCreate()
{
$fieldManager = $this->createFieldManager();
$fieldDefs = get_object_vars(json_decode($this->jsonFieldDefs));
$fieldManager->create('Account', 'testVarchar', $fieldDefs);
$this->getContainer()->get('dataManager')->rebuild(['Account']);
$app = $this->createApplication();
$metadata = $app->getContainer()->get('metadata');
$savedFieldDefs = $metadata->get('entityDefs.Account.fields.cTestVarchar');
$this->assertArrayHasKey('type', $savedFieldDefs);
$this->assertArrayHasKey('isCustom', $savedFieldDefs);
$this->assertEquals('varchar', $savedFieldDefs['type']);
$this->assertTrue($savedFieldDefs['required']);
$this->assertTrue($savedFieldDefs['isCustom']);
$entityManager = $app->getContainer()->get('entityManager');
$account = $entityManager->getEntity('Account');
$account->set([
'name' => 'Test',
'cTestVarchar' => 'test-value'
]);
$entityManager->saveEntity($account);
$account = $entityManager->getEntity('Account', $account->getId());
$this->assertEquals('test-value', $account->get('cTestVarchar'));
}
public function testUpdate()
{
$this->testCreate();
$app = $this->createApplication();
$fieldManager = $this->createFieldManager($app);
$fieldDefs = get_object_vars(json_decode($this->jsonFieldDefs));
$fieldDefs['required'] = false;
$fieldDefs['default'] = 'default-value';
$fieldManager->update('Account', 'cTestVarchar', $fieldDefs);
$this->getContainer()->get('dataManager')->rebuild(['Account']);
$app = $this->createApplication();
$metadata = $app->getContainer()->get('metadata');
$savedFieldDefs = $metadata->get('entityDefs.Account.fields.cTestVarchar');
$this->assertFalse($savedFieldDefs['required']);
$this->assertEquals('default-value', $savedFieldDefs['default']);
$entityManager = $app->getContainer()->get('entityManager');
$account = $entityManager->getEntity('Account');
$account->set([
'name' => 'New Test',
]);
$entityManager->saveEntity($account);
$account = $entityManager->getEntity('Account', $account->getId());
$this->assertEquals('default-value', $account->get('cTestVarchar'));
}
}