X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=inline;f=tests%2FUpdater%2FUpdaterTest.php;h=c4a6e7ef4fee86c9634e9aaff4cfdc7f6f8d03d7;hb=refs%2Ftags%2Fv0.10.3;hp=4948fe52d20ec1e39ec30b5eb5f39633f70880d5;hpb=9cf93bcfc53c36e0dd59fcfc717ac483ee74b35a;p=github%2Fshaarli%2FShaarli.git
diff --git a/tests/Updater/UpdaterTest.php b/tests/Updater/UpdaterTest.php
index 4948fe52..c4a6e7ef 100644
--- a/tests/Updater/UpdaterTest.php
+++ b/tests/Updater/UpdaterTest.php
@@ -1,7 +1,11 @@
conf = new ConfigManager(self::$configFile);
}
@@ -271,7 +276,7 @@ $GLOBALS[\'privateLinkByDefault\'] = true;';
public function testEscapeConfig()
{
$sandbox = 'sandbox/config';
- copy(self::$configFile .'.json.php', $sandbox .'.json.php');
+ copy(self::$configFile . '.json.php', $sandbox . '.json.php');
$this->conf = new ConfigManager($sandbox);
$title = '';
$headerLink = '';
@@ -286,7 +291,43 @@ $GLOBALS[\'privateLinkByDefault\'] = true;';
$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');
+ unlink($sandbox . '.json.php');
+ }
+
+ /**
+ * Test updateMethodApiSettings(): create default settings for the API (enabled + secret).
+ */
+ public function testUpdateApiSettings()
+ {
+ $confFile = 'sandbox/config';
+ copy(self::$configFile .'.json.php', $confFile .'.json.php');
+ $conf = new ConfigManager($confFile);
+ $updater = new Updater(array(), array(), $conf, true);
+
+ $this->assertFalse($conf->exists('api.enabled'));
+ $this->assertFalse($conf->exists('api.secret'));
+ $updater->updateMethodApiSettings();
+ $conf->reload();
+ $this->assertTrue($conf->get('api.enabled'));
+ $this->assertTrue($conf->exists('api.secret'));
+ unlink($confFile .'.json.php');
+ }
+
+ /**
+ * Test updateMethodApiSettings(): already set, do nothing.
+ */
+ public function testUpdateApiSettingsNothingToDo()
+ {
+ $confFile = 'sandbox/config';
+ copy(self::$configFile .'.json.php', $confFile .'.json.php');
+ $conf = new ConfigManager($confFile);
+ $conf->set('api.enabled', false);
+ $conf->set('api.secret', '');
+ $updater = new Updater(array(), array(), $conf, true);
+ $updater->updateMethodApiSettings();
+ $this->assertFalse($conf->get('api.enabled'));
+ $this->assertEmpty($conf->get('api.secret'));
+ unlink($confFile .'.json.php');
}
/**
@@ -352,20 +393,32 @@ $GLOBALS[\'privateLinkByDefault\'] = true;';
$this->assertEquals('Naming conventions... #private', $linkDB[0]['description']);
$this->assertEquals('samba cartoon web', $linkDB[0]['tags']);
$this->assertTrue($linkDB[0]['private']);
- $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_142300'), $linkDB[0]['created']);
+ $this->assertEquals(
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_142300'),
+ $linkDB[0]['created']
+ );
$this->assertTrue(isset($linkDB[1]));
$this->assertFalse(isset($linkDB[1]['linkdate']));
$this->assertEquals(1, $linkDB[1]['id']);
$this->assertEquals('UserFriendly - Samba', $linkDB[1]['title']);
- $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_172539'), $linkDB[1]['created']);
+ $this->assertEquals(
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_172539'),
+ $linkDB[1]['created']
+ );
$this->assertTrue(isset($linkDB[2]));
$this->assertFalse(isset($linkDB[2]['linkdate']));
$this->assertEquals(2, $linkDB[2]['id']);
$this->assertEquals('Geek and Poke', $linkDB[2]['title']);
- $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_182539'), $linkDB[2]['created']);
- $this->assertEquals(DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_190301'), $linkDB[2]['updated']);
+ $this->assertEquals(
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_182539'),
+ $linkDB[2]['created']
+ );
+ $this->assertEquals(
+ DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, '20121206_190301'),
+ $linkDB[2]['updated']
+ );
}
/**
@@ -385,4 +438,371 @@ $GLOBALS[\'privateLinkByDefault\'] = true;';
$this->assertTrue($updater->updateMethodDatastoreIds());
$this->assertEquals($checksum, hash_file('sha1', self::$testDatastore));
}
+
+ /**
+ * Test defaultTheme update with default settings: nothing to do.
+ */
+ public function testDefaultThemeWithDefaultSettings()
+ {
+ $sandbox = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandbox . '.json.php');
+ $this->conf = new ConfigManager($sandbox);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodDefaultTheme());
+
+ $this->assertEquals('tpl/', $this->conf->get('resource.raintpl_tpl'));
+ $this->assertEquals('default', $this->conf->get('resource.theme'));
+ $this->conf = new ConfigManager($sandbox);
+ $this->assertEquals('tpl/', $this->conf->get('resource.raintpl_tpl'));
+ $this->assertEquals('default', $this->conf->get('resource.theme'));
+ unlink($sandbox . '.json.php');
+ }
+
+ /**
+ * Test defaultTheme update with a custom theme in a subfolder
+ */
+ public function testDefaultThemeWithCustomTheme()
+ {
+ $theme = 'iamanartist';
+ $sandbox = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandbox . '.json.php');
+ $this->conf = new ConfigManager($sandbox);
+ mkdir('sandbox/'. $theme);
+ touch('sandbox/'. $theme .'/linklist.html');
+ $this->conf->set('resource.raintpl_tpl', 'sandbox/'. $theme .'/');
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodDefaultTheme());
+
+ $this->assertEquals('sandbox', $this->conf->get('resource.raintpl_tpl'));
+ $this->assertEquals($theme, $this->conf->get('resource.theme'));
+ $this->conf = new ConfigManager($sandbox);
+ $this->assertEquals('sandbox', $this->conf->get('resource.raintpl_tpl'));
+ $this->assertEquals($theme, $this->conf->get('resource.theme'));
+ unlink($sandbox . '.json.php');
+ unlink('sandbox/'. $theme .'/linklist.html');
+ rmdir('sandbox/'. $theme);
+ }
+
+ /**
+ * Test updateMethodEscapeMarkdown with markdown plugin enabled
+ * => setting markdown_escape set to false.
+ */
+ public function testEscapeMarkdownSettingToFalse()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+
+ $this->conf->set('general.enabled_plugins', ['markdown']);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodEscapeMarkdown());
+ $this->assertFalse($this->conf->get('security.markdown_escape'));
+
+ // reload from file
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->assertFalse($this->conf->get('security.markdown_escape'));
+ }
+
+
+ /**
+ * Test updateMethodEscapeMarkdown with markdown plugin disabled
+ * => setting markdown_escape set to true.
+ */
+ public function testEscapeMarkdownSettingToTrue()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+
+ $this->conf->set('general.enabled_plugins', []);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodEscapeMarkdown());
+ $this->assertTrue($this->conf->get('security.markdown_escape'));
+
+ // reload from file
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->assertTrue($this->conf->get('security.markdown_escape'));
+ }
+
+ /**
+ * Test updateMethodEscapeMarkdown with nothing to do (setting already enabled)
+ */
+ public function testEscapeMarkdownSettingNothingToDoEnabled()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->conf->set('security.markdown_escape', true);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodEscapeMarkdown());
+ $this->assertTrue($this->conf->get('security.markdown_escape'));
+ }
+
+ /**
+ * Test updateMethodEscapeMarkdown with nothing to do (setting already disabled)
+ */
+ public function testEscapeMarkdownSettingNothingToDoDisabled()
+ {
+ $this->conf->set('security.markdown_escape', false);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodEscapeMarkdown());
+ $this->assertFalse($this->conf->get('security.markdown_escape'));
+ }
+
+ /**
+ * Test updateMethodPiwikUrl with valid data
+ */
+ public function testUpdatePiwikUrlValid()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $url = 'mypiwik.tld';
+ $this->conf->set('plugins.PIWIK_URL', $url);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodPiwikUrl());
+ $this->assertEquals('http://'. $url, $this->conf->get('plugins.PIWIK_URL'));
+
+ // reload from file
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->assertEquals('http://'. $url, $this->conf->get('plugins.PIWIK_URL'));
+ }
+
+ /**
+ * Test updateMethodPiwikUrl without setting
+ */
+ public function testUpdatePiwikUrlEmpty()
+ {
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodPiwikUrl());
+ $this->assertEmpty($this->conf->get('plugins.PIWIK_URL'));
+ }
+
+ /**
+ * Test updateMethodPiwikUrl: valid URL, nothing to do
+ */
+ public function testUpdatePiwikUrlNothingToDo()
+ {
+ $url = 'https://mypiwik.tld';
+ $this->conf->set('plugins.PIWIK_URL', $url);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodPiwikUrl());
+ $this->assertEquals($url, $this->conf->get('plugins.PIWIK_URL'));
+ }
+
+ /**
+ * Test updateMethodAtomDefault with show_atom set to false
+ * => update to true.
+ */
+ public function testUpdateMethodAtomDefault()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->conf->set('feed.show_atom', false);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodAtomDefault());
+ $this->assertTrue($this->conf->get('feed.show_atom'));
+ // reload from file
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->assertTrue($this->conf->get('feed.show_atom'));
+ }
+ /**
+ * Test updateMethodAtomDefault with show_atom not set.
+ * => nothing to do
+ */
+ public function testUpdateMethodAtomDefaultNoExist()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodAtomDefault());
+ $this->assertTrue($this->conf->get('feed.show_atom'));
+ }
+ /**
+ * Test updateMethodAtomDefault with show_atom set to true.
+ * => nothing to do
+ */
+ public function testUpdateMethodAtomDefaultAlreadyTrue()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->conf->set('feed.show_atom', true);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodAtomDefault());
+ $this->assertTrue($this->conf->get('feed.show_atom'));
+ }
+
+ /**
+ * Test updateMethodDownloadSizeAndTimeoutConf, it should be set if none is already defined.
+ */
+ public function testUpdateMethodDownloadSizeAndTimeoutConf()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
+ $this->assertEquals(4194304, $this->conf->get('general.download_max_size'));
+ $this->assertEquals(30, $this->conf->get('general.download_timeout'));
+
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->assertEquals(4194304, $this->conf->get('general.download_max_size'));
+ $this->assertEquals(30, $this->conf->get('general.download_timeout'));
+ }
+
+ /**
+ * Test updateMethodDownloadSizeAndTimeoutConf, it shouldn't be set if it is already defined.
+ */
+ public function testUpdateMethodDownloadSizeAndTimeoutConfIgnore()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->conf->set('general.download_max_size', 38);
+ $this->conf->set('general.download_timeout', 70);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
+ $this->assertEquals(38, $this->conf->get('general.download_max_size'));
+ $this->assertEquals(70, $this->conf->get('general.download_timeout'));
+ }
+
+ /**
+ * Test updateMethodDownloadSizeAndTimeoutConf, only the maz size should be set here.
+ */
+ public function testUpdateMethodDownloadSizeAndTimeoutConfOnlySize()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->conf->set('general.download_max_size', 38);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
+ $this->assertEquals(38, $this->conf->get('general.download_max_size'));
+ $this->assertEquals(30, $this->conf->get('general.download_timeout'));
+ }
+
+ /**
+ * Test updateMethodDownloadSizeAndTimeoutConf, only the time out should be set here.
+ */
+ public function testUpdateMethodDownloadSizeAndTimeoutConfOnlyTimeout()
+ {
+ $sandboxConf = 'sandbox/config';
+ copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
+ $this->conf = new ConfigManager($sandboxConf);
+ $this->conf->set('general.download_timeout', 3);
+ $updater = new Updater([], [], $this->conf, true);
+ $this->assertTrue($updater->updateMethodDownloadSizeAndTimeoutConf());
+ $this->assertEquals(4194304, $this->conf->get('general.download_max_size'));
+ $this->assertEquals(3, $this->conf->get('general.download_timeout'));
+ }
+
+ /**
+<<<<<<< HEAD
+ * Test updateMethodWebThumbnailer with thumbnails enabled.
+ */
+ public function testUpdateMethodWebThumbnailerEnabled()
+ {
+ $this->conf->remove('thumbnails');
+ $this->conf->set('thumbnail.enable_thumbnails', true);
+ $updater = new Updater([], [], $this->conf, true, $_SESSION);
+ $this->assertTrue($updater->updateMethodWebThumbnailer());
+ $this->assertFalse($this->conf->exists('thumbnail'));
+ $this->assertEquals(\Shaarli\Thumbnailer::MODE_ALL, $this->conf->get('thumbnails.mode'));
+ $this->assertEquals(125, $this->conf->get('thumbnails.width'));
+ $this->assertEquals(90, $this->conf->get('thumbnails.height'));
+ $this->assertContains('You have enabled or changed thumbnails', $_SESSION['warnings'][0]);
+ }
+
+ /**
+ * Test updateMethodWebThumbnailer with thumbnails disabled.
+ */
+ public function testUpdateMethodWebThumbnailerDisabled()
+ {
+ $this->conf->remove('thumbnails');
+ $this->conf->set('thumbnail.enable_thumbnails', false);
+ $updater = new Updater([], [], $this->conf, true, $_SESSION);
+ $this->assertTrue($updater->updateMethodWebThumbnailer());
+ $this->assertFalse($this->conf->exists('thumbnail'));
+ $this->assertEquals(Thumbnailer::MODE_NONE, $this->conf->get('thumbnails.mode'));
+ $this->assertEquals(125, $this->conf->get('thumbnails.width'));
+ $this->assertEquals(90, $this->conf->get('thumbnails.height'));
+ $this->assertTrue(empty($_SESSION['warnings']));
+ }
+
+ /**
+ * Test updateMethodWebThumbnailer with thumbnails disabled.
+ */
+ public function testUpdateMethodWebThumbnailerNothingToDo()
+ {
+ $updater = new Updater([], [], $this->conf, true, $_SESSION);
+ $this->assertTrue($updater->updateMethodWebThumbnailer());
+ $this->assertFalse($this->conf->exists('thumbnail'));
+ $this->assertEquals(Thumbnailer::MODE_COMMON, $this->conf->get('thumbnails.mode'));
+ $this->assertEquals(90, $this->conf->get('thumbnails.width'));
+ $this->assertEquals(53, $this->conf->get('thumbnails.height'));
+ $this->assertTrue(empty($_SESSION['warnings']));
+ }
+
+ /**
+ * Test updateMethodSetSticky().
+ */
+ public function testUpdateStickyValid()
+ {
+ $blank = [
+ 'id' => 1,
+ 'url' => 'z',
+ 'title' => '',
+ 'description' => '',
+ 'tags' => '',
+ 'created' => new DateTime(),
+ ];
+ $links = [
+ 1 => ['id' => 1] + $blank,
+ 2 => ['id' => 2] + $blank,
+ ];
+ $refDB = new ReferenceLinkDB();
+ $refDB->setLinks($links);
+ $refDB->write(self::$testDatastore);
+ $linkDB = new LinkDB(self::$testDatastore, true, false);
+
+ $updater = new Updater(array(), $linkDB, $this->conf, true);
+ $this->assertTrue($updater->updateMethodSetSticky());
+
+ $linkDB = new LinkDB(self::$testDatastore, true, false);
+ foreach ($linkDB as $link) {
+ $this->assertFalse($link['sticky']);
+ }
+ }
+
+ /**
+ * Test updateMethodSetSticky().
+ */
+ public function testUpdateStickyNothingToDo()
+ {
+ $blank = [
+ 'id' => 1,
+ 'url' => 'z',
+ 'title' => '',
+ 'description' => '',
+ 'tags' => '',
+ 'created' => new DateTime(),
+ ];
+ $links = [
+ 1 => ['id' => 1, 'sticky' => true] + $blank,
+ 2 => ['id' => 2] + $blank,
+ ];
+ $refDB = new ReferenceLinkDB();
+ $refDB->setLinks($links);
+ $refDB->write(self::$testDatastore);
+ $linkDB = new LinkDB(self::$testDatastore, true, false);
+
+ $updater = new Updater(array(), $linkDB, $this->conf, true);
+ $this->assertTrue($updater->updateMethodSetSticky());
+
+ $linkDB = new LinkDB(self::$testDatastore, true, false);
+ $this->assertTrue($linkDB[1]['sticky']);
+ }
}