From 179af7c13a023a836fcb30df219edba84d9dbec0 Mon Sep 17 00:00:00 2001 From: Jack Wilkinson Date: Wed, 30 Jun 2021 23:59:56 +0100 Subject: [PATCH] Added ConfigFile tests --- tests/Config/ConfigFileTest.php | 147 ++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 tests/Config/ConfigFileTest.php diff --git a/tests/Config/ConfigFileTest.php b/tests/Config/ConfigFileTest.php new file mode 100644 index 000000000..6b804e9d2 --- /dev/null +++ b/tests/Config/ConfigFileTest.php @@ -0,0 +1,147 @@ +assertInstanceOf(ConfigFile::class, $config); + + $ast = $config->getAst(); + + $this->assertTrue(isset($ast[0]->expr->items[0]->key->value)); + $this->assertEquals('debug', $ast[0]->expr->items[0]->key->value); + } + + public function testWriteFile() + { + $filePath = __DIR__ . '/../fixtures/config/sample-config.php'; + $tmpFile = __DIR__ . '/../fixtures/config/temp-config.php'; + + $config = ConfigFile::read($filePath); + $config->write($tmpFile); + + $result = include $tmpFile; + $this->assertArrayHasKey('connections', $result); + $this->assertArrayHasKey('sqlite', $result['connections']); + $this->assertArrayHasKey('driver', $result['connections']['sqlite']); + $this->assertEquals('sqlite', $result['connections']['sqlite']['driver']); + + unlink($tmpFile); + } + + public function testWriteFileWithUpdates() + { + $filePath = __DIR__ . '/../fixtures/config/sample-config.php'; + $tmpFile = __DIR__ . '/../fixtures/config/temp-config.php'; + + $config = ConfigFile::read($filePath); + $config->set('connections.sqlite.driver', 'winter'); + $config->write($tmpFile); + + $result = include $tmpFile; + $this->assertArrayHasKey('connections', $result); + $this->assertArrayHasKey('sqlite', $result['connections']); + $this->assertArrayHasKey('driver', $result['connections']['sqlite']); + $this->assertEquals('winter', $result['connections']['sqlite']['driver']); + + unlink($tmpFile); + } + + public function testRender() + { + /* + * Rewrite a single level string + */ + $config = ConfigFile::read(__DIR__ . '/../fixtures/config/sample-config.php'); + $config->set('url', 'https://wintercms.com'); + $result = eval('?>' . $config->render()); + + $this->assertTrue(is_array($result)); + $this->assertArrayHasKey('url', $result); + $this->assertEquals('https://wintercms.com', $result['url']); + + /* + * Rewrite a second level string + */ + $config = ConfigFile::read(__DIR__ . '/../fixtures/config/sample-config.php'); + $config->set('memcached.host', '69.69.69.69'); + $result = eval('?>' . $config->render()); + + $this->assertArrayHasKey('memcached', $result); + $this->assertArrayHasKey('host', $result['memcached']); + $this->assertEquals('69.69.69.69', $result['memcached']['host']); + + /* + * Rewrite a third level string + */ + $config = ConfigFile::read(__DIR__ . '/../fixtures/config/sample-config.php'); + $config->set('connections.mysql.host', '127.0.0.1'); + $result = eval('?>' . $config->render()); + + $this->assertArrayHasKey('connections', $result); + $this->assertArrayHasKey('mysql', $result['connections']); + $this->assertArrayHasKey('host', $result['connections']['mysql']); + $this->assertEquals('127.0.0.1', $result['connections']['mysql']['host']); + + /* + * Test alternative quoting + */ + $config = ConfigFile::read(__DIR__ . '/../fixtures/config/sample-config.php'); + $config->set('timezone', 'The Fifth Dimension'); + $config->set('timezoneAgain', 'The "Sixth" Dimension'); + $result = eval('?>' . $config->render()); + + $this->assertArrayHasKey('timezone', $result); + $this->assertArrayHasKey('timezoneAgain', $result); + $this->assertEquals('The Fifth Dimension', $result['timezone']); + $this->assertEquals('The "Sixth" Dimension', $result['timezoneAgain']); + + /* + * Rewrite a boolean + */ + $config = ConfigFile::read(__DIR__ . '/../fixtures/config/sample-config.php'); + $config->set('debug', false) + ->set('debugAgain', true) + ->set('bullyIan', true) + ->set('booLeeIan', false) + ->set('memcached.weight', false) + ->set('connections.pgsql.password', true); + + $result = eval('?>' . $config->render()); + + $this->assertArrayHasKey('debug', $result); + $this->assertArrayHasKey('debugAgain', $result); + $this->assertArrayHasKey('bullyIan', $result); + $this->assertArrayHasKey('booLeeIan', $result); + $this->assertFalse($result['debug']); + $this->assertTrue($result['debugAgain']); + $this->assertTrue($result['bullyIan']); + $this->assertFalse($result['booLeeIan']); + + $this->assertArrayHasKey('memcached', $result); + $this->assertArrayHasKey('weight', $result['memcached']); + $this->assertFalse($result['memcached']['weight']); + + $this->assertArrayHasKey('connections', $result); + $this->assertArrayHasKey('pgsql', $result['connections']); + $this->assertArrayHasKey('password', $result['connections']['pgsql']); + $this->assertTrue($result['connections']['pgsql']['password']); + $this->assertEquals('', $result['connections']['sqlsrv']['password']); + + /* + * Rewrite an integer + */ + $config = ConfigFile::read(__DIR__ . '/../fixtures/config/sample-config.php'); + $config->set('aNumber', 69); + $result = eval('?>' . $config->render()); + + $this->assertArrayHasKey('aNumber', $result); + $this->assertEquals(69, $result['aNumber']); + } +}