Merge branch 'fix'

This commit is contained in:
Yuri Kuznetsov
2024-06-23 10:52:27 +03:00
2 changed files with 69 additions and 0 deletions
+8
View File
@@ -603,6 +603,14 @@ class Service implements Crud,
continue;
}
if (
// link-one
$attributeDefs->getType() === AttributeType::FOREIGN &&
$attributeDefs->getParam('attributeRole') === 'id'
) {
continue;
}
$attribute = $attributeDefs->getName();
unset($data->$attribute);
@@ -31,6 +31,7 @@ namespace tests\integration\Espo\Record;
use Espo\Core\Exceptions\Forbidden;
use Espo\Core\Field\Date;
use Espo\Core\ORM\Type\FieldType;
use Espo\Core\Record\CreateParams;
use Espo\Core\Record\ServiceContainer;
use Espo\Core\Record\UpdateParams;
@@ -43,6 +44,7 @@ use Espo\Modules\Crm\Entities\Lead;
use Espo\Modules\Crm\Entities\Opportunity;
use Espo\Modules\Crm\Entities\Task;
use Espo\ORM\EntityManager;
use Espo\ORM\Type\RelationType;
use tests\integration\Core\BaseTestCase;
class LinkTest extends BaseTestCase
@@ -439,4 +441,63 @@ class LinkTest extends BaseTestCase
$case->get('contactsNames')
);
}
public function testOneToOne(): void
{
$metadata = $this->getContainer()->getByClass(Metadata::class);
$metadata->set('entityDefs', CaseObj::ENTITY_TYPE, [
'links' => [
'task' => [
'foreign' => 'case',
'type' => RelationType::BELONGS_TO,
'entity' => Task::ENTITY_TYPE,
],
]
]);
$metadata->set('entityDefs', Task::ENTITY_TYPE, [
'fields' => [
'case' => [
'type' => FieldType::LINK_ONE,
],
],
'links' => [
'case' => [
'foreign' => 'task',
'type' => RelationType::HAS_ONE,
'entity' => CaseObj::ENTITY_TYPE,
],
]
]);
$metadata->save();
/** @noinspection PhpUnhandledExceptionInspection */
$this->getDataManager()->rebuild();
$this->reCreateApplication();
$em = $this->getEntityManager();
$task = $em->getRDBRepositoryByClass(Task::class)->getNew();
$task->setMultiple(['name' => 'Task']);
$em->saveEntity($task);
$case = $em->getRDBRepositoryByClass(CaseObj::class)->getNew();
$case->setMultiple(['name' => 'Case']);
$em->saveEntity($case);
$service = $this->getContainer()->getByClass(ServiceContainer::class)->getByClass(Task::class);
/** @noinspection PhpUnhandledExceptionInspection */
$service->update($task->getId(), (object) [
'caseId' => $case->getId(),
], UpdateParams::create());
$this->assertTrue(
$em->getRDBRepositoryByClass(Task::class)
->getRelation($task, 'case')
->isRelatedById($case->getId())
);
}
}