/** * @depends testRequiredAttributesAreMissingFromLayout */ public function testMakingAlreadyPlacedNonrequiredStandardAttributeRequiredAndThenMakingItUnrequired() { $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super'); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/default/create'); $this->assertNotContains('There are required fields missing from the following layout', $content); //Now make industry required. $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName(new Account(), 'industry'); $this->assertFalse($attributeForm->isRequired); $attributeForm->isRequired = true; $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData(); $adapter = new $modelAttributesAdapterClassName(new Account()); try { $adapter->setAttributeMetadataFromForm($attributeForm); } catch (FailedDatabaseSchemaChangeException $e) { echo $e->getMessage(); $this->fail(); } RequiredAttributesValidViewUtil::resolveToSetAsMissingRequiredAttributesByModelClassName('Account', 'industry'); RedBeanModelsCache::forgetAll(); $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/default/create'); $this->assertNotContains('There are required fields missing from the following layout', $content); //Now make industry unrequired. $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName(new Account(), 'industry'); $this->assertTrue($attributeForm->isRequired); $attributeForm->isRequired = false; $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData(); $adapter = new $modelAttributesAdapterClassName(new Account()); try { $adapter->setAttributeMetadataFromForm($attributeForm); } catch (FailedDatabaseSchemaChangeException $e) { echo $e->getMessage(); $this->fail(); } RequiredAttributesValidViewUtil::resolveToRemoveAttributeAsMissingRequiredAttribute('Account', 'industry'); RedBeanModelsCache::forgetAll(); //Confirm industry is truly unrequired. $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName(new Account(), 'industry'); $this->assertFalse($attributeForm->isRequired); //Now the layout should not show an error message. $content = $this->runControllerWithNoExceptionsAndGetContent('accounts/default/create'); $this->assertNotContains('There are required fields missing from the following layout', $content); }
public function testResolveToSetAsMissingRequiredAttributesByModelClassName() { RequiredAttributesValidViewUtil::resolveToSetAsMissingRequiredAttributesByModelClassName('Contact', 'lastName'); $booleanTest = RequiredAttributesValidViewUtil::isViewMissingRequiredAttributes('ContactsModule', 'ContactEditAndDetailsView'); $this->assertFalse($booleanTest); RequiredAttributesValidViewUtil::resolveToSetAsMissingRequiredAttributesByModelClassName('Contact', 'dummyEmailShouldNotAppearInAnyView'); $booleanTest = RequiredAttributesValidViewUtil::isViewMissingRequiredAttributes('ContactsModule', 'ContactEditAndDetailsView'); $this->assertTrue($booleanTest); RequiredAttributesValidViewUtil::resolveToRemoveAttributeAsMissingRequiredAttribute('Contact', 'dummyEmailShouldNotAppearInAnyView'); $booleanTest = RequiredAttributesValidViewUtil::isViewMissingRequiredAttributes('ContactsModule', 'ContactEditAndDetailsView'); $this->assertFalse($booleanTest); }
protected function actionAttributeSave($attributeForm, $model) { assert('!empty($_GET["moduleClassName"])'); $wasRequired = $attributeForm->isRequired; $attributeForm->setAttributes($_POST[get_class($attributeForm)]); $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData(); $adapter = new $modelAttributesAdapterClassName($model); $adapter->setAttributeMetadataFromForm($attributeForm); if ($attributeForm->isRequired && !$wasRequired) { RequiredAttributesValidViewUtil::resolveToSetAsMissingRequiredAttributesByModelClassName(get_class($model), $attributeForm->attributeName); } elseif (!$attributeForm->isRequired && $wasRequired) { RequiredAttributesValidViewUtil::resolveToRemoveAttributeAsMissingRequiredAttribute(get_class($model), $attributeForm->attributeName); } RedBeanModelsCache::forgetAll(); //Ensures existing models that are cached see the new dropdown. $routeParams = array_merge(array('default/attributesList'), $_GET); $this->redirect($routeParams); }