4 * Case Types support an optional forking mechanism wherein the local admin
5 * creates a custom DB-based definition that deviates from the file-based definition.
8 class CRM_Case_BAO_CaseTypeForkTest
extends CiviCaseTestCase
{
9 public function setUp() {
11 CRM_Core_ManagedEntities
::singleton(TRUE)->reconcile();
14 public function tearDown() {
16 CRM_Core_ManagedEntities
::singleton(TRUE)->reconcile();
21 * Edit the definition of ForkableCaseType.
23 public function testForkable() {
24 $caseTypeId = CRM_Core_DAO
::getFieldValue('CRM_Case_DAO_CaseType', 'ForkableCaseType', 'id', 'name');
25 $this->assertTrue(is_numeric($caseTypeId) && $caseTypeId > 0);
27 $this->assertDBNull('CRM_Case_BAO_CaseType', $caseTypeId, 'definition', 'id', "Should not have DB-based definition");
28 $this->assertTrue(CRM_Case_BAO_CaseType
::isForkable($caseTypeId));
29 $this->assertFalse(CRM_Case_BAO_CaseType
::isForked($caseTypeId));
31 $this->callAPISuccess('CaseType', 'create', array(
33 'definition' => array(
34 'activityTypes' => array(
35 array('name' => 'First act'),
36 array('name' => 'Second act'),
41 $this->assertTrue(CRM_Case_BAO_CaseType
::isForkable($caseTypeId));
42 $this->assertTrue(CRM_Case_BAO_CaseType
::isForked($caseTypeId));
43 $this->assertDBNotNull('CRM_Case_BAO_CaseType', $caseTypeId, 'definition', 'id', "Should not have DB-based definition");
45 $this->callAPISuccess('CaseType', 'create', array(
47 'definition' => 'null',
50 $this->assertDBNull('CRM_Case_BAO_CaseType', $caseTypeId, 'definition', 'id', "Should not have DB-based definition");
51 $this->assertTrue(CRM_Case_BAO_CaseType
::isForkable($caseTypeId));
52 $this->assertFalse(CRM_Case_BAO_CaseType
::isForked($caseTypeId));
56 * Attempt to edit the definition of UnforkableCaseType. This fails.
58 public function testUnforkable() {
59 $caseTypeId = CRM_Core_DAO
::getFieldValue('CRM_Case_DAO_CaseType', 'UnforkableCaseType', 'id', 'name');
60 $this->assertTrue(is_numeric($caseTypeId) && $caseTypeId > 0);
61 $this->assertDBNull('CRM_Case_BAO_CaseType', $caseTypeId, 'definition', 'id', "Should not have DB-based definition");
63 $this->assertFalse(CRM_Case_BAO_CaseType
::isForkable($caseTypeId));
64 $this->assertFalse(CRM_Case_BAO_CaseType
::isForked($caseTypeId));
66 $this->callAPISuccess('CaseType', 'create', array(
68 'definition' => array(
69 'activityTypes' => array(
70 array('name' => 'First act'),
71 array('name' => 'Second act'),
76 $this->assertFalse(CRM_Case_BAO_CaseType
::isForkable($caseTypeId));
77 $this->assertFalse(CRM_Case_BAO_CaseType
::isForked($caseTypeId));
78 $this->assertDBNull('CRM_Case_BAO_CaseType', $caseTypeId, 'definition', 'id', "Should not have DB-based definition");
83 * @see \CRM_Utils_Hook::caseTypes
85 public function hook_caseTypes(&$caseTypes) {
86 $caseTypes['ForkableCaseType'] = array(
87 'module' => 'civicrm',
88 'name' => 'ForkableCaseType',
89 'file' => __DIR__
. '/ForkableCaseType.xml',
91 $caseTypes['UnforkableCaseType'] = array(
92 'module' => 'civicrm',
93 'name' => 'UnforkableCaseType',
94 'file' => __DIR__
. '/UnforkableCaseType.xml',