public function testGetUsedAttributeNames()
 {
     $mappingData = array(array('attributeName' => 'a'), array('attributeName' => 'b'), array('attributeName' => 'c'));
     $metadata = new DropDownDependencyDerivedAttributeMetadata();
     $metadata->setScenario('nonAutoBuild');
     $metadata->name = 'someName3';
     $metadata->modelClassName = 'Whatever2';
     $metadata->serializedMetadata = serialize(array('stuff', 1, 'attributeLabels' => array(), 'mappingData' => $mappingData));
     $this->assertTrue($metadata->save());
     $usedModelAttributeNames = $metadata->getUsedAttributeNames();
     $this->assertEquals(array('a', 'b', 'c'), $usedModelAttributeNames);
 }
 public function testGetCustomFieldAttributesNotUsedInOtherDependencyAttributes()
 {
     $adapter = new DropDownDependencyToMappingLayoutAdapter('TestDropDownDependencyModel', null, 4);
     $attributeNames = $adapter->getCustomFieldAttributesNotUsedInOtherDependencyAttributes();
     $availableAttributes = array('something1' => 'Something 1', 'something2' => 'Something 2', 'something3' => 'Something 3', 'something4' => 'Something 4');
     $this->assertEquals($availableAttributes, $attributeNames);
     //Now save a drop down dependency. This means it will use up one of the attribute names.
     $metadata = new DropDownDependencyDerivedAttributeMetadata();
     $metadata->setScenario('nonAutoBuild');
     $metadata->name = 'someName';
     $metadata->modelClassName = 'TestDropDownDependencyModel';
     $mappingData = array(array('attributeName' => 'something1'));
     $metadata->serializedMetadata = serialize(array('stuff', 1, 'attributeLabels' => array(), 'mappingData' => $mappingData));
     $this->assertTrue($metadata->save());
     //Now requery and see that something1 is not available.
     $adapter = new DropDownDependencyToMappingLayoutAdapter('TestDropDownDependencyModel', null, 4);
     $attributeNames = $adapter->getCustomFieldAttributesNotUsedInOtherDependencyAttributes();
     $availableAttributes = array('something2' => 'Something 2', 'something3' => 'Something 3', 'something4' => 'Something 4');
     $this->assertEquals($availableAttributes, $attributeNames);
 }
 public function testUpdateValueInMappingByOldAndNewValue()
 {
     //First create a dependency
     $mappingData = array(array('attributeName' => 'a'), array('attributeName' => 'b', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2', 'b3' => 'a3', 'b4' => 'a4')), array('attributeName' => 'c', 'valuesToParentValues' => array('c1' => 'b1', 'c2' => 'b2', 'c3' => 'b3', 'c4' => 'b4')));
     $metadata = new DropDownDependencyDerivedAttributeMetadata();
     $metadata->setScenario('nonAutoBuild');
     $metadata->name = 'aName';
     $metadata->modelClassName = 'aModelClassName';
     $metadata->serializedMetadata = serialize(array('attributeLabels' => array('a' => 'b'), 'mappingData' => $mappingData));
     $this->assertTrue($metadata->save());
     //Change b3 to b3New
     $oldAndNewValuePairs = array('b3' => 'b3New');
     DropDownDependencyDerivedAttributeDesignerUtil::updateValueInMappingByOldAndNewValue('aModelClassName', 'b', $oldAndNewValuePairs);
     //Confirm b3 values changed correctly to b3New
     $metadata = DropDownDependencyDerivedAttributeMetadata::getById($metadata->id);
     $unserializedData = unserialize($metadata->serializedMetadata);
     $compareData = array(array('attributeName' => 'a'), array('attributeName' => 'b', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2', 'b3New' => 'a3', 'b4' => 'a4')), array('attributeName' => 'c', 'valuesToParentValues' => array('c1' => 'b1', 'c2' => 'b2', 'c3' => 'b3New', 'c4' => 'b4')));
     $this->assertEquals(array('a' => 'b'), $unserializedData['attributeLabels']);
     $this->assertEquals($compareData, $unserializedData['mappingData']);
     //Now change a value for a dropdown that is the first level of the dependency. This will only change the
     //value when it is a parent value.
     $oldAndNewValuePairs = array('a2' => 'a2New');
     DropDownDependencyDerivedAttributeDesignerUtil::updateValueInMappingByOldAndNewValue('aModelClassName', 'a', $oldAndNewValuePairs);
     //Confirm a2 values changed correctly to a2New
     $metadata = DropDownDependencyDerivedAttributeMetadata::getById($metadata->id);
     $unserializedData = unserialize($metadata->serializedMetadata);
     $compareData = array(array('attributeName' => 'a'), array('attributeName' => 'b', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2New', 'b3New' => 'a3', 'b4' => 'a4')), array('attributeName' => 'c', 'valuesToParentValues' => array('c1' => 'b1', 'c2' => 'b2', 'c3' => 'b3New', 'c4' => 'b4')));
     $this->assertEquals(array('a' => 'b'), $unserializedData['attributeLabels']);
     $this->assertEquals($compareData, $unserializedData['mappingData']);
     //Now change 2 values at once.
     $oldAndNewValuePairs = array('c1' => 'c1New', 'c2' => 'c2New');
     DropDownDependencyDerivedAttributeDesignerUtil::updateValueInMappingByOldAndNewValue('aModelClassName', 'c', $oldAndNewValuePairs);
     //Confirm c1, c2 both changed.
     $metadata = DropDownDependencyDerivedAttributeMetadata::getById($metadata->id);
     $unserializedData = unserialize($metadata->serializedMetadata);
     $compareData = array(array('attributeName' => 'a'), array('attributeName' => 'b', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2New', 'b3New' => 'a3', 'b4' => 'a4')), array('attributeName' => 'c', 'valuesToParentValues' => array('c1New' => 'b1', 'c2New' => 'b2', 'c3' => 'b3New', 'c4' => 'b4')));
     $this->assertEquals(array('a' => 'b'), $unserializedData['attributeLabels']);
     $this->assertEquals($compareData, $unserializedData['mappingData']);
 }
 public function setAttributeMetadataFromForm(AttributeForm $attributeForm)
 {
     assert('$attributeForm instanceof DropDownDependencyAttributeForm');
     $modelClassName = get_class($this->model);
     $attributeName = $attributeForm->attributeName;
     $attributeLabels = $attributeForm->attributeLabels;
     $elementType = $attributeForm->getAttributeTypeName();
     $mappingData = $attributeForm->mappingData;
     $id = $attributeForm->id;
     if ($id != null) {
         $metadata = DropDownDependencyDerivedAttributeMetadata::getById($id);
         $metadata->setScenario('nonAutoBuild');
     } else {
         $metadata = new DropDownDependencyDerivedAttributeMetadata();
         $metadata->setScenario('nonAutoBuild');
     }
     $metadata->name = $attributeName;
     $metadata->modelClassName = $modelClassName;
     $metadata->serializedMetadata = serialize(array('mappingData' => $mappingData, 'attributeLabels' => $attributeLabels));
     $saved = $metadata->save();
     if (!$saved) {
         throw new NotSupportedException();
     }
 }
Пример #5
0
 /**
  * @depends testSetMetadataFromLayoutWithAndWithOutRequiredDerivedField
  */
 public function testSetMetadataFromLayoutWithAndWithOutOnlyUniqueFields()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     //First create a dependency
     $mappingData = array(array('attributeName' => 'type'), array('attributeName' => 'officePhone', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2', 'b3' => 'a3', 'b4' => 'a4')));
     $metadata = new DropDownDependencyDerivedAttributeMetadata();
     $metadata->setScenario('nonAutoBuild');
     $metadata->name = 'aName';
     $metadata->modelClassName = 'Account';
     $metadata->serializedMetadata = serialize(array('attributeLabels' => array('a' => 'b'), 'mappingData' => $mappingData));
     $this->assertTrue($metadata->save());
     $layout = array('panels' => array(array('rows' => array(array('cells' => array(array('element' => 'aName'))), array('cells' => array(array('element' => 'type'))), array('cells' => array(array('element' => 'officeFax'))), array('cells' => array(array('element' => 'employees')))))));
     $model = new Account();
     $editableMetadata = AccountEditAndDetailsView::getMetadata();
     $modelAttributesAdapter = new ModelAttributesAdapter($model);
     $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeAttributesLayoutAdapter($modelAttributesAdapter->getAttributes(), new EditAndDetailsViewDesignerRules(), $editableMetadata);
     $adapter = new LayoutMetadataAdapter('AccountEditAndDetailsView', 'AccountsModule', $editableMetadata, new EditAndDetailsViewDesignerRules(), $attributesLayoutAdapter->getPlaceableLayoutAttributes(), $attributesLayoutAdapter->getRequiredDerivedLayoutAttributeTypes());
     $x = $adapter->setMetadataFromLayout($layout, array());
     $this->assertFalse($adapter->setMetadataFromLayout($layout, array()));
     $this->assertEquals($adapter->getMessage(), 'All required fields must be placed in this layout.');
 }
 public function testUsingTheAdapterAsAWrapperToUpdateValueInMappingByOldAndNewValue()
 {
     $account = new Account();
     //First create a dependency
     $mappingData = array(array('attributeName' => 'aaaCstm'), array('attributeName' => 'bbbCstm', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2', 'b3' => 'a3', 'b4' => 'a4')), array('attributeName' => 'cccCstm', 'valuesToParentValues' => array('c1' => 'b1', 'c2' => 'b2', 'c3' => 'b3', 'c4' => 'b4')));
     $metadata = new DropDownDependencyDerivedAttributeMetadata();
     $metadata->setScenario('nonAutoBuild');
     $metadata->name = 'aName';
     $metadata->modelClassName = 'Account';
     $metadata->serializedMetadata = serialize(array('attributeLabels' => array('a' => 'b'), 'mappingData' => $mappingData));
     $this->assertTrue($metadata->save());
     //Change b3 to b3New
     $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName($account, 'bbbCstm');
     $attributeForm->customFieldDataDataExistingValues = array('b1', 'b2', 'b3', 'b4');
     $attributeForm->customFieldDataData = array('b1', 'b2', 'b3New', 'b4');
     $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
     $adapter = new $modelAttributesAdapterClassName($account);
     try {
         $adapter->setAttributeMetadataFromForm($attributeForm);
     } catch (FailedDatabaseSchemaChangeException $e) {
         echo $e->getMessage();
         $this->fail();
     }
     //Confirm b3 values changed correctly to b3New
     $metadata = DropDownDependencyDerivedAttributeMetadata::getById($metadata->id);
     $unserializedData = unserialize($metadata->serializedMetadata);
     $compareData = array(array('attributeName' => 'aaaCstm'), array('attributeName' => 'bbbCstm', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2', 'b3New' => 'a3', 'b4' => 'a4')), array('attributeName' => 'cccCstm', 'valuesToParentValues' => array('c1' => 'b1', 'c2' => 'b2', 'c3' => 'b3New', 'c4' => 'b4')));
     $this->assertEquals(array('a' => 'b'), $unserializedData['attributeLabels']);
     $this->assertEquals($compareData, $unserializedData['mappingData']);
     //Now change a value for a dropdown that is the first level of the dependency. This will only change the
     //value when it is a parent value.
     $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName($account, 'aaaCstm');
     $attributeForm->customFieldDataDataExistingValues = array('a1', 'a2', 'a3', 'a4');
     $attributeForm->customFieldDataData = array('a1', 'a2New', 'a3', 'a4');
     $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
     $adapter = new $modelAttributesAdapterClassName($account);
     try {
         $adapter->setAttributeMetadataFromForm($attributeForm);
     } catch (FailedDatabaseSchemaChangeException $e) {
         echo $e->getMessage();
         $this->fail();
     }
     //Confirm a2 values changed correctly to a2New
     $metadata = DropDownDependencyDerivedAttributeMetadata::getById($metadata->id);
     $unserializedData = unserialize($metadata->serializedMetadata);
     $compareData = array(array('attributeName' => 'aaaCstm'), array('attributeName' => 'bbbCstm', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2New', 'b3New' => 'a3', 'b4' => 'a4')), array('attributeName' => 'cccCstm', 'valuesToParentValues' => array('c1' => 'b1', 'c2' => 'b2', 'c3' => 'b3New', 'c4' => 'b4')));
     $this->assertEquals(array('a' => 'b'), $unserializedData['attributeLabels']);
     $this->assertEquals($compareData, $unserializedData['mappingData']);
     //Now change 2 values at once.
     $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName($account, 'cccCstm');
     $attributeForm->customFieldDataDataExistingValues = array('c1', 'c2', 'c3', 'c4');
     $attributeForm->customFieldDataData = array('c1New', 'c2New', 'c3', 'c4');
     $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
     $adapter = new $modelAttributesAdapterClassName($account);
     try {
         $adapter->setAttributeMetadataFromForm($attributeForm);
     } catch (FailedDatabaseSchemaChangeException $e) {
         echo $e->getMessage();
         $this->fail();
     }
     //Confirm c1, c2 both changed.
     $metadata = DropDownDependencyDerivedAttributeMetadata::getById($metadata->id);
     $unserializedData = unserialize($metadata->serializedMetadata);
     $compareData = array(array('attributeName' => 'aaaCstm'), array('attributeName' => 'bbbCstm', 'valuesToParentValues' => array('b1' => 'a1', 'b2' => 'a2New', 'b3New' => 'a3', 'b4' => 'a4')), array('attributeName' => 'cccCstm', 'valuesToParentValues' => array('c1New' => 'b1', 'c2New' => 'b2', 'c3' => 'b3New', 'c4' => 'b4')));
     $this->assertEquals(array('a' => 'b'), $unserializedData['attributeLabels']);
     $this->assertEquals($compareData, $unserializedData['mappingData']);
 }