/**
  * @depends testGetAccountContactAffiliation
  */
 public function testDeleteAccountContactAffiliation()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $authenticationData = $this->login();
     $headers = array('Accept: application/json', 'ZURMO_SESSION_ID: ' . $authenticationData['sessionId'], 'ZURMO_TOKEN: ' . $authenticationData['token'], 'ZURMO_API_REQUEST_TYPE: REST');
     $affiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(2, count($affiliations));
     $response = $this->createApiCallWithRelativeUrl('delete/' . $affiliations[0]->id, 'DELETE', $headers);
     $response = json_decode($response, true);
     $this->assertEquals(ApiResponse::STATUS_SUCCESS, $response['status']);
     $response = $this->createApiCallWithRelativeUrl('read/' . $affiliations[0]->id, 'GET', $headers);
     $response = json_decode($response, true);
     $this->assertEquals(ApiResponse::STATUS_FAILURE, $response['status']);
     $this->assertEquals('The ID specified was invalid.', $response['message']);
     $affiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(1, count($affiliations));
 }
 public function testSimpleUserImportWhereAllRowsSucceed()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $account = AccountTestHelper::createAccountByNameForOwner('Account', Yii::app()->user->userModel);
     $contact = ContactTestHelper::createContactByNameForOwner('Contact', Yii::app()->user->userModel);
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(0, count($accountContactAffiliations));
     $import = new Import();
     $serializedData['importRulesType'] = 'AccountContactAffiliations';
     $serializedData['firstRowIsHeaderRow'] = true;
     $import->serializedData = serialize($serializedData);
     $this->assertTrue($import->save());
     ImportTestHelper::createTempTableByFileNameAndTableName('importTest.csv', $import->getTempTableName(), true, Yii::getPathOfAlias('application.modules.accountContactAffiliations.tests.unit.files'));
     //update the ids of the account column to match the parent account.
     ZurmoRedBean::exec("update " . $import->getTempTableName() . " set column_2 = " . $account->id . " where id != 1 limit 4");
     ZurmoRedBean::exec("update " . $import->getTempTableName() . " set column_1 = " . $contact->id . " where id != 1 limit 4");
     $this->assertEquals(4, ImportDatabaseUtil::getCount($import->getTempTableName()));
     // includes header rows.
     $mappingData = array('column_0' => ImportMappingUtil::makeDropDownColumnMappingData('role'), 'column_1' => ImportMappingUtil::makeHasOneColumnMappingData('contact'), 'column_2' => ImportMappingUtil::makeHasOneColumnMappingData('account'));
     $importRules = ImportRulesUtil::makeImportRulesByType('AccountContactAffiliations');
     $page = 0;
     $config = array('pagination' => array('pageSize' => 50));
     //This way all rows are processed.
     $dataProvider = new ImportDataProvider($import->getTempTableName(), true, $config);
     $dataProvider->getPagination()->setCurrentPage($page);
     $importResultsUtil = new ImportResultsUtil($import);
     $messageLogger = new ImportMessageLogger();
     ImportUtil::importByDataProvider($dataProvider, $importRules, $mappingData, $importResultsUtil, new ExplicitReadWriteModelPermissions(), $messageLogger);
     $importResultsUtil->processStatusAndMessagesForEachRow();
     //Confirm that 3 models where created.
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(3, count($accountContactAffiliations));
     $this->assertEquals('0', $accountContactAffiliations[0]->primary);
     $this->assertTrue($accountContactAffiliations[0]->account->isSame($account));
     $this->assertTrue($accountContactAffiliations[0]->contact->isSame($contact));
     $this->assertEquals('', $accountContactAffiliations[0]->role->value);
     $this->assertEquals('0', $accountContactAffiliations[1]->primary);
     $this->assertTrue($accountContactAffiliations[1]->account->isSame($account));
     $this->assertTrue($accountContactAffiliations[1]->contact->isSame($contact));
     $this->assertEquals('Support', $accountContactAffiliations[1]->role->value);
     $this->assertEquals('0', $accountContactAffiliations[2]->primary);
     $this->assertTrue($accountContactAffiliations[2]->account->isSame($account));
     $this->assertTrue($accountContactAffiliations[2]->contact->isSame($contact));
     $this->assertEquals('Technical', $accountContactAffiliations[2]->role->value);
     //Confirm 3 rows were processed as 'created'.
     $this->assertEquals(3, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::CREATED));
     //Confirm that 0 rows were processed as 'updated'.
     $this->assertEquals(0, ImportDatabaseUtil::getCount($import->getTempTableName(), "status = " . ImportRowDataResultsUtil::UPDATED));
 }
 public function testSuperUserDeleteAction()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(2, count($accountContactAffiliations));
     //Delete an AccountContactAffiliation model.
     $this->setGetArray(array('id' => $accountContactAffiliations[0]->id));
     $this->resetPostArray();
     $this->runControllerWithNoExceptionsAndGetContent('accountContactAffiliations/default/delete', true);
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(1, count($accountContactAffiliations));
 }
 /**
  * @depends testGetByAccountAndContact
  */
 public function testGetPrimaryByAccountIdAndContactId()
 {
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(1, count($accountContactAffiliations));
     $accountContactAffiliations = AccountContactAffiliation::getPrimaryByAccountIdAndContactId($accountContactAffiliations[0]->account->id, $accountContactAffiliations[0]->contact->id);
     $this->assertEquals(0, count($accountContactAffiliations));
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $accountContactAffiliations[0]->primary = true;
     $this->assertTrue($accountContactAffiliations[0]->save());
     $accountContactAffiliations = AccountContactAffiliation::getPrimaryByAccountIdAndContactId($accountContactAffiliations[0]->account->id, $accountContactAffiliations[0]->contact->id);
     $this->assertEquals(1, count($accountContactAffiliations));
 }
 public function testWhenRoleIsRequired()
 {
     $super = User::getByUsername('super');
     Yii::app()->user->userModel = $super;
     //Set role as required but without a default value.
     $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName(new AccountContactAffiliation(), 'role');
     $attributeForm->isRequired = true;
     $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
     $adapter = new $modelAttributesAdapterClassName(new AccountContactAffiliation());
     try {
         $adapter->setAttributeMetadataFromForm($attributeForm);
     } catch (FailedDatabaseSchemaChangeException $e) {
         echo $e->getMessage();
         $this->fail();
     }
     //Now create an affiliation, the role should be the first value.
     $this->assertEquals(0, count(AccountContactAffiliation::getAll()));
     $account = AccountTestHelper::createAccountByNameForOwner('thirdAccount', $super);
     $contact = ContactTestHelper::createContactWithAccountByNameForOwner('thirdContact', $super, $account);
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(1, count($accountContactAffiliations));
     $this->assertEquals(1, $accountContactAffiliations[0]->primary);
     $this->assertEquals('AAA', $accountContactAffiliations[0]->role->value);
     $this->assertTrue($accountContactAffiliations[0]->account->isSame($account));
     $this->assertTrue($accountContactAffiliations[0]->contact->isSame($contact));
     $this->assertTrue($contact->delete());
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(0, count($accountContactAffiliations));
     //Now add a default value, so the role should be the default value.
     $attributeForm = AttributesFormFactory::createAttributeFormByAttributeName(new AccountContactAffiliation(), 'role');
     $attributeForm->defaultValueOrder = 1;
     $modelAttributesAdapterClassName = $attributeForm::getModelAttributeAdapterNameForSavingAttributeFormData();
     $adapter = new $modelAttributesAdapterClassName(new AccountContactAffiliation());
     try {
         $adapter->setAttributeMetadataFromForm($attributeForm);
     } catch (FailedDatabaseSchemaChangeException $e) {
         echo $e->getMessage();
         $this->fail();
     }
     //Now create an account/contact and an affiliation. The role should be BBB
     $this->assertEquals(0, count(AccountContactAffiliation::getAll()));
     $account = AccountTestHelper::createAccountByNameForOwner('fourthAccount', $super);
     $contact = ContactTestHelper::createContactWithAccountByNameForOwner('fourthContact', $super, $account);
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(1, count($accountContactAffiliations));
     $this->assertEquals(1, $accountContactAffiliations[0]->primary);
     $this->assertEquals('BBB', $accountContactAffiliations[0]->role->value);
     $this->assertTrue($accountContactAffiliations[0]->account->isSame($account));
     $this->assertTrue($accountContactAffiliations[0]->contact->isSame($contact));
     $this->assertTrue($contact->delete());
     $accountContactAffiliations = AccountContactAffiliation::getAll();
     $this->assertEquals(0, count($accountContactAffiliations));
 }
 /**
  * @depends testSuperUserCustomFieldsWalkthroughForAccountContactAffiliationsModule
  */
 public function testLayoutsLoadOkAfterCustomFieldsPlacedForAccountContactAffiliationsModule()
 {
     $super = $this->logoutCurrentUserLoginNewUserAndGetByUsername('super');
     //Load create, edit views.
     $this->runControllerWithNoExceptionsAndGetContent('accountContactAffiliations/default/create');
     $accountContactAffiliation = AccountContactAffiliation::getAll();
     $this->assertEquals(0, count($accountContactAffiliation));
     //Create a new AccountContactAffiliation from a related account.
     $this->setGetArray(array('relationAttributeName' => 'account', 'relationModelId' => self::$account->id, 'relationModuleId' => 'accounts', 'redirectUrl' => 'someRedirect'));
     $this->setPostArray(array('AccountContactAffiliation' => array('role' => array('value' => 'TechnicalX'), 'contact' => array('id' => self::$contact->id))));
     $this->runControllerWithRedirectExceptionAndGetContent('accountContactAffiliations/default/createFromRelation');
     $accountContactAffiliation = AccountContactAffiliation::getAll();
     $this->assertEquals(1, count($accountContactAffiliation));
     $this->setGetArray(array('id' => $accountContactAffiliation[0]->id));
     $this->runControllerWithRedirectExceptionAndGetContent('accountContactAffiliations/default/edit');
 }