Skip to content

Commit

Permalink
FRW-9407 Fixed Data Exchange API child relation saving with PUT reque…
Browse files Browse the repository at this point in the history
…sts. (#11205)

FRW-9407 Fixed Data Exchange API child relation saving with PUT requests.
  • Loading branch information
asmarovydlo authored Nov 22, 2024
1 parent 7dcd47c commit 9e91641
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@
use Generated\Shared\Transfer\DynamicEntityCollectionRequestTransfer;
use Generated\Shared\Transfer\DynamicEntityCollectionResponseTransfer;
use Generated\Shared\Transfer\DynamicEntityConditionsTransfer;
use Generated\Shared\Transfer\DynamicEntityConfigurationRelationTransfer;
use Generated\Shared\Transfer\DynamicEntityConfigurationTransfer;
use Generated\Shared\Transfer\DynamicEntityFieldConditionTransfer;
use Generated\Shared\Transfer\DynamicEntityRelationFieldMappingTransfer;
use Generated\Shared\Transfer\DynamicEntityRelationTransfer;
use Generated\Shared\Transfer\DynamicEntityTransfer;
Expand Down Expand Up @@ -393,6 +395,12 @@ protected function updateChildDynamicEntititesFromRelation(
$dynamicEntityConditionsTransfer = new DynamicEntityConditionsTransfer();
}

$dynamicEntityConditionsTransfer = $this->addParentForeignKeyToConditionsTransfer(
$dynamicEntityConditionsTransfer,
$childDynamicEntityConfiguration,
$parentDynamicEntityTransfer,
);

$childDynamicEntityCollectionResponseTransfer = $this->entityManager->updateChildDynamicEntity(
$childDynamicEntityTransfer,
$childDynamicEntityConfiguration,
Expand Down Expand Up @@ -443,6 +451,29 @@ protected function addParentForeignKeyToChildFields(
);
}

/**
* @param \Generated\Shared\Transfer\DynamicEntityConditionsTransfer $dynamicEntityConditionsTransfer
* @param \Generated\Shared\Transfer\DynamicEntityConfigurationRelationTransfer $childDynamicEntityConfiguration
* @param \Generated\Shared\Transfer\DynamicEntityTransfer $parentDynamicEntityTransfer
*
* @return \Generated\Shared\Transfer\DynamicEntityConditionsTransfer
*/
protected function addParentForeignKeyToConditionsTransfer(
DynamicEntityConditionsTransfer $dynamicEntityConditionsTransfer,
DynamicEntityConfigurationRelationTransfer $childDynamicEntityConfiguration,
DynamicEntityTransfer $parentDynamicEntityTransfer
): DynamicEntityConditionsTransfer {
foreach ($childDynamicEntityConfiguration->getRelationFieldMappings() as $childRelationFieldMapping) {
$dynamicEntityConditionsTransfer->addFieldCondition(
(new DynamicEntityFieldConditionTransfer())
->setName($childRelationFieldMapping->getChildFieldName())
->setValue($parentDynamicEntityTransfer->getFields()[$childRelationFieldMapping->getParentFieldName()]),
);
}

return $dynamicEntityConditionsTransfer;
}

/**
* @param \Generated\Shared\Transfer\DynamicEntityCollectionResponseTransfer $dynamicEntityCollectionResponseTransfer
* @param array<\Generated\Shared\Transfer\ErrorTransfer> $errorTransfers
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,16 @@ class DynamicEntityFacadeTest extends Unit
*/
protected const IDENTIFIER_TEST_TABLE_ALIAS = 'test_identifiers';

/**
* @var string
*/
protected const RELATION_PARENT_FK = 'fk_parent_dynamic_entity_configuration';

/**
* @var string
*/
protected const RELATION_CHILD_FK = 'fk_child_dynamic_entity_configuration';

/**
* @var string
*/
Expand Down Expand Up @@ -260,6 +270,75 @@ public function testGetDynamicEntityCollectionReturnsCollectionWithChildRelation
$this->assertEquals(1, count($dynamicEntityTranfer->getChildRelations()[0]->getDynamicEntities()));
}

