Merge pull request #13731 from eileenmcnaughton/5.11
[civicrm-core.git] / tests / phpunit / CRM / Case / BAO / CaseTypeForkTest.php
1 <?php
2
3 /**
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.
6 * @group headless
7 */
8 class CRM_Case_BAO_CaseTypeForkTest extends CiviCaseTestCase {
9 public function setUp() {
10 parent::setUp();
11 CRM_Core_ManagedEntities::singleton(TRUE)->reconcile();
12 }
13
14 public function tearDown() {
15 parent::tearDown();
16 CRM_Core_ManagedEntities::singleton(TRUE)->reconcile();
17 }
18
19
20 /**
21 * Edit the definition of ForkableCaseType.
22 */
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);
26
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));
30
31 $this->callAPISuccess('CaseType', 'create', array(
32 'id' => $caseTypeId,
33 'definition' => array(
34 'activityTypes' => array(
35 array('name' => 'First act'),
36 array('name' => 'Second act'),
37 ),
38 ),
39 ));
40
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");
44
45 $this->callAPISuccess('CaseType', 'create', array(
46 'id' => $caseTypeId,
47 'definition' => 'null',
48 ));
49
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));
53 }
54
55 /**
56 * Attempt to edit the definition of UnforkableCaseType. This fails.
57 */
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");
62
63 $this->assertFalse(CRM_Case_BAO_CaseType::isForkable($caseTypeId));
64 $this->assertFalse(CRM_Case_BAO_CaseType::isForked($caseTypeId));
65
66 $this->callAPISuccess('CaseType', 'create', array(
67 'id' => $caseTypeId,
68 'definition' => array(
69 'activityTypes' => array(
70 array('name' => 'First act'),
71 array('name' => 'Second act'),
72 ),
73 ),
74 ));
75
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");
79 }
80
81 /**
82 * @param $caseTypes
83 * @see \CRM_Utils_Hook::caseTypes
84 */
85 public function hook_caseTypes(&$caseTypes) {
86 $caseTypes['ForkableCaseType'] = array(
87 'module' => 'civicrm',
88 'name' => 'ForkableCaseType',
89 'file' => __DIR__ . '/ForkableCaseType.xml',
90 );
91 $caseTypes['UnforkableCaseType'] = array(
92 'module' => 'civicrm',
93 'name' => 'UnforkableCaseType',
94 'file' => __DIR__ . '/UnforkableCaseType.xml',
95 );
96 }
97
98 }