namespace Shaarli\Netscape;
use DateTime;
-use PHPUnit\Framework\TestCase;
+use malkusch\lock\mutex\NoMutex;
+use Psr\Http\Message\UploadedFileInterface;
use Shaarli\Bookmark\Bookmark;
use Shaarli\Bookmark\BookmarkFileService;
use Shaarli\Bookmark\BookmarkFilter;
use Shaarli\Config\ConfigManager;
use Shaarli\History;
+use Shaarli\TestCase;
+use Slim\Http\UploadedFile;
/**
* Utility function to load a file's metadata in a $_FILES-like array
*
* @param string $filename Basename of the file
*
- * @return array A $_FILES-like array
+ * @return UploadedFileInterface Upload file in PSR-7 compatible object
*/
function file2array($filename)
{
- return array(
- 'filetoupload' => array(
- 'name' => $filename,
- 'tmp_name' => __DIR__ . '/input/' . $filename,
- 'size' => filesize(__DIR__ . '/input/' . $filename)
- )
+ return new UploadedFile(
+ __DIR__ . '/input/' . $filename,
+ $filename,
+ null,
+ filesize(__DIR__ . '/input/' . $filename)
);
}
*/
protected static $defaultTimeZone;
- public static function setUpBeforeClass()
+ public static function setUpBeforeClass(): void
{
self::$defaultTimeZone = date_default_timezone_get();
// Timezone without DST for test consistency
/**
* Resets test data before each test
*/
- protected function setUp()
+ protected function setUp(): void
{
+ $mutex = new NoMutex();
if (file_exists(self::$testDatastore)) {
unlink(self::$testDatastore);
}
$this->conf->set('resource.page_cache', $this->pagecache);
$this->conf->set('resource.datastore', self::$testDatastore);
$this->history = new History(self::$historyFilePath);
- $this->bookmarkService = new BookmarkFileService($this->conf, $this->history, true);
+ $this->bookmarkService = new BookmarkFileService($this->conf, $this->history, $mutex, true);
$this->netscapeBookmarkUtils = new NetscapeBookmarkUtils($this->bookmarkService, $this->conf, $this->history);
}
/**
* Delete history file.
*/
- public function tearDown()
+ protected function tearDown(): void
{
@unlink(self::$historyFilePath);
}
- public static function tearDownAfterClass()
+ public static function tearDownAfterClass(): void
{
date_default_timezone_set(self::$defaultTimeZone);
}
{
$post = array(
'privacy' => 'public',
- 'default_tags' => 'tag1,tag2 tag3'
+ 'default_tags' => 'tag1 tag2 tag3'
);
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
{
$post = array(
'privacy' => 'public',
- 'default_tags' => 'tag1&,tag2 "tag3"'
+ 'default_tags' => 'tag1& tag2 "tag3"'
);
$files = file2array('netscape_basic.htm');
$this->assertStringMatchesFormat(
);
}
+ /**
+ * Add user-specified tags to all imported bookmarks
+ */
+ public function testSetDefaultTagsWithCustomSeparator()
+ {
+ $separator = '@';
+ $this->conf->set('general.tags_separator', $separator);
+ $post = [
+ 'privacy' => 'public',
+ 'default_tags' => 'tag1@tag2@tag3@multiple words tag'
+ ];
+ $files = file2array('netscape_basic.htm');
+ $this->assertStringMatchesFormat(
+ 'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:'
+ .' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.',
+ $this->netscapeBookmarkUtils->import($post, $files)
+ );
+ $this->assertEquals(2, $this->bookmarkService->count());
+ $this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE));
+ $this->assertEquals(
+ 'tag1@tag2@tag3@multiple words tag@private@secret',
+ $this->bookmarkService->get(0)->getTagsString($separator)
+ );
+ $this->assertEquals(
+ ['tag1', 'tag2', 'tag3', 'multiple words tag', 'private', 'secret'],
+ $this->bookmarkService->get(0)->getTags()
+ );
+ $this->assertEquals(
+ 'tag1@tag2@tag3@multiple words tag@public@hello@world',
+ $this->bookmarkService->get(1)->getTagsString($separator)
+ );
+ $this->assertEquals(
+ ['tag1', 'tag2', 'tag3', 'multiple words tag', 'public', 'hello', 'world'],
+ $this->bookmarkService->get(1)->getTags()
+ );
+ }
+
/**
* Ensure each imported bookmark has a unique id
*