Merge pull request #17197 from eileenmcnaughton/act_r_test
[civicrm-core.git] / tests / phpunit / Civi / Core / SettingsBagTest.php
index 3e2e6811eade353aa17289bc6d77f28cacd30e2f..6271337b29c090d63fca864c992ec3fa863d2342 100644 (file)
@@ -11,7 +11,7 @@ class SettingsBagTest extends \CiviUnitTestCase {
     parent::setUp();
     $this->useTransaction(TRUE);
 
-    $this->mandates = array();
+    $this->mandates = [];
   }
 
   public function tearDown() {
@@ -30,4 +30,50 @@ class SettingsBagTest extends \CiviUnitTestCase {
     $this->assertEquals(0, $settingsBag->get('enable_innodb_fts'));
   }
 
+  /**
+   * The setting "contribution_invoice_settings" is actually a virtual value built on other settings.
+   * Check that various updates work as expected.
+   */
+  public function testVirtualContributionSetting_explicit() {
+    $s = \Civi::settings();
+
+    $this->assertEquals(10, $s->get('contribution_invoice_settings')['due_date']);
+    $this->assertEquals(10, $s->get('invoice_due_date'));
+    $this->assertEquals(NULL, $s->getExplicit('invoice_due_date'));
+
+    $s->set('invoice_due_date', 20);
+    $this->assertEquals(20, $s->get('contribution_invoice_settings')['due_date']);
+    $this->assertEquals(20, $s->get('invoice_due_date'));
+    $this->assertEquals(20, $s->getExplicit('invoice_due_date'));
+
+    $s->set('contribution_invoice_settings', array_merge($s->get('contribution_invoice_settings'), [
+      'due_date' => 30,
+    ]));
+    $this->assertEquals(30, $s->get('contribution_invoice_settings')['due_date']);
+    $this->assertEquals(30, $s->get('invoice_due_date'));
+    $this->assertEquals(30, $s->getExplicit('invoice_due_date'));
+
+    $s->revert('invoice_due_date');
+    $this->assertEquals(10, $s->get('contribution_invoice_settings')['due_date']);
+    $this->assertEquals(10, $s->get('invoice_due_date'));
+    $this->assertEquals(NULL, $s->getExplicit('invoice_due_date'));
+  }
+
+  /**
+   * The setting "contribution_invoice_settings" is actually a virtual value built on other settings.
+   * Check that mandatory values ($civicrm_settings) are respected.
+   */
+  public function testVirtualContributionSetting_mandatory() {
+    $s = \Civi::settings();
+    $this->assertEquals(10, $s->get('contribution_invoice_settings')['due_date']);
+    $this->assertEquals(10, $s->get('invoice_due_date'));
+    $this->assertEquals(NULL, $s->getExplicit('invoice_due_date'));
+
+    $s->loadMandatory(['invoice_due_date' => 30]);
+
+    $this->assertEquals(30, $s->get('contribution_invoice_settings')['due_date']);
+    $this->assertEquals(30, $s->get('invoice_due_date'));
+    $this->assertEquals(NULL, $s->getExplicit('invoice_due_date'));
+  }
+
 }