X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=tests%2Fphpunit%2FCRM%2FContact%2FBAO%2FContactType%2FContactTypeTest.php;h=e726e82524b4edbf93750c1448e2ca21881c802f;hb=b5f3c53a4ec26aa368d070738e9333474e51b47f;hp=b6af1999903ef4303a0944809c1e244657654c45;hpb=54a618ca328b460a7b85d0489b561ae914a275a1;p=civicrm-core.git diff --git a/tests/phpunit/CRM/Contact/BAO/ContactType/ContactTypeTest.php b/tests/phpunit/CRM/Contact/BAO/ContactType/ContactTypeTest.php index b6af199990..e726e82524 100644 --- a/tests/phpunit/CRM/Contact/BAO/ContactType/ContactTypeTest.php +++ b/tests/phpunit/CRM/Contact/BAO/ContactType/ContactTypeTest.php @@ -1,4 +1,5 @@ $labelsub1, - 'name' => $labelsub1, - // Individual - 'parent_id' => 1, + 'label' => 'sub1_individual', + 'name' => 'sub1_individual', + 'parent_id:name' => 'Individual', 'is_active' => 1, ]; - $result = CRM_Contact_BAO_ContactType::add($params); - $this->subTypesIndividual[] = $params['name']; - $labelsub2 = 'sub2_individual' . substr(sha1(rand()), 0, 7); + $this->ids['ContactType'][] = ContactType::create()->setValues($params)->execute()->first()['id']; + $params = [ - 'label' => $labelsub2, - 'name' => $labelsub2, - // Individual - 'parent_id' => 1, + 'label' => 'sub2_individual', + 'name' => 'sub2_individual', + 'parent_id:name' => 'Individual', 'is_active' => 1, ]; - $result = CRM_Contact_BAO_ContactType::add($params); - $this->subTypesIndividual[] = $params['name']; - $labelsub = 'sub_organization' . substr(sha1(rand()), 0, 7); + $this->ids['ContactType'][] = ContactType::create()->setValues($params)->execute()->first()['id']; + $params = [ - 'label' => $labelsub, - 'name' => $labelsub, - // Organization - 'parent_id' => 3, + 'label' => 'sub_organization', + 'name' => 'sub_organization', + 'parent_id:name' => 'Organization', 'is_active' => 1, ]; - $result = CRM_Contact_BAO_ContactType::add($params); - $this->subTypesOrganization[] = $params['name']; - $labelhousehold = 'sub_household' . substr(sha1(rand()), 0, 7); + $this->ids['ContactType'][] = ContactType::create()->setValues($params)->execute()->first()['id']; + $params = [ - 'label' => $labelhousehold, - 'name' => $labelhousehold, - // Household - 'parent_id' => 2, + 'label' => 'sub_household', + 'name' => 'sub_household', + 'parent_id:name' => 'Household', 'is_active' => 1, ]; - $result = CRM_Contact_BAO_ContactType::add($params); - $this->subTypesHousehold[] = $params['name']; + $this->ids['ContactType'][] = (int) ContactType::create()->setValues($params)->execute()->first()['id']; } /** - * Test contactTypes() and subTypes() methods with valid data - * success expected + * Cleanup contact types. + * + * @throws \API_Exception + * @throws \Civi\API\Exception\UnauthorizedException */ - public function testGetMethods() { + public function tearDown() { + parent::tearDown(); + ContactType::delete()->addWhere('id', 'IN', $this->ids['ContactType'])->execute(); + } - // check all contact types - $contactTypes = ['Individual', 'Organization', 'Household']; - $result = CRM_Contact_BAO_ContactType::contactTypes('Individual'); - foreach ($contactTypes as $type) { - $this->assertEquals(in_array($type, $result), TRUE); - } + /** + * Test contactTypes() and subTypes() methods return correct contact types. + */ + public function testGetMethods() { + $result = CRM_Contact_BAO_ContactType::contactTypes(TRUE); + $this->assertEquals(array_keys($this->getExpectedContactTypes()), $result); // check for type:Individual $result = CRM_Contact_BAO_ContactType::subTypes('Individual'); - foreach ($result as $subtype) { - $subTypeName = in_array($subtype, $this->subTypesIndividual); - if (!empty($subTypeName)) { - $this->assertEquals($subTypeName, TRUE); - } - $this->assertEquals(in_array($subtype, $this->subTypesOrganization), FALSE); - $this->assertEquals(in_array($subtype, $this->subTypesHousehold), FALSE); - } + $this->assertEquals(array_keys($this->getExpectedContactSubTypes('Individual')), $result); + $this->assertEquals($this->getExpectedContactSubTypes('Individual'), CRM_Contact_BAO_ContactType::subTypeInfo('Individual')); // check for type:Organization $result = CRM_Contact_BAO_ContactType::subTypes('Organization'); - foreach ($result as $subtype) { - $this->assertEquals(in_array($subtype, $this->subTypesIndividual), FALSE); - $subTypeName = in_array($subtype, $this->subTypesOrganization); - if (!empty($subTypeName)) { - $this->assertEquals($subTypeName, TRUE); - } - $subTypeName = in_array($subTypeName, $this->subTypesHousehold); - if (empty($subTypeName)) { - $this->assertEquals($subTypeName, FALSE); - } - } + $this->assertEquals(array_keys($this->getExpectedContactSubTypes('Organization')), $result); + $this->assertEquals($this->getExpectedContactSubTypes('Organization'), CRM_Contact_BAO_ContactType::subTypeInfo('Organization')); // check for type:Household $result = CRM_Contact_BAO_ContactType::subTypes('Household'); - foreach ($result as $subtype) { - $this->assertEquals(in_array($subtype, $this->subTypesIndividual), FALSE); - $this->assertEquals(in_array($subtype, $this->subTypesOrganization), FALSE); - $this->assertEquals(in_array($subtype, $this->subTypesHousehold), TRUE); - } + $this->assertEquals(array_keys($this->getExpectedContactSubTypes('Household')), $result); + $this->assertEquals($this->getExpectedContactSubTypes('Household'), CRM_Contact_BAO_ContactType::subTypeInfo('Household')); - // check for all conatct types + // check for all contact types $result = CRM_Contact_BAO_ContactType::subTypes(); - foreach ($this->subTypesIndividual as $subtype) { - $this->assertEquals(in_array($subtype, $result), TRUE); - } - foreach ($this->subTypesOrganization as $subtype) { - $this->assertEquals(in_array($subtype, $result), TRUE); - } - foreach ($this->subTypesHousehold as $subtype) { - $this->assertEquals(in_array($subtype, $result), TRUE); - } + $subtypes = array_keys($this->getExpectedAllSubtypes()); + $this->assertEquals(sort($subtypes), sort($result)); + $this->assertEquals($this->getExpectedAllSubtypes(), CRM_Contact_BAO_ContactType::subTypeInfo()); + } /** @@ -126,6 +100,229 @@ class CRM_Contact_BAO_ContactType_ContactTypeTest extends CiviUnitTestCase { $this->assertEquals(empty($result), TRUE); } + /** + * Test function for getting contact types. + * + * @throws \API_Exception + */ + public function testContactTypeInfo() { + $blahType = ['is_active' => 0, 'name' => 'blah', 'label' => 'blah blah', 'parent_id:name' => 'Individual']; + $createdType = ContactType::create()->setValues($blahType)->execute()->first(); + $activeTypes = CRM_Contact_BAO_ContactType::contactTypeInfo(); + $expected = $this->getExpectedContactTypes(); + $this->assertEquals($expected, $activeTypes); + $allTypes = CRM_Contact_BAO_ContactType::contactTypeInfo(TRUE); + $expected['blah'] = [ + 'is_active' => FALSE, + 'name' => 'blah', + 'label' => 'blah blah', + 'id' => $createdType['id'], + 'parent_id' => 1, + 'is_reserved' => FALSE, + 'parent' => 'Individual', + 'parent_label' => 'Individual', + 'description' => NULL, + 'image_URL' => NULL, + ]; + $this->assertEquals($expected, $allTypes); + } + + /** + * Get all expected types. + * + * @return array + */ + public function getExpectedContactTypes() { + return [ + 'Individual' => + [ + 'id' => '1', + 'name' => 'Individual', + 'label' => 'Individual', + 'is_active' => TRUE, + 'is_reserved' => TRUE, + 'description' => NULL, + 'parent_id' => NULL, + 'parent' => NULL, + 'parent_label' => NULL, + 'image_URL' => NULL, + ], + 'Household' => + [ + 'id' => '2', + 'name' => 'Household', + 'label' => 'Household', + 'is_active' => TRUE, + 'is_reserved' => TRUE, + 'description' => NULL, + 'parent_id' => NULL, + 'parent' => NULL, + 'parent_label' => NULL, + 'image_URL' => NULL, + ], + 'Organization' => + [ + 'id' => '3', + 'name' => 'Organization', + 'label' => 'Organization', + 'is_active' => TRUE, + 'is_reserved' => TRUE, + 'description' => NULL, + 'parent_id' => NULL, + 'parent' => NULL, + 'parent_label' => NULL, + 'image_URL' => NULL, + ], + 'Student' => + [ + 'id' => 4, + 'name' => 'Student', + 'label' => 'Student', + 'parent_id' => 1, + 'is_active' => '1', + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Individual', + 'parent_label' => 'Individual', + 'image_URL' => NULL, + ], + 'Parent' => + [ + 'id' => 5, + 'name' => 'Parent', + 'label' => 'Parent', + 'parent_id' => 1, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Individual', + 'parent_label' => 'Individual', + 'image_URL' => NULL, + ], + 'Staff' => + [ + 'id' => 6, + 'name' => 'Staff', + 'label' => 'Staff', + 'parent_id' => 1, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Individual', + 'parent_label' => 'Individual', + 'image_URL' => NULL, + ], + 'Team' => + [ + 'id' => 7, + 'name' => 'Team', + 'label' => 'Team', + 'parent_id' => 3, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Organization', + 'parent_label' => 'Organization', + 'image_URL' => NULL, + ], + 'Sponsor' => + [ + 'id' => 8, + 'name' => 'Sponsor', + 'label' => 'Sponsor', + 'parent_id' => 3, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Organization', + 'parent_label' => 'Organization', + 'image_URL' => NULL, + ], + 'sub1_individual' => + [ + 'id' => $this->ids['ContactType'][0], + 'name' => 'sub1_individual', + 'label' => 'sub1_individual', + 'parent_id' => 1, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Individual', + 'parent_label' => 'Individual', + 'image_URL' => NULL, + ], + 'sub2_individual' => + [ + 'id' => $this->ids['ContactType'][1], + 'name' => 'sub2_individual', + 'label' => 'sub2_individual', + 'parent_id' => 1, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Individual', + 'parent_label' => 'Individual', + 'image_URL' => NULL, + ], + 'sub_organization' => + [ + 'id' => $this->ids['ContactType'][2], + 'name' => 'sub_organization', + 'label' => 'sub_organization', + 'parent_id' => 3, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Organization', + 'parent_label' => 'Organization', + 'image_URL' => NULL, + ], + 'sub_household' => + [ + 'id' => $this->ids['ContactType'][3], + 'name' => 'sub_household', + 'label' => 'sub_household', + 'parent_id' => 2, + 'is_active' => TRUE, + 'is_reserved' => FALSE, + 'description' => NULL, + 'parent' => 'Household', + 'parent_label' => 'Household', + 'image_URL' => NULL, + ], + ]; + } + + /** + * Get subtypes for all main types. + * + * @return array + */ + public function getExpectedAllSubtypes() { + return array_merge( + $this->getExpectedContactSubTypes('Individual'), + $this->getExpectedContactSubTypes('Household'), + $this->getExpectedContactSubTypes('Organization') + ); + } + + /** + * Get the expected subtypes of the given contact type. + * + * @param string $parentType + * + * @return array + */ + public function getExpectedContactSubTypes($parentType) { + $expected = $this->getExpectedContactTypes(); + foreach ($expected as $index => $values) { + if (($values['parent_label'] ?? '') !== $parentType) { + unset($expected[$index]); + } + } + return $expected; + } + /** * Test add() methods with valid data * success expected @@ -196,7 +393,7 @@ class CRM_Contact_BAO_ContactType_ContactTypeTest extends CiviUnitTestCase { 'is_active' => 1, ]; $result = CRM_Contact_BAO_ContactType::add($params); - $this->assertEquals($result, NULL, 'In line' . __LINE__); + $this->assertEquals($result, NULL); } /** @@ -223,7 +420,6 @@ class CRM_Contact_BAO_ContactType_ContactTypeTest extends CiviUnitTestCase { * Test del() with invalid data */ public function testDelInvalid() { - $del = CRM_Contact_BAO_ContactType::del(NULL); $this->assertEquals($del, FALSE); }