/**
* @return void
*/
public function testPutDynamicEntityCollectionUpdatesCollectionWithChildRelations(): void
{
// Arrange
$dynamicEntityConfigurationEntity = $this->tester->createDynamicEntityConfigurationWithRelationAndFieldMapping(
$this->tester::FOO_TABLE_ALIAS_1,
static::RELATION_TEST_NAME,
static::FIELD_PARENT_ENTITY_ID_CONFIGURATION,
static::FIELD_CHILD_ENTITY_ID_CONFIGURATION,
);
$dynamicConfigurationEntity = $this->tester->getDynamicEntityConfigurationByTableAlias($this->tester::FOO_TABLE_ALIAS_1);
$relationEntity = $this->tester->getDynamicEntityConfigurationRelationEntityByRelation(static::RELATION_TEST_NAME);
$childDynamicConfigurationEntity = $relationEntity->getSpyDynamicEntityConfigurationRelatedByFkChildDynamicEntityConfiguration();

$dynamicEntityCollectionRequestTransfer = $this->tester->createDynamicEntityCollectionRequestTransfer($dynamicEntityConfigurationEntity->getTableAlias());
$childEntityFields = [
static::RELATION_PARENT_FK => $dynamicConfigurationEntity->getIdDynamicEntityConfiguration(),
static::RELATION_CHILD_FK => 1,
'is_editable' => true,
'name' => 'testme',
];

$dynamicEntityCollectionRequestTransfer
->setResetNotProvidedFieldValues(true)
->setIsCreatable(true)
->addDynamicEntity(
(new DynamicEntityTransfer())
->setFields([
static::FIELD_PARENT_ENTITY_ID_CONFIGURATION => $dynamicConfigurationEntity->getIdDynamicEntityConfiguration(),
'table_alias' => static::FOO_TABLE_ALIAS_2,
'table_name' => $dynamicConfigurationEntity->getTableName(),
'definition' => $dynamicConfigurationEntity->getDefinition(),
static::RELATION_TEST_NAME => [$childEntityFields],
])
->addChildRelation(
(new DynamicEntityRelationTransfer())
->setName(static::RELATION_TEST_NAME)
->addDynamicEntity(
(new DynamicEntityTransfer())
->setFields($childEntityFields),
),
),
);

// Act
$dynamicEntityCollectionResponseTransfer = $this->dynamicEntityFacade->updateDynamicEntityCollection($dynamicEntityCollectionRequestTransfer);

// Assert
$updatedDynamicConfigurationEntity = $this->tester->getDynamicEntityConfigurationByIdDynamicEntityConfiguration(
$childDynamicConfigurationEntity->getIdDynamicEntityConfiguration(),
);

$this->assertEmpty($dynamicEntityCollectionResponseTransfer->getErrors());
$this->assertNotEquals($dynamicConfigurationEntity->getTableName(), $updatedDynamicConfigurationEntity->getTableName());

$dynamicEntities = $dynamicEntityCollectionResponseTransfer->getDynamicEntities();

$this->assertNotEmpty($dynamicEntities);

$updatedDynamicEntity = $dynamicEntities->offsetGet(0);

$this->assertEquals(
$updatedDynamicEntity->getFields()[static::FIELD_PARENT_ENTITY_ID_CONFIGURATION],
$updatedDynamicEntity->getChildRelations()->offsetGet(0)->getDynamicEntities()->offsetGet(0)->getFields()[static::RELATION_PARENT_FK],
);
}

/**
* @return void
*/
Expand Down Expand Up @@ -521,56 +600,6 @@ public function testPatchDynamicEntityCollectionWithChildRelationsHasErrorsWhenW
$this->assertNotEmpty($dynamicEntityCollectionResponseTransfer->getErrors());
}

/**
* @return void
*/
public function testPutDynamicEntityCollectionUpdatesCollectionWithChildRelations(): void
{
// Arrange
$dynamicEntityConfigurationEntity = $this->tester->createDynamicEntityConfigurationWithRelationAndFieldMapping(
$this->tester::FOO_TABLE_ALIAS_1,
static::RELATION_TEST_NAME,
static::FIELD_PARENT_ENTITY_ID_CONFIGURATION,
static::FIELD_CHILD_ENTITY_ID_CONFIGURATION,
);
$dynamicConfigurationEntity = $this->tester->getDynamicEntityConfigurationByTableAlias($this->tester::FOO_TABLE_ALIAS_1);
$relationEntity = $this->tester->getDynamicEntityConfigurationRelationEntityByRelation(static::RELATION_TEST_NAME);
$childDynamicConfigurationEntity = $relationEntity->getSpyDynamicEntityConfigurationRelatedByFkChildDynamicEntityConfiguration();

$dynamicEntityCollectionRequestTransfer = $this->tester->createDynamicEntityCollectionRequestTransfer($dynamicEntityConfigurationEntity->getTableAlias());
$dynamicEntityCollectionRequestTransfer
->setResetNotProvidedFieldValues(true)
->setIsCreatable(true)
->addDynamicEntity(
(new DynamicEntityTransfer())
->setFields([
'id_dynamic_entity_configuration' => $dynamicConfigurationEntity->getIdDynamicEntityConfiguration(),
'table_alias' => static::FOO_TABLE_ALIAS_2,
'table_name' => $dynamicConfigurationEntity->getTableName(),
'definition' => $dynamicConfigurationEntity->getDefinition(),
static::RELATION_TEST_NAME => [
[
'id_dynamic_entity_configuration_relation' => $relationEntity->getIdDynamicEntityConfigurationRelation(),
'fk_parent_dynamic_entity_configuration' => $dynamicConfigurationEntity->getIdDynamicEntityConfiguration(),
'fk_child_dynamic_entity_configuration' => 1,
'is_editable' => true,
'name' => 'testme',
],
],
]),
);

// Act
$dynamicEntityCollectionResponseTransfer = $this->dynamicEntityFacade->updateDynamicEntityCollection($dynamicEntityCollectionRequestTransfer);

// Assert
$updatedDynamicConfigurationEntity = $this->tester->getDynamicEntityConfigurationByIdDynamicEntityConfiguration(
$childDynamicConfigurationEntity->getIdDynamicEntityConfiguration(),
);
$this->assertEmpty($dynamicEntityCollectionResponseTransfer->getErrors());
$this->assertNotEquals($dynamicConfigurationEntity->getTableName(), $updatedDynamicConfigurationEntity->getTableName());
}

/**
* @return void
*/
Expand Down

0 comments on commit 9e91641

Please sign in to comment.