Commit | Line | Data |
---|---|---|
3a84c0ab TO |
1 | <?php |
2 | namespace Civi\Core; | |
3 | ||
3a84c0ab TO |
4 | class SettingsManagerTest extends \CiviUnitTestCase { |
5 | ||
6 | protected $domainDefaults; | |
7 | protected $contactDefaults; | |
8 | protected $mandates; | |
8eb5d071 | 9 | protected $origSetting; |
3a84c0ab TO |
10 | |
11 | protected function setUp() { | |
8eb5d071 TO |
12 | $this->origSetting = $GLOBALS['civicrm_setting']; |
13 | ||
3a84c0ab TO |
14 | parent::setUp(); |
15 | $this->useTransaction(TRUE); | |
16 | ||
9099cab3 | 17 | $this->domainDefaults = [ |
3a84c0ab TO |
18 | 'd1' => 'alpha', |
19 | 'd2' => 'beta', | |
20 | 'd3' => 'gamma', | |
9fd040ae TO |
21 | 'myrelpath' => 'foo', |
22 | 'myabspath' => '/tmp/bar', | |
23 | 'myrelurl' => 'sites/foo', | |
24 | 'myabsurl' => 'http://example.com/bar', | |
9099cab3 CW |
25 | ]; |
26 | $this->contactDefaults = [ | |
3a84c0ab TO |
27 | 'c1' => 'alpha', |
28 | 'c2' => 'beta', | |
29 | 'c3' => 'gamma', | |
9099cab3 CW |
30 | ]; |
31 | $this->mandates = [ | |
32 | 'Mailing Preferences' => [ | |
3a84c0ab | 33 | 'd3' => 'GAMMA!', |
9099cab3 CW |
34 | ], |
35 | 'contact' => [ | |
3a84c0ab | 36 | 'c3' => 'GAMMA MAN!', |
9099cab3 CW |
37 | ], |
38 | ]; | |
3a84c0ab TO |
39 | } |
40 | ||
8eb5d071 TO |
41 | public function tearDown() { |
42 | $GLOBALS['civicrm_setting'] = $this->origSetting; | |
43 | parent::tearDown(); | |
44 | } | |
45 | ||
3a84c0ab TO |
46 | /** |
47 | * Test mingled reads/writes of settings for two different domains. | |
48 | */ | |
49 | public function testTwoDomains() { | |
50 | $da = \CRM_Core_DAO::createTestObject('CRM_Core_DAO_Domain'); | |
51 | $db = \CRM_Core_DAO::createTestObject('CRM_Core_DAO_Domain'); | |
52 | ||
5dbaf8de | 53 | $manager = $this->createManager()->useDefaults(); |
3a84c0ab TO |
54 | |
55 | $daSettings = $manager->getBagByDomain($da->id); | |
56 | $daSettings->set('d1', 'un'); | |
57 | $this->assertEquals('un', $daSettings->get('d1')); | |
58 | $this->assertEquals('beta', $daSettings->get('d2')); | |
59 | $this->assertEquals('GAMMA!', $daSettings->get('d3')); | |
60 | ||
61 | $dbSettings = $manager->getBagByDomain($db->id); | |
62 | $this->assertEquals('alpha', $dbSettings->get('d1')); | |
63 | $this->assertEquals('beta', $dbSettings->get('d2')); | |
64 | $this->assertEquals('GAMMA!', $dbSettings->get('d3')); | |
65 | ||
5dbaf8de | 66 | $managerRedux = $this->createManager()->useDefaults(); |
3a84c0ab TO |
67 | |
68 | $daSettingsRedux = $managerRedux->getBagByDomain($da->id); | |
69 | $this->assertEquals('un', $daSettingsRedux->get('d1')); | |
70 | $this->assertEquals('beta', $daSettingsRedux->get('d2')); | |
71 | $this->assertEquals('GAMMA!', $daSettingsRedux->get('d3')); | |
72 | } | |
73 | ||
74 | /** | |
75 | * Test mingled reads/writes of settings for two different contacts. | |
76 | */ | |
77 | public function testTwoContacts() { | |
78 | $domain = \CRM_Core_DAO::createTestObject('CRM_Core_DAO_Domain'); | |
79 | $ca = \CRM_Core_DAO::createTestObject('CRM_Contact_DAO_Contact'); | |
80 | $cb = \CRM_Core_DAO::createTestObject('CRM_Contact_DAO_Contact'); | |
81 | ||
5dbaf8de | 82 | $manager = $this->createManager()->useDefaults(); |
3a84c0ab TO |
83 | |
84 | $caSettings = $manager->getBagByContact($domain->id, $ca->id); | |
85 | $caSettings->set('c1', 'un'); | |
86 | $this->assertEquals('un', $caSettings->get('c1')); | |
87 | $this->assertEquals('beta', $caSettings->get('c2')); | |
88 | $this->assertEquals('GAMMA MAN!', $caSettings->get('c3')); | |
89 | ||
90 | $cbSettings = $manager->getBagByContact($domain->id, $cb->id); | |
91 | $this->assertEquals('alpha', $cbSettings->get('c1')); | |
92 | $this->assertEquals('beta', $cbSettings->get('c2')); | |
93 | $this->assertEquals('GAMMA MAN!', $cbSettings->get('c3')); | |
94 | ||
95 | // Read settings from freshly initialized objects. | |
5dbaf8de | 96 | $manager = $this->createManager()->useDefaults(); |
3a84c0ab TO |
97 | |
98 | $caSettingsRedux = $manager->getBagByContact($domain->id, $ca->id); | |
99 | $this->assertEquals('un', $caSettingsRedux->get('c1')); | |
100 | $this->assertEquals('beta', $caSettingsRedux->get('c2')); | |
101 | $this->assertEquals('GAMMA MAN!', $caSettingsRedux->get('c3')); | |
102 | } | |
103 | ||
104 | public function testCrossOver() { | |
105 | $domain = \CRM_Core_DAO::createTestObject('CRM_Core_DAO_Domain'); | |
106 | $contact = \CRM_Core_DAO::createTestObject('CRM_Contact_DAO_Contact'); | |
107 | ||
5dbaf8de | 108 | $manager = $this->createManager()->useDefaults(); |
3a84c0ab TO |
109 | |
110 | // Store different values for the 'monkeywrench' setting on domain and contact | |
111 | ||
112 | $domainSettings = $manager->getBagByDomain($domain->id); | |
113 | $domainSettings->set('monkeywrench', 'from domain'); | |
114 | $this->assertEquals('from domain', $domainSettings->get('monkeywrench')); | |
115 | ||
116 | $contactSettings = $manager->getBagByContact($domain->id, $contact->id); | |
117 | $contactSettings->set('monkeywrench', 'from contact'); | |
118 | $this->assertEquals('from contact', $contactSettings->get('monkeywrench')); | |
119 | ||
120 | // Read settings from freshly initialized objects. | |
5dbaf8de | 121 | $manager = $this->createManager()->useDefaults(); |
3a84c0ab TO |
122 | |
123 | $domainSettings = $manager->getBagByDomain($domain->id); | |
124 | $this->assertEquals('from domain', $domainSettings->get('monkeywrench')); | |
125 | ||
126 | $contactSettings = $manager->getBagByContact($domain->id, $contact->id); | |
127 | $this->assertEquals('from contact', $contactSettings->get('monkeywrench')); | |
128 | } | |
129 | ||
130 | /** | |
131 | * @return SettingsManager | |
132 | */ | |
133 | protected function createManager() { | |
9099cab3 | 134 | $cache = new \CRM_Utils_Cache_Arraycache([]); |
12eaada5 TO |
135 | $cache->set('defaults_domain', $this->domainDefaults); |
136 | $cache->set('defaults_contact', $this->contactDefaults); | |
8eb5d071 TO |
137 | foreach ($this->mandates as $entity => $keyValues) { |
138 | foreach ($keyValues as $k => $v) { | |
139 | $GLOBALS['civicrm_setting'][$entity][$k] = $v; | |
140 | } | |
141 | } | |
142 | $manager = new SettingsManager($cache); | |
3a84c0ab TO |
143 | return $manager; |
144 | } | |
145 | ||
b9ef583c SL |
146 | /** |
147 | * Test passing in an array to Civi::settings facade | |
148 | */ | |
149 | public function testArraySetting() { | |
150 | $domain = \CRM_Core_DAO::createTestObject('CRM_Core_DAO_Domain'); | |
151 | ||
152 | $manager = $this->createManager()->useDefaults(); | |
153 | $dSettings = $manager->getBagByDomain($domain->id); | |
154 | $dSettings->set('test_setting', ['hello' => 'World']); | |
155 | $test_setting = $dSettings->get('test_setting'); | |
156 | $this->assertEquals(['hello' => 'World'], $test_setting); | |
157 | } | |
158 | ||
3a84c0ab | 159 | } |