Use NetscapeBookmarkUtils object instance instead of static calls

This commit is contained in:
ArthurHoaro 2020-06-17 15:55:31 +02:00
parent 3447d888d7
commit e8a10f312a
6 changed files with 145 additions and 107 deletions

View file

@ -11,6 +11,7 @@
use Shaarli\Formatter\FormatterFactory;
use Shaarli\History;
use Shaarli\Http\HttpAccess;
use Shaarli\Netscape\NetscapeBookmarkUtils;
use Shaarli\Plugin\PluginManager;
use Shaarli\Render\PageBuilder;
use Shaarli\Render\PageCacheManager;
@ -118,6 +119,10 @@ public function build(): ShaarliContainer
return new HttpAccess();
};
$container['netscapeBookmarkUtils'] = function (ShaarliContainer $container): NetscapeBookmarkUtils {
return new NetscapeBookmarkUtils($container->bookmarkService, $container->conf, $container->history);
};
return $container;
}
}

View file

@ -10,6 +10,7 @@
use Shaarli\Formatter\FormatterFactory;
use Shaarli\History;
use Shaarli\Http\HttpAccess;
use Shaarli\Netscape\NetscapeBookmarkUtils;
use Shaarli\Plugin\PluginManager;
use Shaarli\Render\PageBuilder;
use Shaarli\Render\PageCacheManager;
@ -30,6 +31,7 @@
* @property History $history
* @property HttpAccess $httpAccess
* @property LoginManager $loginManager
* @property NetscapeBookmarkUtils $netscapeBookmarkUtils
* @property PageBuilder $pageBuilder
* @property PageCacheManager $pageCacheManager
* @property PluginManager $pluginManager

View file

