Use NetscapeBookmarkUtils object instance instead of static calls
This commit is contained in:
parent
3447d888d7
commit
e8a10f312a
6 changed files with 145 additions and 107 deletions
|
@ -11,6 +11,7 @@
|
||||||
use Shaarli\Formatter\FormatterFactory;
|
use Shaarli\Formatter\FormatterFactory;
|
||||||
use Shaarli\History;
|
use Shaarli\History;
|
||||||
use Shaarli\Http\HttpAccess;
|
use Shaarli\Http\HttpAccess;
|
||||||
|
use Shaarli\Netscape\NetscapeBookmarkUtils;
|
||||||
use Shaarli\Plugin\PluginManager;
|
use Shaarli\Plugin\PluginManager;
|
||||||
use Shaarli\Render\PageBuilder;
|
use Shaarli\Render\PageBuilder;
|
||||||
use Shaarli\Render\PageCacheManager;
|
use Shaarli\Render\PageCacheManager;
|
||||||
|
@ -118,6 +119,10 @@ public function build(): ShaarliContainer
|
||||||
return new HttpAccess();
|
return new HttpAccess();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$container['netscapeBookmarkUtils'] = function (ShaarliContainer $container): NetscapeBookmarkUtils {
|
||||||
|
return new NetscapeBookmarkUtils($container->bookmarkService, $container->conf, $container->history);
|
||||||
|
};
|
||||||
|
|
||||||
return $container;
|
return $container;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
use Shaarli\Formatter\FormatterFactory;
|
use Shaarli\Formatter\FormatterFactory;
|
||||||
use Shaarli\History;
|
use Shaarli\History;
|
||||||
use Shaarli\Http\HttpAccess;
|
use Shaarli\Http\HttpAccess;
|
||||||
|
use Shaarli\Netscape\NetscapeBookmarkUtils;
|
||||||
use Shaarli\Plugin\PluginManager;
|
use Shaarli\Plugin\PluginManager;
|
||||||
use Shaarli\Render\PageBuilder;
|
use Shaarli\Render\PageBuilder;
|
||||||
use Shaarli\Render\PageCacheManager;
|
use Shaarli\Render\PageCacheManager;
|
||||||
|
@ -30,6 +31,7 @@
|
||||||
* @property History $history
|
* @property History $history
|
||||||
* @property HttpAccess $httpAccess
|
* @property HttpAccess $httpAccess
|
||||||
* @property LoginManager $loginManager
|
* @property LoginManager $loginManager
|
||||||
|
* @property NetscapeBookmarkUtils $netscapeBookmarkUtils
|
||||||
* @property PageBuilder $pageBuilder
|
* @property PageBuilder $pageBuilder
|
||||||
* @property PageCacheManager $pageCacheManager
|
* @property PageCacheManager $pageCacheManager
|
||||||
* @property PluginManager $pluginManager
|
* @property PluginManager $pluginManager
|
||||||
|
|
|
@ -16,10 +16,24 @@
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Utilities to import and export bookmarks using the Netscape format
|
* Utilities to import and export bookmarks using the Netscape format
|
||||||
* TODO: Not static, use a container.
|
|
||||||
*/
|
*/
|
||||||
class NetscapeBookmarkUtils
|
class NetscapeBookmarkUtils
|
||||||
{
|
{
|
||||||
|
/** @var BookmarkServiceInterface */
|
||||||
|
protected $bookmarkService;
|
||||||
|
|
||||||
|
/** @var ConfigManager */
|
||||||
|
protected $conf;
|
||||||
|
|
||||||
|
/** @var History */
|
||||||
|
protected $history;
|
||||||
|
|
||||||
|
public function __construct(BookmarkServiceInterface $bookmarkService, ConfigManager $conf, History $history)
|
||||||
|
{
|
||||||
|
$this->bookmarkService = $bookmarkService;
|
||||||
|
$this->conf = $conf;
|
||||||
|
$this->history = $history;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Filters bookmarks and adds Netscape-formatted fields
|
* Filters bookmarks and adds Netscape-formatted fields
|
||||||
|
@ -28,18 +42,16 @@ class NetscapeBookmarkUtils
|
||||||
* - timestamp link addition date, using the Unix epoch format
|
* - timestamp link addition date, using the Unix epoch format
|
||||||
* - taglist comma-separated tag list
|
* - taglist comma-separated tag list
|
||||||
*
|
*
|
||||||
* @param BookmarkServiceInterface $bookmarkService Link datastore
|
|
||||||
* @param BookmarkFormatter $formatter instance
|
* @param BookmarkFormatter $formatter instance
|
||||||
* @param string $selection Which bookmarks to export: (all|private|public)
|
* @param string $selection Which bookmarks to export: (all|private|public)
|
||||||
* @param bool $prependNoteUrl Prepend note permalinks with the server's URL
|
* @param bool $prependNoteUrl Prepend note permalinks with the server's URL
|
||||||
* @param string $indexUrl Absolute URL of the Shaarli index page
|
* @param string $indexUrl Absolute URL of the Shaarli index page
|
||||||
*
|
*
|
||||||
* @return array The bookmarks to be exported, with additional fields
|
* @return array The bookmarks to be exported, with additional fields
|
||||||
*@throws Exception Invalid export selection
|
|
||||||
*
|
*
|
||||||
|
* @throws Exception Invalid export selection
|
||||||
*/
|
*/
|
||||||
public static function filterAndFormat(
|
public function filterAndFormat(
|
||||||
$bookmarkService,
|
|
||||||
$formatter,
|
$formatter,
|
||||||
$selection,
|
$selection,
|
||||||
$prependNoteUrl,
|
$prependNoteUrl,
|
||||||
|
@ -51,7 +63,7 @@ public static function filterAndFormat(
|
||||||
}
|
}
|
||||||
|
|
||||||
$bookmarkLinks = array();
|
$bookmarkLinks = array();
|
||||||
foreach ($bookmarkService->search([], $selection) as $bookmark) {
|
foreach ($this->bookmarkService->search([], $selection) as $bookmark) {
|
||||||
$link = $formatter->format($bookmark);
|
$link = $formatter->format($bookmark);
|
||||||
$link['taglist'] = implode(',', $bookmark->getTags());
|
$link['taglist'] = implode(',', $bookmark->getTags());
|
||||||
if ($bookmark->isNote() && $prependNoteUrl) {
|
if ($bookmark->isNote() && $prependNoteUrl) {
|
||||||
|
@ -64,53 +76,15 @@ public static function filterAndFormat(
|
||||||
return $bookmarkLinks;
|
return $bookmarkLinks;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates an import status summary
|
|
||||||
*
|
|
||||||
* @param string $filename name of the file to import
|
|
||||||
* @param int $filesize size of the file to import
|
|
||||||
* @param int $importCount how many bookmarks were imported
|
|
||||||
* @param int $overwriteCount how many bookmarks were overwritten
|
|
||||||
* @param int $skipCount how many bookmarks were skipped
|
|
||||||
* @param int $duration how many seconds did the import take
|
|
||||||
*
|
|
||||||
* @return string Summary of the bookmark import status
|
|
||||||
*/
|
|
||||||
private static function importStatus(
|
|
||||||
$filename,
|
|
||||||
$filesize,
|
|
||||||
$importCount = 0,
|
|
||||||
$overwriteCount = 0,
|
|
||||||
$skipCount = 0,
|
|
||||||
$duration = 0
|
|
||||||
) {
|
|
||||||
$status = sprintf(t('File %s (%d bytes) '), $filename, $filesize);
|
|
||||||
if ($importCount == 0 && $overwriteCount == 0 && $skipCount == 0) {
|
|
||||||
$status .= t('has an unknown file format. Nothing was imported.');
|
|
||||||
} else {
|
|
||||||
$status .= vsprintf(
|
|
||||||
t(
|
|
||||||
'was successfully processed in %d seconds: '
|
|
||||||
. '%d bookmarks imported, %d bookmarks overwritten, %d bookmarks skipped.'
|
|
||||||
),
|
|
||||||
[$duration, $importCount, $overwriteCount, $skipCount]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Imports Web bookmarks from an uploaded Netscape bookmark dump
|
* Imports Web bookmarks from an uploaded Netscape bookmark dump
|
||||||
*
|
*
|
||||||
* @param array $post Server $_POST parameters
|
* @param array $post Server $_POST parameters
|
||||||
* @param array $files Server $_FILES parameters
|
* @param array $files Server $_FILES parameters
|
||||||
* @param BookmarkServiceInterface $bookmarkService Loaded LinkDB instance
|
|
||||||
* @param ConfigManager $conf instance
|
|
||||||
* @param History $history History instance
|
|
||||||
*
|
*
|
||||||
* @return string Summary of the bookmark import status
|
* @return string Summary of the bookmark import status
|
||||||
*/
|
*/
|
||||||
public static function import($post, $files, $bookmarkService, $conf, $history)
|
public function import($post, $files)
|
||||||
{
|
{
|
||||||
$start = time();
|
$start = time();
|
||||||
$filename = $files['filetoupload']['name'];
|
$filename = $files['filetoupload']['name'];
|
||||||
|
@ -141,11 +115,11 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
|
||||||
true, // nested tag support
|
true, // nested tag support
|
||||||
$defaultTags, // additional user-specified tags
|
$defaultTags, // additional user-specified tags
|
||||||
strval(1 - $defaultPrivacy), // defaultPub = 1 - defaultPrivacy
|
strval(1 - $defaultPrivacy), // defaultPub = 1 - defaultPrivacy
|
||||||
$conf->get('resource.data_dir') // log path, will be overridden
|
$this->conf->get('resource.data_dir') // log path, will be overridden
|
||||||
);
|
);
|
||||||
$logger = new Logger(
|
$logger = new Logger(
|
||||||
$conf->get('resource.data_dir'),
|
$this->conf->get('resource.data_dir'),
|
||||||
!$conf->get('dev.debug') ? LogLevel::INFO : LogLevel::DEBUG,
|
!$this->conf->get('dev.debug') ? LogLevel::INFO : LogLevel::DEBUG,
|
||||||
[
|
[
|
||||||
'prefix' => 'import.',
|
'prefix' => 'import.',
|
||||||
'extension' => 'log',
|
'extension' => 'log',
|
||||||
|
@ -171,7 +145,7 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
|
||||||
$private = 0;
|
$private = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
$link = $bookmarkService->findByUrl($bkm['uri']);
|
$link = $this->bookmarkService->findByUrl($bkm['uri']);
|
||||||
$existingLink = $link !== null;
|
$existingLink = $link !== null;
|
||||||
if (! $existingLink) {
|
if (! $existingLink) {
|
||||||
$link = new Bookmark();
|
$link = new Bookmark();
|
||||||
|
@ -193,20 +167,21 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
|
||||||
}
|
}
|
||||||
|
|
||||||
$link->setTitle($bkm['title']);
|
$link->setTitle($bkm['title']);
|
||||||
$link->setUrl($bkm['uri'], $conf->get('security.allowed_protocols'));
|
$link->setUrl($bkm['uri'], $this->conf->get('security.allowed_protocols'));
|
||||||
$link->setDescription($bkm['note']);
|
$link->setDescription($bkm['note']);
|
||||||
$link->setPrivate($private);
|
$link->setPrivate($private);
|
||||||
$link->setTagsString($bkm['tags']);
|
$link->setTagsString($bkm['tags']);
|
||||||
|
|
||||||
$bookmarkService->addOrSet($link, false);
|
$this->bookmarkService->addOrSet($link, false);
|
||||||
$importCount++;
|
$importCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
$bookmarkService->save();
|
$this->bookmarkService->save();
|
||||||
$history->importLinks();
|
$this->history->importLinks();
|
||||||
|
|
||||||
$duration = time() - $start;
|
$duration = time() - $start;
|
||||||
return self::importStatus(
|
|
||||||
|
return $this->importStatus(
|
||||||
$filename,
|
$filename,
|
||||||
$filesize,
|
$filesize,
|
||||||
$importCount,
|
$importCount,
|
||||||
|
@ -215,4 +190,39 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
|
||||||
$duration
|
$duration
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates an import status summary
|
||||||
|
*
|
||||||
|
* @param string $filename name of the file to import
|
||||||
|
* @param int $filesize size of the file to import
|
||||||
|
* @param int $importCount how many bookmarks were imported
|
||||||
|
* @param int $overwriteCount how many bookmarks were overwritten
|
||||||
|
* @param int $skipCount how many bookmarks were skipped
|
||||||
|
* @param int $duration how many seconds did the import take
|
||||||
|
*
|
||||||
|
* @return string Summary of the bookmark import status
|
||||||
|
*/
|
||||||
|
protected function importStatus(
|
||||||
|
$filename,
|
||||||
|
$filesize,
|
||||||
|
$importCount = 0,
|
||||||
|
$overwriteCount = 0,
|
||||||
|
$skipCount = 0,
|
||||||
|
$duration = 0
|
||||||
|
) {
|
||||||
|
$status = sprintf(t('File %s (%d bytes) '), $filename, $filesize);
|
||||||
|
if ($importCount == 0 && $overwriteCount == 0 && $skipCount == 0) {
|
||||||
|
$status .= t('has an unknown file format. Nothing was imported.');
|
||||||
|
} else {
|
||||||
|
$status .= vsprintf(
|
||||||
|
t(
|
||||||
|
'was successfully processed in %d seconds: '
|
||||||
|
. '%d bookmarks imported, %d bookmarks overwritten, %d bookmarks skipped.'
|
||||||
|
),
|
||||||
|
[$duration, $importCount, $overwriteCount, $skipCount]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -662,13 +662,8 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM
|
||||||
if (! $sessionManager->checkToken($_POST['token'])) {
|
if (! $sessionManager->checkToken($_POST['token'])) {
|
||||||
die('Wrong token.');
|
die('Wrong token.');
|
||||||
}
|
}
|
||||||
$status = NetscapeBookmarkUtils::import(
|
$netscapeBookmarkUtils = new NetscapeBookmarkUtils($bookmarkService, $conf, $history);
|
||||||
$_POST,
|
$status = $netscapeBookmarkUtils->import($_POST, $_FILES);
|
||||||
$_FILES,
|
|
||||||
$bookmarkService,
|
|
||||||
$conf,
|
|
||||||
$history
|
|
||||||
);
|
|
||||||
echo '<script>alert("'.$status.'");document.location=\'./?do='
|
echo '<script>alert("'.$status.'");document.location=\'./?do='
|
||||||
.Router::$PAGE_IMPORT .'\';</script>';
|
.Router::$PAGE_IMPORT .'\';</script>';
|
||||||
exit;
|
exit;
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Shaarli\Netscape;
|
namespace Shaarli\Netscape;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
use Shaarli\Bookmark\BookmarkFileService;
|
use Shaarli\Bookmark\BookmarkFileService;
|
||||||
use Shaarli\Bookmark\LinkDB;
|
|
||||||
use Shaarli\Config\ConfigManager;
|
use Shaarli\Config\ConfigManager;
|
||||||
use Shaarli\Formatter\FormatterFactory;
|
|
||||||
use Shaarli\Formatter\BookmarkFormatter;
|
use Shaarli\Formatter\BookmarkFormatter;
|
||||||
|
use Shaarli\Formatter\FormatterFactory;
|
||||||
use Shaarli\History;
|
use Shaarli\History;
|
||||||
|
|
||||||
require_once 'tests/utils/ReferenceLinkDB.php';
|
require_once 'tests/utils/ReferenceLinkDB.php';
|
||||||
|
@ -13,13 +14,18 @@
|
||||||
/**
|
/**
|
||||||
* Netscape bookmark export
|
* Netscape bookmark export
|
||||||
*/
|
*/
|
||||||
class BookmarkExportTest extends \PHPUnit\Framework\TestCase
|
class BookmarkExportTest extends TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var string datastore to test write operations
|
* @var string datastore to test write operations
|
||||||
*/
|
*/
|
||||||
protected static $testDatastore = 'sandbox/datastore.php';
|
protected static $testDatastore = 'sandbox/datastore.php';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var ConfigManager instance.
|
||||||
|
*/
|
||||||
|
protected static $conf;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var \ReferenceLinkDB instance.
|
* @var \ReferenceLinkDB instance.
|
||||||
*/
|
*/
|
||||||
|
@ -35,19 +41,38 @@ class BookmarkExportTest extends \PHPUnit\Framework\TestCase
|
||||||
*/
|
*/
|
||||||
protected static $formatter;
|
protected static $formatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var History instance
|
||||||
|
*/
|
||||||
|
protected static $history;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var NetscapeBookmarkUtils
|
||||||
|
*/
|
||||||
|
protected $netscapeBookmarkUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instantiate reference data
|
* Instantiate reference data
|
||||||
*/
|
*/
|
||||||
public static function setUpBeforeClass()
|
public static function setUpBeforeClass()
|
||||||
{
|
{
|
||||||
$conf = new ConfigManager('tests/utils/config/configJson');
|
static::$conf = new ConfigManager('tests/utils/config/configJson');
|
||||||
$conf->set('resource.datastore', self::$testDatastore);
|
static::$conf->set('resource.datastore', static::$testDatastore);
|
||||||
self::$refDb = new \ReferenceLinkDB();
|
static::$refDb = new \ReferenceLinkDB();
|
||||||
self::$refDb->write(self::$testDatastore);
|
static::$refDb->write(static::$testDatastore);
|
||||||
$history = new History('sandbox/history.php');
|
static::$history = new History('sandbox/history.php');
|
||||||
self::$bookmarkService = new BookmarkFileService($conf, $history, true);
|
static::$bookmarkService = new BookmarkFileService(static::$conf, static::$history, true);
|
||||||
$factory = new FormatterFactory($conf, true);
|
$factory = new FormatterFactory(static::$conf, true);
|
||||||
self::$formatter = $factory->getFormatter('raw');
|
static::$formatter = $factory->getFormatter('raw');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setUp(): void
|
||||||
|
{
|
||||||
|
$this->netscapeBookmarkUtils = new NetscapeBookmarkUtils(
|
||||||
|
static::$bookmarkService,
|
||||||
|
static::$conf,
|
||||||
|
static::$history
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -57,8 +82,7 @@ public static function setUpBeforeClass()
|
||||||
*/
|
*/
|
||||||
public function testFilterAndFormatInvalid()
|
public function testFilterAndFormatInvalid()
|
||||||
{
|
{
|
||||||
NetscapeBookmarkUtils::filterAndFormat(
|
$this->netscapeBookmarkUtils->filterAndFormat(
|
||||||
self::$bookmarkService,
|
|
||||||
self::$formatter,
|
self::$formatter,
|
||||||
'derp',
|
'derp',
|
||||||
false,
|
false,
|
||||||
|
@ -71,8 +95,7 @@ public function testFilterAndFormatInvalid()
|
||||||
*/
|
*/
|
||||||
public function testFilterAndFormatAll()
|
public function testFilterAndFormatAll()
|
||||||
{
|
{
|
||||||
$links = NetscapeBookmarkUtils::filterAndFormat(
|
$links = $this->netscapeBookmarkUtils->filterAndFormat(
|
||||||
self::$bookmarkService,
|
|
||||||
self::$formatter,
|
self::$formatter,
|
||||||
'all',
|
'all',
|
||||||
false,
|
false,
|
||||||
|
@ -97,8 +120,7 @@ public function testFilterAndFormatAll()
|
||||||
*/
|
*/
|
||||||
public function testFilterAndFormatPrivate()
|
public function testFilterAndFormatPrivate()
|
||||||
{
|
{
|
||||||
$links = NetscapeBookmarkUtils::filterAndFormat(
|
$links = $this->netscapeBookmarkUtils->filterAndFormat(
|
||||||
self::$bookmarkService,
|
|
||||||
self::$formatter,
|
self::$formatter,
|
||||||
'private',
|
'private',
|
||||||
false,
|
false,
|
||||||
|
@ -123,8 +145,7 @@ public function testFilterAndFormatPrivate()
|
||||||
*/
|
*/
|
||||||
public function testFilterAndFormatPublic()
|
public function testFilterAndFormatPublic()
|
||||||
{
|
{
|
||||||
$links = NetscapeBookmarkUtils::filterAndFormat(
|
$links = $this->netscapeBookmarkUtils->filterAndFormat(
|
||||||
self::$bookmarkService,
|
|
||||||
self::$formatter,
|
self::$formatter,
|
||||||
'public',
|
'public',
|
||||||
false,
|
false,
|
||||||
|
@ -149,8 +170,7 @@ public function testFilterAndFormatPublic()
|
||||||
*/
|
*/
|
||||||
public function testFilterAndFormatDoNotPrependNoteUrl()
|
public function testFilterAndFormatDoNotPrependNoteUrl()
|
||||||
{
|
{
|
||||||
$links = NetscapeBookmarkUtils::filterAndFormat(
|
$links = $this->netscapeBookmarkUtils->filterAndFormat(
|
||||||
self::$bookmarkService,
|
|
||||||
self::$formatter,
|
self::$formatter,
|
||||||
'public',
|
'public',
|
||||||
false,
|
false,
|
||||||
|
@ -168,8 +188,7 @@ public function testFilterAndFormatDoNotPrependNoteUrl()
|
||||||
public function testFilterAndFormatPrependNoteUrl()
|
public function testFilterAndFormatPrependNoteUrl()
|
||||||
{
|
{
|
||||||
$indexUrl = 'http://localhost:7469/shaarli/';
|
$indexUrl = 'http://localhost:7469/shaarli/';
|
||||||
$links = NetscapeBookmarkUtils::filterAndFormat(
|
$links = $this->netscapeBookmarkUtils->filterAndFormat(
|
||||||
self::$bookmarkService,
|
|
||||||
self::$formatter,
|
self::$formatter,
|
||||||
'public',
|
'public',
|
||||||
true,
|
true,
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Shaarli\Netscape;
|
namespace Shaarli\Netscape;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
use Shaarli\Bookmark\Bookmark;
|
use Shaarli\Bookmark\Bookmark;
|
||||||
use Shaarli\Bookmark\BookmarkFilter;
|
|
||||||
use Shaarli\Bookmark\BookmarkFileService;
|
use Shaarli\Bookmark\BookmarkFileService;
|
||||||
use Shaarli\Bookmark\LinkDB;
|
use Shaarli\Bookmark\BookmarkFilter;
|
||||||
use Shaarli\Config\ConfigManager;
|
use Shaarli\Config\ConfigManager;
|
||||||
use Shaarli\History;
|
use Shaarli\History;
|
||||||
|
|
||||||
|
@ -31,7 +32,7 @@ function file2array($filename)
|
||||||
/**
|
/**
|
||||||
* Netscape bookmark import
|
* Netscape bookmark import
|
||||||
*/
|
*/
|
||||||
class BookmarkImportTest extends \PHPUnit\Framework\TestCase
|
class BookmarkImportTest extends TestCase
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var string datastore to test write operations
|
* @var string datastore to test write operations
|
||||||
|
@ -63,6 +64,11 @@ class BookmarkImportTest extends \PHPUnit\Framework\TestCase
|
||||||
*/
|
*/
|
||||||
protected $history;
|
protected $history;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var NetscapeBookmarkUtils
|
||||||
|
*/
|
||||||
|
protected $netscapeBookmarkUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string Save the current timezone.
|
* @var string Save the current timezone.
|
||||||
*/
|
*/
|
||||||
|
@ -91,6 +97,7 @@ protected function setUp()
|
||||||
$this->conf->set('resource.datastore', self::$testDatastore);
|
$this->conf->set('resource.datastore', self::$testDatastore);
|
||||||
$this->history = new History(self::$historyFilePath);
|
$this->history = new History(self::$historyFilePath);
|
||||||
$this->bookmarkService = new BookmarkFileService($this->conf, $this->history, true);
|
$this->bookmarkService = new BookmarkFileService($this->conf, $this->history, true);
|
||||||
|
$this->netscapeBookmarkUtils = new NetscapeBookmarkUtils($this->bookmarkService, $this->conf, $this->history);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -115,7 +122,7 @@ public function testImportEmptyData()
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'File empty.htm (0 bytes) has an unknown file format.'
|
'File empty.htm (0 bytes) has an unknown file format.'
|
||||||
.' Nothing was imported.',
|
.' Nothing was imported.',
|
||||||
NetscapeBookmarkUtils::import(null, $files, null, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import(null, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(0, $this->bookmarkService->count());
|
$this->assertEquals(0, $this->bookmarkService->count());
|
||||||
}
|
}
|
||||||
|
@ -128,7 +135,7 @@ public function testImportNoDoctype()
|
||||||
$files = file2array('no_doctype.htm');
|
$files = file2array('no_doctype.htm');
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'File no_doctype.htm (350 bytes) has an unknown file format. Nothing was imported.',
|
'File no_doctype.htm (350 bytes) has an unknown file format. Nothing was imported.',
|
||||||
NetscapeBookmarkUtils::import(null, $files, null, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import(null, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(0, $this->bookmarkService->count());
|
$this->assertEquals(0, $this->bookmarkService->count());
|
||||||
}
|
}
|
||||||
|
@ -142,7 +149,7 @@ public function testImportLowecaseDoctype()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File lowercase_doctype.htm (386 bytes) was successfully processed in %d seconds:'
|
'File lowercase_doctype.htm (386 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import(null, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import(null, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
}
|
}
|
||||||
|
@ -157,7 +164,7 @@ public function testImportInternetExplorerEncoding()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File internet_explorer_encoding.htm (356 bytes) was successfully processed in %d seconds:'
|
'File internet_explorer_encoding.htm (356 bytes) was successfully processed in %d seconds:'
|
||||||
.' 1 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 1 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import([], $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import([], $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(1, $this->bookmarkService->count());
|
$this->assertEquals(1, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -185,7 +192,7 @@ public function testImportNested()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_nested.htm (1337 bytes) was successfully processed in %d seconds:'
|
'File netscape_nested.htm (1337 bytes) was successfully processed in %d seconds:'
|
||||||
.' 8 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 8 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import([], $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import([], $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(8, $this->bookmarkService->count());
|
$this->assertEquals(8, $this->bookmarkService->count());
|
||||||
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -306,7 +313,7 @@ public function testImportDefaultPrivacyNoPost()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import([], $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import([], $files)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
|
@ -349,7 +356,7 @@ public function testImportKeepPrivacy()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
|
@ -392,7 +399,7 @@ public function testImportAsPublic()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -410,7 +417,7 @@ public function testImportAsPrivate()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -430,7 +437,7 @@ public function testOverwriteAsPublic()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -445,7 +452,7 @@ public function testOverwriteAsPublic()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -465,7 +472,7 @@ public function testOverwriteAsPrivate()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -480,7 +487,7 @@ public function testOverwriteAsPrivate()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 2 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -498,7 +505,7 @@ public function testSkipOverwrite()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -508,7 +515,7 @@ public function testSkipOverwrite()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 0 bookmarks imported, 0 bookmarks overwritten, 2 bookmarks skipped.',
|
.' 0 bookmarks imported, 0 bookmarks overwritten, 2 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -527,7 +534,7 @@ public function testSetDefaultTags()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -548,7 +555,7 @@ public function testSanitizeDefaultTags()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
|
||||||
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import($post, $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(2, $this->bookmarkService->count());
|
$this->assertEquals(2, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -573,7 +580,7 @@ public function testImportSameDate()
|
||||||
$this->assertStringMatchesFormat(
|
$this->assertStringMatchesFormat(
|
||||||
'File same_date.htm (453 bytes) was successfully processed in %d seconds:'
|
'File same_date.htm (453 bytes) was successfully processed in %d seconds:'
|
||||||
.' 3 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
.' 3 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
|
||||||
NetscapeBookmarkUtils::import(array(), $files, $this->bookmarkService, $this->conf, $this->history)
|
$this->netscapeBookmarkUtils->import(array(), $files)
|
||||||
);
|
);
|
||||||
$this->assertEquals(3, $this->bookmarkService->count());
|
$this->assertEquals(3, $this->bookmarkService->count());
|
||||||
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
$this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
|
||||||
|
@ -589,14 +596,14 @@ public function testImportCreateUpdateHistory()
|
||||||
'overwrite' => 'true',
|
'overwrite' => 'true',
|
||||||
];
|
];
|
||||||
$files = file2array('netscape_basic.htm');
|
$files = file2array('netscape_basic.htm');
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history);
|
$this->netscapeBookmarkUtils->import($post, $files);
|
||||||
$history = $this->history->getHistory();
|
$history = $this->history->getHistory();
|
||||||
$this->assertEquals(1, count($history));
|
$this->assertEquals(1, count($history));
|
||||||
$this->assertEquals(History::IMPORT, $history[0]['event']);
|
$this->assertEquals(History::IMPORT, $history[0]['event']);
|
||||||
$this->assertTrue(new DateTime('-5 seconds') < $history[0]['datetime']);
|
$this->assertTrue(new DateTime('-5 seconds') < $history[0]['datetime']);
|
||||||
|
|
||||||
// re-import as private, enable overwriting
|
// re-import as private, enable overwriting
|
||||||
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history);
|
$this->netscapeBookmarkUtils->import($post, $files);
|
||||||
$history = $this->history->getHistory();
|
$history = $this->history->getHistory();
|
||||||
$this->assertEquals(2, count($history));
|
$this->assertEquals(2, count($history));
|
||||||
$this->assertEquals(History::IMPORT, $history[0]['event']);
|
$this->assertEquals(History::IMPORT, $history[0]['event']);
|
||||||
|
|
Loading…
Reference in a new issue