/** * {@inheritdoc} */ public function loadMetadataForClass(\ReflectionClass $class) { /** @var Config $annotation */ if ($annotation = $this->reader->getClassAnnotation($class, self::ENTITY_CONFIG)) { $metadata = new EntityMetadata($class->getName()); $metadata->configurable = true; $metadata->defaultValues = $annotation->defaultValues; $metadata->routeName = $annotation->routeName; $metadata->routeView = $annotation->routeView; $metadata->mode = $annotation->mode; foreach ($class->getProperties() as $property) { $propertyMetadata = new FieldMetadata($class->getName(), $property->getName()); /** @var ConfigField $annotation */ if ($annotation = $this->reader->getPropertyAnnotation($property, self::FIELD_CONFIG)) { $propertyMetadata->defaultValues = $annotation->defaultValues; $propertyMetadata->mode = $annotation->mode; } $metadata->addPropertyMetadata($propertyMetadata); } return $metadata; } return null; }
public function testUpdateConfigFieldModelWithForceForCustomField() { $configId = new FieldConfigId('entity', self::ENTITY_CLASS, 'id', 'int'); $metadata = new EntityMetadata(self::ENTITY_CLASS); $idFieldMetadata = new FieldMetadata(self::ENTITY_CLASS, 'id'); $metadata->addPropertyMetadata($idFieldMetadata); $idFieldMetadata->defaultValues['entity'] = ['translatable1' => 'labelVal1', 'other1' => 'otherVal1', 'translatable2' => 'labelVal2', 'other2' => 'otherVal2']; $this->metadataFactory->expects($this->once())->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_FIELD, 'int')->will($this->returnValue(['translatable10' => 'labelVal10', 'other10' => 'otherVal10'])); $propertyConfigContainer->expects($this->once())->method('getTranslatableValues')->with(PropertyConfigContainer::TYPE_FIELD)->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)); $extendConfig = new Config(new FieldConfigId('extend', self::ENTITY_CLASS, 'id')); $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, 'id')->will($this->returnValue(true)); $extendConfigProvider->expects($this->exactly(2))->method('getConfig')->with(self::ENTITY_CLASS, 'id')->will($this->returnValue($extendConfig)); $extendPropertyConfigContainer = $this->getMockBuilder('Oro\\Bundle\\EntityConfigBundle\\Provider\\PropertyConfigContainer')->disableOriginalConstructor()->getMock(); $extendPropertyConfigContainer->expects($this->once())->method('getDefaultValues')->with(PropertyConfigContainer::TYPE_FIELD)->will($this->returnValue(['owner' => ExtendScope::OWNER_SYSTEM])); $extendPropertyConfigContainer->expects($this->once())->method('getTranslatableValues')->with(PropertyConfigContainer::TYPE_FIELD)->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.id.auto_generated'); $actualConfig = null; $this->configProvider->expects($this->once())->method('persist')->will($this->returnCallback(function ($c) use(&$actualConfig) { $actualConfig = $c; })); $this->configManager->updateConfigFieldModel(self::ENTITY_CLASS, 'id', true); $this->assertEquals($expectedConfig, $actualConfig); }