X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2FUpdater%2FUpdaterTest.php;h=0d0ad92220cac1fef8fc954e645066854c7f555a;hb=06eec9bf764662cd328627247a1f43e4abd3c5ad;hp=d865066b99f9aa923bafbee30f9ce90b264de9d8;hpb=07c2f73543b358d39b3751c8542966794f28db03;p=github%2Fshaarli%2FShaarli.git diff --git a/tests/Updater/UpdaterTest.php b/tests/Updater/UpdaterTest.php index d865066b..0d0ad922 100644 --- a/tests/Updater/UpdaterTest.php +++ b/tests/Updater/UpdaterTest.php @@ -1,5 +1,6 @@ 'login', - 'hash' => 'hash', - 'salt' => 'salt', - 'timezone' => 'Europe/Paris', - 'title' => 'title', - 'titleLink' => 'titleLink', - 'redirector' => '', - 'disablesessionprotection' => false, - 'privateLinkByDefault' => false, - 'config' => array( - 'CONFIG_FILE' => 'tests/Updater/config.php', - 'DATADIR' => 'tests/Updater', - 'PAGECACHE' => 'sandbox/pagecache', - 'config1' => 'config1data', - 'config2' => 'config2data', - ) - ); - } + protected $conf; /** - * Executed after each test. - * - * @return void + * Executed before each test. */ - public function tearDown() + public function setUp() { - if (is_file(self::$configFields['config']['CONFIG_FILE'])) { - unlink(self::$configFields['config']['CONFIG_FILE']); - } - - if (is_file(self::$configFields['config']['DATADIR'] . '/options.php')) { - unlink(self::$configFields['config']['DATADIR'] . '/options.php'); - } - - if (is_file(self::$configFields['config']['DATADIR'] . '/updates.json')) { - unlink(self::$configFields['config']['DATADIR'] . '/updates.json'); - } + $this->conf = new ConfigManager(self::$configFile); } /** @@ -69,9 +38,10 @@ class UpdaterTest extends PHPUnit_Framework_TestCase public function testReadEmptyUpdatesFile() { $this->assertEquals(array(), read_updates_file('')); - $updatesFile = self::$configFields['config']['DATADIR'] . '/updates.json'; + $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; touch($updatesFile); $this->assertEquals(array(), read_updates_file($updatesFile)); + unlink($updatesFile); } /** @@ -79,7 +49,7 @@ class UpdaterTest extends PHPUnit_Framework_TestCase */ public function testReadWriteUpdatesFile() { - $updatesFile = self::$configFields['config']['DATADIR'] . '/updates.json'; + $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; $updatesMethods = array('m1', 'm2', 'm3'); write_updates_file($updatesFile, $updatesMethods); @@ -91,6 +61,7 @@ class UpdaterTest extends PHPUnit_Framework_TestCase write_updates_file($updatesFile, $updatesMethods); $readMethods = read_updates_file($updatesFile); $this->assertEquals($readMethods, $updatesMethods); + unlink($updatesFile); } /** @@ -112,10 +83,15 @@ class UpdaterTest extends PHPUnit_Framework_TestCase */ public function testWriteUpdatesFileNotWritable() { - $updatesFile = self::$configFields['config']['DATADIR'] . '/updates.json'; + $updatesFile = $this->conf->get('resource.data_dir') . '/updates.txt'; touch($updatesFile); chmod($updatesFile, 0444); - @write_updates_file($updatesFile, array('test')); + try { + @write_updates_file($updatesFile, array('test')); + } catch (Exception $e) { + unlink($updatesFile); + throw $e; + } } /** @@ -131,10 +107,10 @@ class UpdaterTest extends PHPUnit_Framework_TestCase 'updateMethodDummy3', 'updateMethodException', ); - $updater = new DummyUpdater($updates, array(), array(), true); + $updater = new DummyUpdater($updates, array(), $this->conf, true); $this->assertEquals(array(), $updater->update()); - $updater = new DummyUpdater(array(), array(), array(), false); + $updater = new DummyUpdater(array(), array(), $this->conf, false); $this->assertEquals(array(), $updater->update()); } @@ -149,7 +125,7 @@ class UpdaterTest extends PHPUnit_Framework_TestCase 'updateMethodDummy2', 'updateMethodDummy3', ); - $updater = new DummyUpdater($updates, array(), array(), true); + $updater = new DummyUpdater($updates, array(), $this->conf, true); $this->assertEquals($expectedUpdates, $updater->update()); } @@ -165,7 +141,7 @@ class UpdaterTest extends PHPUnit_Framework_TestCase ); $expectedUpdate = array('updateMethodDummy2'); - $updater = new DummyUpdater($updates, array(), array(), true); + $updater = new DummyUpdater($updates, array(), $this->conf, true); $this->assertEquals($expectedUpdate, $updater->update()); } @@ -182,7 +158,7 @@ class UpdaterTest extends PHPUnit_Framework_TestCase 'updateMethodDummy3', ); - $updater = new DummyUpdater($updates, array(), array(), true); + $updater = new DummyUpdater($updates, array(), $this->conf, true); $updater->update(); } @@ -195,26 +171,28 @@ class UpdaterTest extends PHPUnit_Framework_TestCase */ public function testUpdateMergeDeprecatedConfig() { - // init - writeConfig(self::$configFields, true); - $configCopy = self::$configFields; - $invert = !$configCopy['privateLinkByDefault']; - $configCopy['privateLinkByDefault'] = $invert; + $this->conf->setConfigFile('tests/utils/config/configPhp'); + $this->conf->reset(); - // Use writeConfig to create a options.php - $configCopy['config']['CONFIG_FILE'] = 'tests/Updater/options.php'; - writeConfig($configCopy, true); + $optionsFile = 'tests/Updater/options.php'; + $options = 'assertTrue(is_file($configCopy['config']['CONFIG_FILE'])); + // tmp config file. + $this->conf->setConfigFile('tests/Updater/config'); // merge configs - $updater = new Updater(array(), self::$configFields, array(), true); + $updater = new Updater(array(), array(), $this->conf, true); + // This writes a new config file in tests/Updater/config.php $updater->updateMethodMergeDeprecatedConfigFile(); // make sure updated field is changed - include self::$configFields['config']['CONFIG_FILE']; - $this->assertEquals($invert, $GLOBALS['privateLinkByDefault']); - $this->assertFalse(is_file($configCopy['config']['CONFIG_FILE'])); + $this->conf->reload(); + $this->assertTrue($this->conf->get('privacy.default_private_links')); + $this->assertFalse(is_file($optionsFile)); + // Delete the generated file. + unlink($this->conf->getConfigFileExt()); } /** @@ -222,23 +200,91 @@ class UpdaterTest extends PHPUnit_Framework_TestCase */ public function testMergeDeprecatedConfigNoFile() { - writeConfig(self::$configFields, true); - - $updater = new Updater(array(), self::$configFields, array(), true); + $updater = new Updater(array(), array(), $this->conf, true); $updater->updateMethodMergeDeprecatedConfigFile(); - include self::$configFields['config']['CONFIG_FILE']; - $this->assertEquals(self::$configFields['login'], $GLOBALS['login']); + $this->assertEquals('root', $this->conf->get('credentials.login')); } + /** + * Test renameDashTags update method. + */ public function testRenameDashTags() { $refDB = new ReferenceLinkDB(); $refDB->write(self::$testDatastore); $linkDB = new LinkDB(self::$testDatastore, true, false); - $this->assertEmpty($linkDB->filter(LinkFilter::$FILTER_TAG, 'exclude')); - $updater = new Updater(array(), self::$configFields, $linkDB, true); + $this->assertEmpty($linkDB->filterSearch(array('searchtags' => 'exclude'))); + $updater = new Updater(array(), $linkDB, $this->conf, true); $updater->updateMethodRenameDashTags(); - $this->assertNotEmpty($linkDB->filter(LinkFilter::$FILTER_TAG, 'exclude')); + $this->assertNotEmpty($linkDB->filterSearch(array('searchtags' => 'exclude'))); + } + + /** + * Convert old PHP config file to JSON config. + */ + public function testConfigToJson() + { + $configFile = 'tests/utils/config/configPhp'; + $this->conf->setConfigFile($configFile); + $this->conf->reset(); + + // The ConfigIO is initialized with ConfigPhp. + $this->assertTrue($this->conf->getConfigIO() instanceof ConfigPhp); + + $updater = new Updater(array(), array(), $this->conf, false); + $done = $updater->updateMethodConfigToJson(); + $this->assertTrue($done); + + // The ConfigIO has been updated to ConfigJson. + $this->assertTrue($this->conf->getConfigIO() instanceof ConfigJson); + $this->assertTrue(file_exists($this->conf->getConfigFileExt())); + + // Check JSON config data. + $this->conf->reload(); + $this->assertEquals('root', $this->conf->get('credentials.login')); + $this->assertEquals('lala', $this->conf->get('redirector.url')); + $this->assertEquals('data/datastore.php', $this->conf->get('resource.datastore')); + $this->assertEquals('1', $this->conf->get('plugins.WALLABAG_VERSION')); + + rename($configFile . '.save.php', $configFile . '.php'); + unlink($this->conf->getConfigFileExt()); + } + + /** + * Launch config conversion update with an existing JSON file => nothing to do. + */ + public function testConfigToJsonNothingToDo() + { + $filetime = filemtime($this->conf->getConfigFileExt()); + $updater = new Updater(array(), array(), $this->conf, false); + $done = $updater->updateMethodConfigToJson(); + $this->assertTrue($done); + $expected = filemtime($this->conf->getConfigFileExt()); + $this->assertEquals($expected, $filetime); + } + + /** + * Test escapeUnescapedConfig with valid data. + */ + public function testEscapeConfig() + { + $sandbox = 'sandbox/config'; + copy(self::$configFile .'.json.php', $sandbox .'.json.php'); + $this->conf = new ConfigManager($sandbox); + $title = ''; + $headerLink = ''; + $redirectorUrl = ''; + $this->conf->set('general.title', $title); + $this->conf->set('general.header_link', $headerLink); + $this->conf->set('redirector.url', $redirectorUrl); + $updater = new Updater(array(), array(), $this->conf, true); + $done = $updater->updateMethodEscapeUnescapedConfig(); + $this->assertTrue($done); + $this->conf->reload(); + $this->assertEquals(escape($title), $this->conf->get('general.title')); + $this->assertEquals(escape($headerLink), $this->conf->get('general.header_link')); + $this->assertEquals(escape($redirectorUrl), $this->conf->get('redirector.url')); + unlink($sandbox .'.json.php'); } }