/** * @param ClassMetadata $metadata * @param bool $force */ protected function loadEntityConfigs(ClassMetadata $metadata, $force) { if ($this->hasEntityConfigs($metadata)) { $className = $metadata->getName(); if ($this->configManager->hasConfig($className)) { $this->logger->info(sprintf('Update config for "%s" entity.', $className)); $this->configManager->updateConfigEntityModel($className, $force); } else { $this->logger->info(sprintf('Create config for "%s" entity.', $className)); $this->configManager->createConfigEntityModel($className); } $fieldNames = $metadata->getFieldNames(); foreach ($fieldNames as $fieldName) { if ($this->hasFieldConfigs($metadata, $fieldName)) { $fieldType = $metadata->getTypeOfField($fieldName); $this->loadFieldConfigs($className, $fieldName, $fieldType, $force); } } $associationNames = $metadata->getAssociationNames(); foreach ($associationNames as $associationName) { if ($this->hasAssociationConfigs($metadata, $associationName)) { $associationType = $metadata->isSingleValuedAssociation($associationName) ? 'ref-one' : 'ref-many'; $this->loadFieldConfigs($className, $associationName, $associationType, $force); } } } }
/** * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function testUpdateConfigEntityModelWithForceForCustomEntity() { $configId = new EntityConfigId('entity', self::ENTITY_CLASS); $metadata = $this->getEntityMetadata(self::ENTITY_CLASS, ['translatable1' => 'labelVal1', 'other1' => 'otherVal1', 'translatable2' => 'labelVal2', 'other2' => 'otherVal2']); $this->modelManager->expects($this->once())->method('findEntityModel')->with(self::ENTITY_CLASS)->willReturn($this->createEntityConfigModel(self::ENTITY_CLASS)); $this->metadataFactory->expects($this->any())->method('getMetadataForClass')->with(self::ENTITY_CLASS)->willReturn($metadata); $propertyConfigContainer = $this->getPropertyConfigContainerMock(); $propertyConfigContainer->expects($this->once())->method('getDefaultValues')->with(PropertyConfigContainer::TYPE_ENTITY)->willReturn(['translatable10' => 'labelVal10', 'other10' => 'otherVal10']); $propertyConfigContainer->expects($this->once())->method('getTranslatableValues')->with(PropertyConfigContainer::TYPE_ENTITY)->willReturn(['translatable1', 'translatable2', 'translatable10', 'auto_generated']); $this->configProvider->expects($this->any())->method('getPropertyConfig')->willReturn($propertyConfigContainer); $config = $this->getConfig($configId, ['translatable2' => 'labelVal2_old', 'other2' => 'otherVal2_old']); $this->configProvider->expects($this->once())->method('getConfig')->with(self::ENTITY_CLASS)->willReturn($config); $this->eventDispatcher->expects($this->once())->method('dispatch')->with(Events::UPDATE_ENTITY); $extendConfig = $this->getConfig(new EntityConfigId('extend', self::ENTITY_CLASS)); $extendConfig->set('owner', ExtendScope::OWNER_CUSTOM); $extendConfigProvider = $this->getConfigProviderMock(); $extendConfigProvider->expects($this->any())->method('getScope')->willReturn('extend'); $this->configManager->addProvider($extendConfigProvider); $extendConfigProvider->expects($this->once())->method('hasConfig')->with(self::ENTITY_CLASS)->willReturn(true); $extendConfigProvider->expects($this->exactly(2))->method('getConfig')->with(self::ENTITY_CLASS)->willReturn($extendConfig); $extendPropertyConfigContainer = $this->getPropertyConfigContainerMock(); $extendPropertyConfigContainer->expects($this->once())->method('getDefaultValues')->with(PropertyConfigContainer::TYPE_ENTITY)->willReturn(['owner' => ExtendScope::OWNER_SYSTEM]); $extendPropertyConfigContainer->expects($this->once())->method('getTranslatableValues')->with(PropertyConfigContainer::TYPE_ENTITY)->willReturn([]); $extendConfigProvider->expects($this->any())->method('getPropertyConfig')->willReturn($extendPropertyConfigContainer); $extendConfigProvider->expects($this->never())->method('persist'); $expectedConfig = $this->getConfig($configId, ['translatable2' => 'labelVal2_old', 'other2' => 'otherVal2_old', 'translatable10' => 'labelVal10', 'other10' => 'otherVal10', 'translatable1' => 'labelVal1', 'other1' => 'otherVal1', 'auto_generated' => 'oro.entityconfig.tests.unit.fixture.demoentity.entity_auto_generated']); $this->configManager->updateConfigEntityModel(self::ENTITY_CLASS, true); $this->assertEquals($expectedConfig, $this->configManager->getUpdateConfig()[0]); }
public function testUpdateConfigEntityModelWithForceForCustomEntity() { $configId = new EntityConfigId('entity', self::ENTITY_CLASS); $metadata = new EntityMetadata(self::ENTITY_CLASS); $metadata->defaultValues['entity'] = ['translatable1' => 'labelVal1', 'other1' => 'otherVal1', 'translatable2' => 'labelVal2', 'other2' => 'otherVal2']; $this->modelManager->expects($this->once())->method('findEntityModel')->with(self::ENTITY_CLASS)->will($this->returnValue($this->createEntityConfigModel(self::ENTITY_CLASS))); $this->metadataFactory->expects($this->any())->method('getMetadataForClass')->with(self::ENTITY_CLASS)->will($this->returnValue($metadata)); $propertyConfigContainer = $this->getMockBuilder('Oro\\Bundle\\EntityConfigBundle\\Provider\\PropertyConfigContainer')->disableOriginalConstructor()->getMock(); $propertyConfigContainer->expects($this->once())->method('getDefaultValues')->with(PropertyConfigContainer::TYPE_ENTITY)->will($this->returnValue(['translatable10' => 'labelVal10', 'other10' => 'otherVal10'])); $propertyConfigContainer->expects($this->once())->method('getTranslatableValues')->with(PropertyConfigContainer::TYPE_ENTITY)->will($this->returnValue(['translatable1', 'translatable2', 'translatable10', 'auto_generated'])); $this->configProvider->expects($this->any())->method('getPropertyConfig')->will($this->returnValue($propertyConfigContainer)); $config = new Config($configId); $config->set('translatable2', 'labelVal2_old'); $config->set('other2', 'otherVal2_old'); $this->configProvider->expects($this->once())->method('getConfig')->with(self::ENTITY_CLASS)->will($this->returnValue($config)); $this->eventDispatcher->expects($this->once())->method('dispatch')->with(Events::UPDATE_ENTITY_CONFIG); $extendConfig = new Config(new EntityConfigId('extend', self::ENTITY_CLASS)); $extendConfig->set('owner', ExtendScope::OWNER_CUSTOM); $extendConfigProvider = $this->getMockBuilder('Oro\\Bundle\\EntityConfigBundle\\Provider\\ConfigProvider')->disableOriginalConstructor()->getMock(); $extendConfigProvider->expects($this->any())->method('getScope')->will($this->returnValue('extend')); $this->configProviderBag->addProvider($extendConfigProvider); $extendConfigProvider->expects($this->once())->method('hasConfig')->with(self::ENTITY_CLASS)->will($this->returnValue(true)); $extendConfigProvider->expects($this->exactly(2))->method('getConfig')->with(self::ENTITY_CLASS)->will($this->returnValue($extendConfig)); $extendPropertyConfigContainer = $this->getMockBuilder('Oro\\Bundle\\EntityConfigBundle\\Provider\\PropertyConfigContainer')->disableOriginalConstructor()->getMock(); $extendPropertyConfigContainer->expects($this->once())->method('getDefaultValues')->with(PropertyConfigContainer::TYPE_ENTITY)->will($this->returnValue(['owner' => ExtendScope::OWNER_SYSTEM])); $extendPropertyConfigContainer->expects($this->once())->method('getTranslatableValues')->with(PropertyConfigContainer::TYPE_ENTITY)->will($this->returnValue([])); $extendConfigProvider->expects($this->any())->method('getPropertyConfig')->will($this->returnValue($extendPropertyConfigContainer)); $extendConfigProvider->expects($this->never())->method('persist'); $expectedConfig = new Config($configId); $expectedConfig->set('translatable2', 'labelVal2_old'); $expectedConfig->set('other2', 'otherVal2_old'); $expectedConfig->set('translatable10', 'labelVal10'); $expectedConfig->set('other10', 'otherVal10'); $expectedConfig->set('translatable1', 'labelVal1'); $expectedConfig->set('other1', 'otherVal1'); $expectedConfig->set('auto_generated', 'oro.entityconfig.tests.unit.fixture.demoentity.entity_auto_generated'); $actualConfig = null; $this->configProvider->expects($this->once())->method('persist')->will($this->returnCallback(function ($c) use(&$actualConfig) { $actualConfig = $c; })); $this->configManager->updateConfigEntityModel(self::ENTITY_CLASS, true); $this->assertEquals($expectedConfig, $actualConfig); }