backend1 = $this->createSettings('MySection1'); $this->backend2 = $this->createSettings('MySection2'); $this->backend3 = $this->createSettings('MySection3'); $this->allBackends = array($this->backend1, $this->backend2, $this->backend3); } private function createSettings($plugin) { return new Config($plugin); } public function testConstructShouldThrowAnExceptionIfSectionIsEmpty() { $this->expectException(\Exception::class); $this->expectExceptionMessage('No section given'); $this->createSettings(''); } public function testLoadShouldNotHaveAnySettingsByDefault() { $this->assertSame(array(), $this->backend1->load()); $this->assertSame(array(), $this->backend2->load()); $this->assertSame(array(), $this->backend3->load()); } public function testGetStorageIdShouldIncludePluginNameAndLogin() { $this->assertSame('Config_MySection1', $this->backend1->getStorageId()); $this->assertSame('Config_MySection2', $this->backend2->getStorageId()); $this->assertSame('Config_MySection3', $this->backend3->getStorageId()); } public function testSaveShouldOnlySaveForSpecificPluginAndIdSite() { $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => 'val'); $this->backend1->save($value1); $this->assertSame($value1, $this->backend1->load()); $this->assertSame(array(), $this->backend2->load()); $this->assertSame(array(), $this->backend3->load()); $value2 = $this->getExampleValues(); $this->backend2->save($value2); $this->assertSame($value1, $this->backend1->load()); $this->assertSame($value2, $this->backend2->load()); $this->assertSame(array(), $this->backend3->load()); $value3 = $this->getExampleValues(); $this->backend3->save($value3); $this->assertSame($value1, $this->backend1->load()); $this->assertSame($value2, $this->backend2->load()); $this->assertSame($value3, $this->backend3->load()); } public function testDeleteShouldDeleteAllValuesForGivenSection() { $values = array(); foreach ($this->allBackends as $index => $backend) { $values[$index] = $this->getExampleValues(); $backend->save($values[$index]); $this->assertSame($values[$index], $backend->load()); } foreach ($this->allBackends as $index => $backend) { $backend->delete(); $values[$index] = array(); // we make sure the values for all others are still set and only the current one was deleted foreach ($this->allBackends as $j => $backend2) { $this->assertSame($values[$j], $backend2->load()); } } } public function testSaveDuplicateValuesShouldBeOverwritten() { $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => 'val'); $this->backend1->save($value1); $this->assertSame($value1, $this->backend1->load()); $value2 = array('mytest' => 'test2', 'Mysetting2' => 'val', 'Mysetting1' => 'valueNew'); $this->backend1->save($value2); $this->assertEquals($value2, $this->backend1->load()); } public function testSaveNoLongerExistingValuesShouldNotBeRemoved() { $value = $this->saveValueForAllBackends(); // overwrite for backend 3 $value2 = array('mytest' => 'test2', 'Mysetting1' => 'valueNew'); $this->backend3->save($value2); $expectedNew = $value2; $expectedNew['Mysetting2'] = 'val'; // should not delete no longer existing values $this->assertEquals($expectedNew, $this->backend3->load()); // make sure other backends remain unchanged foreach ($this->allBackends as $backend) { if ($backend !== $this->backend3) { $this->assertSame($value, $backend->load()); } } } public function testSaveLoadShouldBeAbleToSaveAndLoadArrayValues() { $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => array('val', 'val7', 'val5')); $this->backend3->save($value1); $this->assertEquals($value1, $this->backend3->load()); } public function testSaveLoadShouldBeAbleToSaveAndLoadArrayValuesOnlyOneKey() { $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => array('val')); $this->backend3->save($value1); $value1 = array('Mysetting1' => 'value1', 'Mysetting2' => array('val')); $this->assertEquals($value1, $this->backend3->load()); } public function testSaveShouldBeAbleToSaveBoolValues() { $value1 = array('Mysetting1' => true, 'Mysetting2' => array('val', 'val7', false, true, 'val5')); $this->backend3->save($value1); $value1 = array('Mysetting1' => '1', 'Mysetting2' => array('val', 'val7', false, true, 'val5')); $this->assertEquals($value1, $this->backend3->load()); } public function testSaveShouldNotIgnoreNullValues() { $value1 = array('Mysetting1' => true, 'MySetting3' => null, 'Mysetting2' => array('val', null, true, 'val5')); $this->backend3->save($value1); $value1 = array('Mysetting1' => '1', 'Mysetting2' => array('val', null, true, 'val5'), 'MySetting3' => null); $this->assertEquals($value1, $this->backend3->load()); } private function saveValueForAllBackends() { $value = array('Mysetting1' => 'value1', 'Mysetting2' => 'val'); foreach ($this->allBackends as $backend) { $backend->save($value); $this->assertSame($value, $backend->load()); } return $value; } private function getExampleValues() { return array('Mysetting3' => 'value3', 'Mysetting4' . rand(4, 99) => 'val' . rand(0, 10)); } }