/**
  * @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);
 }