@ -16,10 +16,24 @@
/**
* Utilities to import and export bookmarks using the Netscape format
* TODO: Not static, use a container.
*/
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
@ -28,18 +42,16 @@ class NetscapeBookmarkUtils
* - timestamp link addition date, using the Unix epoch format
* - taglist comma-separated tag list
*
* @param BookmarkServiceInterface $bookmarkService Link datastore
* @param BookmarkFormatter $formatter instance
* @param string $selection Which bookmarks to export: (all|private|public)
* @param bool $prependNoteUrl Prepend note permalinks with the server's URL
* @param string $indexUrl Absolute URL of the Shaarli index page
*
* @return array The bookmarks to be exported, with additional fields
*@throws Exception Invalid export selection
*
* @throws Exception Invalid export selection
*/
public static function filterAndFormat(
$bookmarkService,
public function filterAndFormat(
$formatter,
$selection,
$prependNoteUrl,
@ -51,7 +63,7 @@ public static function filterAndFormat(
}
$bookmarkLinks = array();
foreach ($bookmarkService->search([], $selection) as $bookmark) {
foreach ($this->bookmarkService->search([], $selection) as $bookmark) {
$link = $formatter->format($bookmark);
$link['taglist'] = implode(',', $bookmark->getTags());
if ($bookmark->isNote() && $prependNoteUrl) {
@ -64,53 +76,15 @@ public static function filterAndFormat(
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
*
* @param array $post Server $_POST 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
*/
public static function import($post, $files, $bookmarkService, $conf, $history)
public function import($post, $files)
{
$start = time();
$filename = $files['filetoupload']['name'];
@ -141,11 +115,11 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
true, // nested tag support
$defaultTags, // additional user-specified tags
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(
$conf->get('resource.data_dir'),
!$conf->get('dev.debug') ? LogLevel::INFO : LogLevel::DEBUG,
$this->conf->get('resource.data_dir'),
!$this->conf->get('dev.debug') ? LogLevel::INFO : LogLevel::DEBUG,
[
'prefix' => 'import.',
'extension' => 'log',
@ -171,7 +145,7 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
$private = 0;
}
$link = $bookmarkService->findByUrl($bkm['uri']);
$link = $this->bookmarkService->findByUrl($bkm['uri']);
$existingLink = $link !== null;
if (! $existingLink) {
$link = new Bookmark();
@ -193,20 +167,21 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
}
$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->setPrivate($private);
$link->setTagsString($bkm['tags']);
$bookmarkService->addOrSet($link, false);
$this->bookmarkService->addOrSet($link, false);
$importCount++;
}
$bookmarkService->save();
$history->importLinks();
$this->bookmarkService->save();
$this->history->importLinks();
$duration = time() - $start;
return self::importStatus(
return $this->importStatus(
$filename,
$filesize,
$importCount,
@ -215,4 +190,39 @@ public static function import($post, $files, $bookmarkService, $conf, $history)
$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;
}
}

View file

@ -662,13 +662,8 @@ function renderPage($conf, $pluginManager, $bookmarkService, $history, $sessionM
if (! $sessionManager->checkToken($_POST['token'])) {
die('Wrong token.');
}
$status = NetscapeBookmarkUtils::import(
$_POST,
$_FILES,
$bookmarkService,
$conf,
$history
);
$netscapeBookmarkUtils = new NetscapeBookmarkUtils($bookmarkService, $conf, $history);
$status = $netscapeBookmarkUtils->import($_POST, $_FILES);
echo '<script>alert("'.$status.'");document.location=\'./?do='
.Router::$PAGE_IMPORT .'\';</script>';
exit;

View file

@ -1,11 +1,12 @@
<?php
namespace Shaarli\Netscape;
use PHPUnit\Framework\TestCase;
use Shaarli\Bookmark\BookmarkFileService;
use Shaarli\Bookmark\LinkDB;
use Shaarli\Config\ConfigManager;
use Shaarli\Formatter\FormatterFactory;
use Shaarli\Formatter\BookmarkFormatter;
use Shaarli\Formatter\FormatterFactory;
use Shaarli\History;
require_once 'tests/utils/ReferenceLinkDB.php';
@ -13,13 +14,18 @@
/**
* Netscape bookmark export
*/
class BookmarkExportTest extends \PHPUnit\Framework\TestCase
class BookmarkExportTest extends TestCase
{
/**
* @var string datastore to test write operations
*/
protected static $testDatastore = 'sandbox/datastore.php';
/**
* @var ConfigManager instance.
*/
protected static $conf;
/**
* @var \ReferenceLinkDB instance.
*/
@ -35,19 +41,38 @@ class BookmarkExportTest extends \PHPUnit\Framework\TestCase
*/
protected static $formatter;
/**
* @var History instance
*/
protected static $history;
/**
* @var NetscapeBookmarkUtils
*/
protected $netscapeBookmarkUtils;
/**
* Instantiate reference data
*/
public static function setUpBeforeClass()
{
$conf = new ConfigManager('tests/utils/config/configJson');
$conf->set('resource.datastore', self::$testDatastore);
self::$refDb = new \ReferenceLinkDB();
self::$refDb->write(self::$testDatastore);
$history = new History('sandbox/history.php');
self::$bookmarkService = new BookmarkFileService($conf, $history, true);
$factory = new FormatterFactory($conf, true);
self::$formatter = $factory->getFormatter('raw');
static::$conf = new ConfigManager('tests/utils/config/configJson');
static::$conf->set('resource.datastore', static::$testDatastore);
static::$refDb = new \ReferenceLinkDB();
static::$refDb->write(static::$testDatastore);
static::$history = new History('sandbox/history.php');
static::$bookmarkService = new BookmarkFileService(static::$conf, static::$history, true);
$factory = new FormatterFactory(static::$conf, true);
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()
{
NetscapeBookmarkUtils::filterAndFormat(
self::$bookmarkService,
$this->netscapeBookmarkUtils->filterAndFormat(
self::$formatter,
'derp',
false,
@ -71,8 +95,7 @@ public function testFilterAndFormatInvalid()
*/
public function testFilterAndFormatAll()
{
$links = NetscapeBookmarkUtils::filterAndFormat(
self::$bookmarkService,
$links = $this->netscapeBookmarkUtils->filterAndFormat(
self::$formatter,
'all',
false,
@ -97,8 +120,7 @@ public function testFilterAndFormatAll()
*/
public function testFilterAndFormatPrivate()
{
$links = NetscapeBookmarkUtils::filterAndFormat(
self::$bookmarkService,
$links = $this->netscapeBookmarkUtils->filterAndFormat(
self::$formatter,
'private',
false,
@ -123,8 +145,7 @@ public function testFilterAndFormatPrivate()
*/
public function testFilterAndFormatPublic()
{
$links = NetscapeBookmarkUtils::filterAndFormat(
self::$bookmarkService,
$links = $this->netscapeBookmarkUtils->filterAndFormat(
self::$formatter,
'public',
false,
@ -149,8 +170,7 @@ public function testFilterAndFormatPublic()
*/
public function testFilterAndFormatDoNotPrependNoteUrl()
{
$links = NetscapeBookmarkUtils::filterAndFormat(
self::$bookmarkService,
$links = $this->netscapeBookmarkUtils->filterAndFormat(
self::$formatter,
'public',
false,
@ -168,8 +188,7 @@ public function testFilterAndFormatDoNotPrependNoteUrl()
public function testFilterAndFormatPrependNoteUrl()
{
$indexUrl = 'http://localhost:7469/shaarli/';
$links = NetscapeBookmarkUtils::filterAndFormat(
self::$bookmarkService,
$links = $this->netscapeBookmarkUtils->filterAndFormat(
self::$formatter,
'public',
true,

View file

@ -1,11 +1,12 @@
<?php
namespace Shaarli\Netscape;
use DateTime;
use PHPUnit\Framework\TestCase;
use Shaarli\Bookmark\Bookmark;
use Shaarli\Bookmark\BookmarkFilter;
use Shaarli\Bookmark\BookmarkFileService;
use Shaarli\Bookmark\LinkDB;
use Shaarli\Bookmark\BookmarkFilter;
use Shaarli\Config\ConfigManager;
use Shaarli\History;
@ -31,7 +32,7 @@ function file2array($filename)
/**
* Netscape bookmark import
*/
class BookmarkImportTest extends \PHPUnit\Framework\TestCase
class BookmarkImportTest extends TestCase
{
/**
* @var string datastore to test write operations
@ -63,6 +64,11 @@ class BookmarkImportTest extends \PHPUnit\Framework\TestCase
*/
protected $history;
/**
* @var NetscapeBookmarkUtils
*/
protected $netscapeBookmarkUtils;
/**
* @var string Save the current timezone.
*/
@ -91,6 +97,7 @@ protected function setUp()
$this->conf->set('resource.datastore', self::$testDatastore);
$this->history = new History(self::$historyFilePath);
$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(
'File empty.htm (0 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());
}
@ -128,7 +135,7 @@ public function testImportNoDoctype()
$files = file2array('no_doctype.htm');
$this->assertEquals(
'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());
}
@ -142,7 +149,7 @@ public function testImportLowecaseDoctype()
$this->assertStringMatchesFormat(
'File lowercase_doctype.htm (386 bytes) was successfully processed in %d seconds:'
.' 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());
}
@ -157,7 +164,7 @@ public function testImportInternetExplorerEncoding()
$this->assertStringMatchesFormat(
'File internet_explorer_encoding.htm (356 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -185,7 +192,7 @@ public function testImportNested()
$this->assertStringMatchesFormat(
'File netscape_nested.htm (1337 bytes) was successfully processed in %d seconds:'
.' 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(2, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -306,7 +313,7 @@ public function testImportDefaultPrivacyNoPost()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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());
@ -349,7 +356,7 @@ public function testImportKeepPrivacy()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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());
@ -392,7 +399,7 @@ public function testImportAsPublic()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -410,7 +417,7 @@ public function testImportAsPrivate()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(BookmarkFilter::$PRIVATE));
@ -430,7 +437,7 @@ public function testOverwriteAsPublic()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(BookmarkFilter::$PRIVATE));
@ -445,7 +452,7 @@ public function testOverwriteAsPublic()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -465,7 +472,7 @@ public function testOverwriteAsPrivate()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -480,7 +487,7 @@ public function testOverwriteAsPrivate()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(BookmarkFilter::$PRIVATE));
@ -498,7 +505,7 @@ public function testSkipOverwrite()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -508,7 +515,7 @@ public function testSkipOverwrite()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -527,7 +534,7 @@ public function testSetDefaultTags()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -548,7 +555,7 @@ public function testSanitizeDefaultTags()
$this->assertStringMatchesFormat(
'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -573,7 +580,7 @@ public function testImportSameDate()
$this->assertStringMatchesFormat(
'File same_date.htm (453 bytes) was successfully processed in %d seconds:'
.' 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(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
@ -589,14 +596,14 @@ public function testImportCreateUpdateHistory()
'overwrite' => 'true',
];
$files = file2array('netscape_basic.htm');
NetscapeBookmarkUtils::import($post, $files, $this->bookmarkService, $this->conf, $this->history);
$this->netscapeBookmarkUtils->import($post, $files);
$history = $this->history->getHistory();
$this->assertEquals(1, count($history));
$this->assertEquals(History::IMPORT, $history[0]['event']);
$this->assertTrue(new DateTime('-5 seconds') < $history[0]['datetime']);
// 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();
$this->assertEquals(2, count($history));
$this->assertEquals(History::IMPORT, $history[0]['event']);