4 class SettingsManagerTest
extends \CiviUnitTestCase
{
6 protected $domainDefaults;
7 protected $contactDefaults;
9 protected $origSetting;
11 protected function setUp() {
12 $this->origSetting
= $GLOBALS['civicrm_setting'];
15 $this->useTransaction(TRUE);
17 $this->domainDefaults
= array(
22 'myabspath' => '/tmp/bar',
23 'myrelurl' => 'sites/foo',
24 'myabsurl' => 'http://example.com/bar',
26 $this->contactDefaults
= array(
31 $this->mandates
= array(
32 'Mailing Preferences' => array(
41 public function tearDown() {
42 $GLOBALS['civicrm_setting'] = $this->origSetting
;
47 * Test mingled reads/writes of settings for two different domains.
49 public function testTwoDomains() {
50 $da = \CRM_Core_DAO
::createTestObject('CRM_Core_DAO_Domain');
51 $db = \CRM_Core_DAO
::createTestObject('CRM_Core_DAO_Domain');
53 $manager = $this->createManager()->useDefaults();
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'));
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'));
66 $managerRedux = $this->createManager()->useDefaults();
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'));
75 * Test mingled reads/writes of settings for two different contacts.
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');
82 $manager = $this->createManager()->useDefaults();
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'));
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'));
95 // Read settings from freshly initialized objects.
96 $manager = $this->createManager()->useDefaults();
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'));
104 public function testCrossOver() {
105 $domain = \CRM_Core_DAO
::createTestObject('CRM_Core_DAO_Domain');
106 $contact = \CRM_Core_DAO
::createTestObject('CRM_Contact_DAO_Contact');
108 $manager = $this->createManager()->useDefaults();
110 // Store different values for the 'monkeywrench' setting on domain and contact
112 $domainSettings = $manager->getBagByDomain($domain->id
);
113 $domainSettings->set('monkeywrench', 'from domain');
114 $this->assertEquals('from domain', $domainSettings->get('monkeywrench'));
116 $contactSettings = $manager->getBagByContact($domain->id
, $contact->id
);
117 $contactSettings->set('monkeywrench', 'from contact');
118 $this->assertEquals('from contact', $contactSettings->get('monkeywrench'));
120 // Read settings from freshly initialized objects.
121 $manager = $this->createManager()->useDefaults();
123 $domainSettings = $manager->getBagByDomain($domain->id
);
124 $this->assertEquals('from domain', $domainSettings->get('monkeywrench'));
126 $contactSettings = $manager->getBagByContact($domain->id
, $contact->id
);
127 $this->assertEquals('from contact', $contactSettings->get('monkeywrench'));
131 * @return SettingsManager
133 protected function createManager() {
134 $cache = new \
CRM_Utils_Cache_Arraycache(array());
135 $cache->set('defaults_domain', $this->domainDefaults
);
136 $cache->set('defaults_contact', $this->contactDefaults
);
137 foreach ($this->mandates
as $entity => $keyValues) {
138 foreach ($keyValues as $k => $v) {
139 $GLOBALS['civicrm_setting'][$entity][$k] = $v;
142 $manager = new SettingsManager($cache);