diff options
author | ArthurHoaro <arthur@hoa.ro> | 2020-10-22 16:21:03 +0200 |
---|---|---|
committer | ArthurHoaro <arthur@hoa.ro> | 2020-11-05 17:54:42 +0100 |
commit | b3bd8c3e8d367975980043e772f7cd78b7f96bc6 (patch) | |
tree | ec79899ea564c093d8b0578f3e614881a4ea7c3d /tests | |
parent | 48df9f45b8c4b2995c1e04146071628668531b37 (diff) | |
download | Shaarli-b3bd8c3e8d367975980043e772f7cd78b7f96bc6.tar.gz Shaarli-b3bd8c3e8d367975980043e772f7cd78b7f96bc6.tar.zst Shaarli-b3bd8c3e8d367975980043e772f7cd78b7f96bc6.zip |
Feature: support any tag separator
So it allows to have multiple words tags.
Breaking change: commas ',' are no longer a default separator.
Fixes #594
Diffstat (limited to 'tests')
11 files changed, 337 insertions, 29 deletions
diff --git a/tests/bookmark/BookmarkFilterTest.php b/tests/bookmark/BookmarkFilterTest.php index 574d8e3f..835674f2 100644 --- a/tests/bookmark/BookmarkFilterTest.php +++ b/tests/bookmark/BookmarkFilterTest.php | |||
@@ -44,7 +44,7 @@ class BookmarkFilterTest extends TestCase | |||
44 | self::$refDB->write(self::$testDatastore); | 44 | self::$refDB->write(self::$testDatastore); |
45 | $history = new History('sandbox/history.php'); | 45 | $history = new History('sandbox/history.php'); |
46 | self::$bookmarkService = new \FakeBookmarkService($conf, $history, $mutex, true); | 46 | self::$bookmarkService = new \FakeBookmarkService($conf, $history, $mutex, true); |
47 | self::$linkFilter = new BookmarkFilter(self::$bookmarkService->getBookmarks()); | 47 | self::$linkFilter = new BookmarkFilter(self::$bookmarkService->getBookmarks(), $conf); |
48 | } | 48 | } |
49 | 49 | ||
50 | /** | 50 | /** |
diff --git a/tests/bookmark/BookmarkTest.php b/tests/bookmark/BookmarkTest.php index 4c1ae25d..cb91b26b 100644 --- a/tests/bookmark/BookmarkTest.php +++ b/tests/bookmark/BookmarkTest.php | |||
@@ -79,6 +79,23 @@ class BookmarkTest extends TestCase | |||
79 | } | 79 | } |
80 | 80 | ||
81 | /** | 81 | /** |
82 | * Test fromArray() with a link with a custom tags separator | ||
83 | */ | ||
84 | public function testFromArrayCustomTagsSeparator() | ||
85 | { | ||
86 | $data = [ | ||
87 | 'id' => 1, | ||
88 | 'tags' => ['tag1', 'tag2', 'chair'], | ||
89 | ]; | ||
90 | |||
91 | $bookmark = (new Bookmark())->fromArray($data, '@'); | ||
92 | $this->assertEquals($data['id'], $bookmark->getId()); | ||
93 | $this->assertEquals($data['tags'], $bookmark->getTags()); | ||
94 | $this->assertEquals('tag1@tag2@chair', $bookmark->getTagsString('@')); | ||
95 | } | ||
96 | |||
97 | |||
98 | /** | ||
82 | * Test validate() with a valid minimal bookmark | 99 | * Test validate() with a valid minimal bookmark |
83 | */ | 100 | */ |
84 | public function testValidateValidFullBookmark() | 101 | public function testValidateValidFullBookmark() |
@@ -252,7 +269,7 @@ class BookmarkTest extends TestCase | |||
252 | { | 269 | { |
253 | $bookmark = new Bookmark(); | 270 | $bookmark = new Bookmark(); |
254 | 271 | ||
255 | $str = 'tag1 tag2 tag3.tag3-2, tag4 , -tag5 '; | 272 | $str = 'tag1 tag2 tag3.tag3-2 tag4 -tag5 '; |
256 | $bookmark->setTagsString($str); | 273 | $bookmark->setTagsString($str); |
257 | $this->assertEquals( | 274 | $this->assertEquals( |
258 | [ | 275 | [ |
@@ -276,9 +293,9 @@ class BookmarkTest extends TestCase | |||
276 | $array = [ | 293 | $array = [ |
277 | 'tag1 ', | 294 | 'tag1 ', |
278 | ' tag2', | 295 | ' tag2', |
279 | 'tag3.tag3-2,', | 296 | 'tag3.tag3-2', |
280 | ', tag4', | 297 | ' tag4', |
281 | ', ', | 298 | ' ', |
282 | '-tag5 ', | 299 | '-tag5 ', |
283 | ]; | 300 | ]; |
284 | $bookmark->setTags($array); | 301 | $bookmark->setTags($array); |
diff --git a/tests/bookmark/LinkUtilsTest.php b/tests/bookmark/LinkUtilsTest.php index 3321242f..c2f9f930 100644 --- a/tests/bookmark/LinkUtilsTest.php +++ b/tests/bookmark/LinkUtilsTest.php | |||
@@ -247,7 +247,8 @@ class LinkUtilsTest extends TestCase | |||
247 | $title, | 247 | $title, |
248 | $desc, | 248 | $desc, |
249 | $keywords, | 249 | $keywords, |
250 | false | 250 | false, |
251 | ' ' | ||
251 | ); | 252 | ); |
252 | 253 | ||
253 | $data = [ | 254 | $data = [ |
@@ -297,7 +298,8 @@ class LinkUtilsTest extends TestCase | |||
297 | $title, | 298 | $title, |
298 | $desc, | 299 | $desc, |
299 | $keywords, | 300 | $keywords, |
300 | false | 301 | false, |
302 | ' ' | ||
301 | ); | 303 | ); |
302 | 304 | ||
303 | $data = [ | 305 | $data = [ |
@@ -330,7 +332,8 @@ class LinkUtilsTest extends TestCase | |||
330 | $title, | 332 | $title, |
331 | $desc, | 333 | $desc, |
332 | $keywords, | 334 | $keywords, |
333 | false | 335 | false, |
336 | ' ' | ||
334 | ); | 337 | ); |
335 | 338 | ||
336 | $data = [ | 339 | $data = [ |
@@ -363,7 +366,8 @@ class LinkUtilsTest extends TestCase | |||
363 | $title, | 366 | $title, |
364 | $desc, | 367 | $desc, |
365 | $keywords, | 368 | $keywords, |
366 | false | 369 | false, |
370 | ' ' | ||
367 | ); | 371 | ); |
368 | 372 | ||
369 | $data = [ | 373 | $data = [ |
@@ -428,7 +432,8 @@ class LinkUtilsTest extends TestCase | |||
428 | $title, | 432 | $title, |
429 | $desc, | 433 | $desc, |
430 | $keywords, | 434 | $keywords, |
431 | true | 435 | true, |
436 | ' ' | ||
432 | ); | 437 | ); |
433 | $data = [ | 438 | $data = [ |
434 | 'th=device-width">' | 439 | 'th=device-width">' |
@@ -575,6 +580,115 @@ class LinkUtilsTest extends TestCase | |||
575 | } | 580 | } |
576 | 581 | ||
577 | /** | 582 | /** |
583 | * Test tags_str2array with whitespace separator. | ||
584 | */ | ||
585 | public function testTagsStr2ArrayWithSpaceSeparator(): void | ||
586 | { | ||
587 | $separator = ' '; | ||
588 | |||
589 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('tag1 tag2 tag3', $separator)); | ||
590 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('tag1 tag2 tag3', $separator)); | ||
591 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array(' tag1 tag2 tag3 ', $separator)); | ||
592 | static::assertSame(['tag1@', 'tag2,', '.tag3'], tags_str2array(' tag1@ tag2, .tag3 ', $separator)); | ||
593 | static::assertSame([], tags_str2array('', $separator)); | ||
594 | static::assertSame([], tags_str2array(' ', $separator)); | ||
595 | static::assertSame([], tags_str2array(null, $separator)); | ||
596 | } | ||
597 | |||
598 | /** | ||
599 | * Test tags_str2array with @ separator. | ||
600 | */ | ||
601 | public function testTagsStr2ArrayWithCharSeparator(): void | ||
602 | { | ||
603 | $separator = '@'; | ||
604 | |||
605 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('tag1@tag2@tag3', $separator)); | ||
606 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('tag1@@@@tag2@@@@tag3', $separator)); | ||
607 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_str2array('@@@tag1@@@tag2@@@@tag3@@', $separator)); | ||
608 | static::assertSame( | ||
609 | ['tag1#', 'tag2, and other', '.tag3'], | ||
610 | tags_str2array('@@@ tag1# @@@ tag2, and other @@@@.tag3@@', $separator) | ||
611 | ); | ||
612 | static::assertSame([], tags_str2array('', $separator)); | ||
613 | static::assertSame([], tags_str2array(' ', $separator)); | ||
614 | static::assertSame([], tags_str2array(null, $separator)); | ||
615 | } | ||
616 | |||
617 | /** | ||
618 | * Test tags_array2str with ' ' separator. | ||
619 | */ | ||
620 | public function testTagsArray2StrWithSpaceSeparator(): void | ||
621 | { | ||
622 | $separator = ' '; | ||
623 | |||
624 | static::assertSame('tag1 tag2 tag3', tags_array2str(['tag1', 'tag2', 'tag3'], $separator)); | ||
625 | static::assertSame('tag1, tag2@ tag3', tags_array2str(['tag1,', 'tag2@', 'tag3'], $separator)); | ||
626 | static::assertSame('tag1 tag2 tag3', tags_array2str([' tag1 ', 'tag2', 'tag3 '], $separator)); | ||
627 | static::assertSame('tag1 tag2 tag3', tags_array2str([' tag1 ', ' ', 'tag2', ' ', 'tag3 '], $separator)); | ||
628 | static::assertSame('tag1', tags_array2str([' tag1 '], $separator)); | ||
629 | static::assertSame('', tags_array2str([' '], $separator)); | ||
630 | static::assertSame('', tags_array2str([], $separator)); | ||
631 | static::assertSame('', tags_array2str(null, $separator)); | ||
632 | } | ||
633 | |||
634 | /** | ||
635 | * Test tags_array2str with @ separator. | ||
636 | */ | ||
637 | public function testTagsArray2StrWithCharSeparator(): void | ||
638 | { | ||
639 | $separator = '@'; | ||
640 | |||
641 | static::assertSame('tag1@tag2@tag3', tags_array2str(['tag1', 'tag2', 'tag3'], $separator)); | ||
642 | static::assertSame('tag1,@tag2@tag3', tags_array2str(['tag1,', 'tag2@', 'tag3'], $separator)); | ||
643 | static::assertSame( | ||
644 | 'tag1@tag2, and other@tag3', | ||
645 | tags_array2str(['@@@@ tag1@@@', ' @tag2, and other @', 'tag3@@@@'], $separator) | ||
646 | ); | ||
647 | static::assertSame('tag1@tag2@tag3', tags_array2str(['@@@tag1@@@', '@', 'tag2', '@@@', 'tag3@@@'], $separator)); | ||
648 | static::assertSame('tag1', tags_array2str(['@@@@tag1@@@@'], $separator)); | ||
649 | static::assertSame('', tags_array2str(['@@@'], $separator)); | ||
650 | static::assertSame('', tags_array2str([], $separator)); | ||
651 | static::assertSame('', tags_array2str(null, $separator)); | ||
652 | } | ||
653 | |||
654 | /** | ||
655 | * Test tags_array2str with @ separator. | ||
656 | */ | ||
657 | public function testTagsFilterWithSpaceSeparator(): void | ||
658 | { | ||
659 | $separator = ' '; | ||
660 | |||
661 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter(['tag1', 'tag2', 'tag3'], $separator)); | ||
662 | static::assertSame(['tag1,', 'tag2@', 'tag3'], tags_filter(['tag1,', 'tag2@', 'tag3'], $separator)); | ||
663 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter([' tag1 ', 'tag2', 'tag3 '], $separator)); | ||
664 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter([' tag1 ', ' ', 'tag2', ' ', 'tag3 '], $separator)); | ||
665 | static::assertSame(['tag1'], tags_filter([' tag1 '], $separator)); | ||
666 | static::assertSame([], tags_filter([' '], $separator)); | ||
667 | static::assertSame([], tags_filter([], $separator)); | ||
668 | static::assertSame([], tags_filter(null, $separator)); | ||
669 | } | ||
670 | |||
671 | /** | ||
672 | * Test tags_array2str with @ separator. | ||
673 | */ | ||
674 | public function testTagsArrayFilterWithSpaceSeparator(): void | ||
675 | { | ||
676 | $separator = '@'; | ||
677 | |||
678 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter(['tag1', 'tag2', 'tag3'], $separator)); | ||
679 | static::assertSame(['tag1,', 'tag2#', 'tag3'], tags_filter(['tag1,', 'tag2#', 'tag3'], $separator)); | ||
680 | static::assertSame( | ||
681 | ['tag1', 'tag2, and other', 'tag3'], | ||
682 | tags_filter(['@@@@ tag1@@@', ' @tag2, and other @', 'tag3@@@@'], $separator) | ||
683 | ); | ||
684 | static::assertSame(['tag1', 'tag2', 'tag3'], tags_filter(['@@@tag1@@@', '@', 'tag2', '@@@', 'tag3@@@'], $separator)); | ||
685 | static::assertSame(['tag1'], tags_filter(['@@@@tag1@@@@'], $separator)); | ||
686 | static::assertSame([], tags_filter(['@@@'], $separator)); | ||
687 | static::assertSame([], tags_filter([], $separator)); | ||
688 | static::assertSame([], tags_filter(null, $separator)); | ||
689 | } | ||
690 | |||
691 | /** | ||
578 | * Util function to build an hashtag link. | 692 | * Util function to build an hashtag link. |
579 | * | 693 | * |
580 | * @param string $hashtag Hashtag name. | 694 | * @param string $hashtag Hashtag name. |
diff --git a/tests/front/controller/admin/ManageTagControllerTest.php b/tests/front/controller/admin/ManageTagControllerTest.php index 8a0ff7a9..af6f273f 100644 --- a/tests/front/controller/admin/ManageTagControllerTest.php +++ b/tests/front/controller/admin/ManageTagControllerTest.php | |||
@@ -6,6 +6,7 @@ namespace Shaarli\Front\Controller\Admin; | |||
6 | 6 | ||
7 | use Shaarli\Bookmark\Bookmark; | 7 | use Shaarli\Bookmark\Bookmark; |
8 | use Shaarli\Bookmark\BookmarkFilter; | 8 | use Shaarli\Bookmark\BookmarkFilter; |
9 | use Shaarli\Config\ConfigManager; | ||
9 | use Shaarli\Front\Exception\WrongTokenException; | 10 | use Shaarli\Front\Exception\WrongTokenException; |
10 | use Shaarli\Security\SessionManager; | 11 | use Shaarli\Security\SessionManager; |
11 | use Shaarli\TestCase; | 12 | use Shaarli\TestCase; |
@@ -44,10 +45,33 @@ class ManageTagControllerTest extends TestCase | |||
44 | static::assertSame('changetag', (string) $result->getBody()); | 45 | static::assertSame('changetag', (string) $result->getBody()); |
45 | 46 | ||
46 | static::assertSame('fromtag', $assignedVariables['fromtag']); | 47 | static::assertSame('fromtag', $assignedVariables['fromtag']); |
48 | static::assertSame('@', $assignedVariables['tags_separator']); | ||
47 | static::assertSame('Manage tags - Shaarli', $assignedVariables['pagetitle']); | 49 | static::assertSame('Manage tags - Shaarli', $assignedVariables['pagetitle']); |
48 | } | 50 | } |
49 | 51 | ||
50 | /** | 52 | /** |
53 | * Test displaying manage tag page | ||
54 | */ | ||
55 | public function testIndexWhitespaceSeparator(): void | ||
56 | { | ||
57 | $assignedVariables = []; | ||
58 | $this->assignTemplateVars($assignedVariables); | ||
59 | |||
60 | $this->container->conf = $this->createMock(ConfigManager::class); | ||
61 | $this->container->conf->method('get')->willReturnCallback(function (string $key) { | ||
62 | return $key === 'general.tags_separator' ? ' ' : $key; | ||
63 | }); | ||
64 | |||
65 | $request = $this->createMock(Request::class); | ||
66 | $response = new Response(); | ||
67 | |||
68 | $this->controller->index($request, $response); | ||
69 | |||
70 | static::assertSame(' ', $assignedVariables['tags_separator']); | ||
71 | static::assertSame('whitespace', $assignedVariables['tags_separator_desc']); | ||
72 | } | ||
73 | |||
74 | /** | ||
51 | * Test posting a tag update - rename tag - valid info provided. | 75 | * Test posting a tag update - rename tag - valid info provided. |
52 | */ | 76 | */ |
53 | public function testSaveRenameTagValid(): void | 77 | public function testSaveRenameTagValid(): void |
@@ -269,4 +293,116 @@ class ManageTagControllerTest extends TestCase | |||
269 | static::assertArrayNotHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); | 293 | static::assertArrayNotHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); |
270 | static::assertSame(['Invalid tags provided.'], $session[SessionManager::KEY_WARNING_MESSAGES]); | 294 | static::assertSame(['Invalid tags provided.'], $session[SessionManager::KEY_WARNING_MESSAGES]); |
271 | } | 295 | } |
296 | |||
297 | /** | ||
298 | * Test changeSeparator to '#': redirection + success message. | ||
299 | */ | ||
300 | public function testChangeSeparatorValid(): void | ||
301 | { | ||
302 | $toSeparator = '#'; | ||
303 | |||
304 | $session = []; | ||
305 | $this->assignSessionVars($session); | ||
306 | |||
307 | $request = $this->createMock(Request::class); | ||
308 | $request | ||
309 | ->expects(static::atLeastOnce()) | ||
310 | ->method('getParam') | ||
311 | ->willReturnCallback(function (string $key) use ($toSeparator): ?string { | ||
312 | return $key === 'separator' ? $toSeparator : $key; | ||
313 | }) | ||
314 | ; | ||
315 | $response = new Response(); | ||
316 | |||
317 | $this->container->conf | ||
318 | ->expects(static::once()) | ||
319 | ->method('set') | ||
320 | ->with('general.tags_separator', $toSeparator, true, true) | ||
321 | ; | ||
322 | |||
323 | $result = $this->controller->changeSeparator($request, $response); | ||
324 | |||
325 | static::assertSame(302, $result->getStatusCode()); | ||
326 | static::assertSame(['/subfolder/admin/tags'], $result->getHeader('location')); | ||
327 | |||
328 | static::assertArrayNotHasKey(SessionManager::KEY_ERROR_MESSAGES, $session); | ||
329 | static::assertArrayNotHasKey(SessionManager::KEY_WARNING_MESSAGES, $session); | ||
330 | static::assertArrayHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); | ||
331 | static::assertSame( | ||
332 | ['Your tags separator setting has been updated!'], | ||
333 | $session[SessionManager::KEY_SUCCESS_MESSAGES] | ||
334 | ); | ||
335 | } | ||
336 | |||
337 | /** | ||
338 | * Test changeSeparator to '#@' (too long): redirection + error message. | ||
339 | */ | ||
340 | public function testChangeSeparatorInvalidTooLong(): void | ||
341 | { | ||
342 | $toSeparator = '#@'; | ||
343 | |||
344 | $session = []; | ||
345 | $this->assignSessionVars($session); | ||
346 | |||
347 | $request = $this->createMock(Request::class); | ||
348 | $request | ||
349 | ->expects(static::atLeastOnce()) | ||
350 | ->method('getParam') | ||
351 | ->willReturnCallback(function (string $key) use ($toSeparator): ?string { | ||
352 | return $key === 'separator' ? $toSeparator : $key; | ||
353 | }) | ||
354 | ; | ||
355 | $response = new Response(); | ||
356 | |||
357 | $this->container->conf->expects(static::never())->method('set'); | ||
358 | |||
359 | $result = $this->controller->changeSeparator($request, $response); | ||
360 | |||
361 | static::assertSame(302, $result->getStatusCode()); | ||
362 | static::assertSame(['/subfolder/admin/tags'], $result->getHeader('location')); | ||
363 | |||
364 | static::assertArrayNotHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); | ||
365 | static::assertArrayNotHasKey(SessionManager::KEY_WARNING_MESSAGES, $session); | ||
366 | static::assertArrayHasKey(SessionManager::KEY_ERROR_MESSAGES, $session); | ||
367 | static::assertSame( | ||
368 | ['Tags separator must be a single character.'], | ||
369 | $session[SessionManager::KEY_ERROR_MESSAGES] | ||
370 | ); | ||
371 | } | ||
372 | |||
373 | /** | ||
374 | * Test changeSeparator to '#@' (too long): redirection + error message. | ||
375 | */ | ||
376 | public function testChangeSeparatorInvalidReservedCharacter(): void | ||
377 | { | ||
378 | $toSeparator = '*'; | ||
379 | |||
380 | $session = []; | ||
381 | $this->assignSessionVars($session); | ||
382 | |||
383 | $request = $this->createMock(Request::class); | ||
384 | $request | ||
385 | ->expects(static::atLeastOnce()) | ||
386 | ->method('getParam') | ||
387 | ->willReturnCallback(function (string $key) use ($toSeparator): ?string { | ||
388 | return $key === 'separator' ? $toSeparator : $key; | ||
389 | }) | ||
390 | ; | ||
391 | $response = new Response(); | ||
392 | |||
393 | $this->container->conf->expects(static::never())->method('set'); | ||
394 | |||
395 | $result = $this->controller->changeSeparator($request, $response); | ||
396 | |||
397 | static::assertSame(302, $result->getStatusCode()); | ||
398 | static::assertSame(['/subfolder/admin/tags'], $result->getHeader('location')); | ||
399 | |||
400 | static::assertArrayNotHasKey(SessionManager::KEY_SUCCESS_MESSAGES, $session); | ||
401 | static::assertArrayNotHasKey(SessionManager::KEY_WARNING_MESSAGES, $session); | ||
402 | static::assertArrayHasKey(SessionManager::KEY_ERROR_MESSAGES, $session); | ||
403 | static::assertStringStartsWith( | ||
404 | 'These characters are reserved and can\'t be used as tags separator', | ||
405 | $session[SessionManager::KEY_ERROR_MESSAGES][0] | ||
406 | ); | ||
407 | } | ||
272 | } | 408 | } |
diff --git a/tests/front/controller/admin/ShaarePublishControllerTest/DisplayCreateFormTest.php b/tests/front/controller/admin/ShaarePublishControllerTest/DisplayCreateFormTest.php index f20b1def..964773da 100644 --- a/tests/front/controller/admin/ShaarePublishControllerTest/DisplayCreateFormTest.php +++ b/tests/front/controller/admin/ShaarePublishControllerTest/DisplayCreateFormTest.php | |||
@@ -101,7 +101,7 @@ class DisplayCreateFormTest extends TestCase | |||
101 | static::assertSame($expectedUrl, $assignedVariables['link']['url']); | 101 | static::assertSame($expectedUrl, $assignedVariables['link']['url']); |
102 | static::assertSame($remoteTitle, $assignedVariables['link']['title']); | 102 | static::assertSame($remoteTitle, $assignedVariables['link']['title']); |
103 | static::assertSame($remoteDesc, $assignedVariables['link']['description']); | 103 | static::assertSame($remoteDesc, $assignedVariables['link']['description']); |
104 | static::assertSame($remoteTags, $assignedVariables['link']['tags']); | 104 | static::assertSame($remoteTags . ' ', $assignedVariables['link']['tags']); |
105 | static::assertFalse($assignedVariables['link']['private']); | 105 | static::assertFalse($assignedVariables['link']['private']); |
106 | 106 | ||
107 | static::assertTrue($assignedVariables['link_is_new']); | 107 | static::assertTrue($assignedVariables['link_is_new']); |
@@ -192,7 +192,7 @@ class DisplayCreateFormTest extends TestCase | |||
192 | 'post' => 'http://url.tld/other?part=3&utm_ad=pay#hash', | 192 | 'post' => 'http://url.tld/other?part=3&utm_ad=pay#hash', |
193 | 'title' => 'Provided Title', | 193 | 'title' => 'Provided Title', |
194 | 'description' => 'Provided description.', | 194 | 'description' => 'Provided description.', |
195 | 'tags' => 'abc def', | 195 | 'tags' => 'abc@def', |
196 | 'private' => '1', | 196 | 'private' => '1', |
197 | 'source' => 'apps', | 197 | 'source' => 'apps', |
198 | ]; | 198 | ]; |
@@ -216,7 +216,7 @@ class DisplayCreateFormTest extends TestCase | |||
216 | static::assertSame($expectedUrl, $assignedVariables['link']['url']); | 216 | static::assertSame($expectedUrl, $assignedVariables['link']['url']); |
217 | static::assertSame($parameters['title'], $assignedVariables['link']['title']); | 217 | static::assertSame($parameters['title'], $assignedVariables['link']['title']); |
218 | static::assertSame($parameters['description'], $assignedVariables['link']['description']); | 218 | static::assertSame($parameters['description'], $assignedVariables['link']['description']); |
219 | static::assertSame($parameters['tags'], $assignedVariables['link']['tags']); | 219 | static::assertSame($parameters['tags'] . '@', $assignedVariables['link']['tags']); |
220 | static::assertTrue($assignedVariables['link']['private']); | 220 | static::assertTrue($assignedVariables['link']['private']); |
221 | static::assertTrue($assignedVariables['link_is_new']); | 221 | static::assertTrue($assignedVariables['link_is_new']); |
222 | static::assertSame($parameters['source'], $assignedVariables['source']); | 222 | static::assertSame($parameters['source'], $assignedVariables['source']); |
@@ -360,7 +360,7 @@ class DisplayCreateFormTest extends TestCase | |||
360 | static::assertSame($expectedUrl, $assignedVariables['link']['url']); | 360 | static::assertSame($expectedUrl, $assignedVariables['link']['url']); |
361 | static::assertSame($title, $assignedVariables['link']['title']); | 361 | static::assertSame($title, $assignedVariables['link']['title']); |
362 | static::assertSame($description, $assignedVariables['link']['description']); | 362 | static::assertSame($description, $assignedVariables['link']['description']); |
363 | static::assertSame(implode(' ', $tags), $assignedVariables['link']['tags']); | 363 | static::assertSame(implode('@', $tags) . '@', $assignedVariables['link']['tags']); |
364 | static::assertTrue($assignedVariables['link']['private']); | 364 | static::assertTrue($assignedVariables['link']['private']); |
365 | static::assertSame($createdAt, $assignedVariables['link']['created']); | 365 | static::assertSame($createdAt, $assignedVariables['link']['created']); |
366 | } | 366 | } |
diff --git a/tests/front/controller/admin/ShaarePublishControllerTest/DisplayEditFormTest.php b/tests/front/controller/admin/ShaarePublishControllerTest/DisplayEditFormTest.php index da393e49..738cea12 100644 --- a/tests/front/controller/admin/ShaarePublishControllerTest/DisplayEditFormTest.php +++ b/tests/front/controller/admin/ShaarePublishControllerTest/DisplayEditFormTest.php | |||
@@ -74,7 +74,7 @@ class DisplayEditFormTest extends TestCase | |||
74 | static::assertSame($url, $assignedVariables['link']['url']); | 74 | static::assertSame($url, $assignedVariables['link']['url']); |
75 | static::assertSame($title, $assignedVariables['link']['title']); | 75 | static::assertSame($title, $assignedVariables['link']['title']); |
76 | static::assertSame($description, $assignedVariables['link']['description']); | 76 | static::assertSame($description, $assignedVariables['link']['description']); |
77 | static::assertSame(implode(' ', $tags), $assignedVariables['link']['tags']); | 77 | static::assertSame(implode('@', $tags) . '@', $assignedVariables['link']['tags']); |
78 | static::assertTrue($assignedVariables['link']['private']); | 78 | static::assertTrue($assignedVariables['link']['private']); |
79 | static::assertSame($createdAt, $assignedVariables['link']['created']); | 79 | static::assertSame($createdAt, $assignedVariables['link']['created']); |
80 | } | 80 | } |
diff --git a/tests/front/controller/visitor/BookmarkListControllerTest.php b/tests/front/controller/visitor/BookmarkListControllerTest.php index 5cbc8c73..dec938f2 100644 --- a/tests/front/controller/visitor/BookmarkListControllerTest.php +++ b/tests/front/controller/visitor/BookmarkListControllerTest.php | |||
@@ -173,7 +173,7 @@ class BookmarkListControllerTest extends TestCase | |||
173 | $request = $this->createMock(Request::class); | 173 | $request = $this->createMock(Request::class); |
174 | $request->method('getParam')->willReturnCallback(function (string $key) { | 174 | $request->method('getParam')->willReturnCallback(function (string $key) { |
175 | if ('searchtags' === $key) { | 175 | if ('searchtags' === $key) { |
176 | return 'abc def'; | 176 | return 'abc@def'; |
177 | } | 177 | } |
178 | if ('searchterm' === $key) { | 178 | if ('searchterm' === $key) { |
179 | return 'ghi jkl'; | 179 | return 'ghi jkl'; |
@@ -204,7 +204,7 @@ class BookmarkListControllerTest extends TestCase | |||
204 | ->expects(static::once()) | 204 | ->expects(static::once()) |
205 | ->method('search') | 205 | ->method('search') |
206 | ->with( | 206 | ->with( |
207 | ['searchtags' => 'abc def', 'searchterm' => 'ghi jkl'], | 207 | ['searchtags' => 'abc@def', 'searchterm' => 'ghi jkl'], |
208 | 'private', | 208 | 'private', |
209 | false, | 209 | false, |
210 | true | 210 | true |
@@ -222,7 +222,7 @@ class BookmarkListControllerTest extends TestCase | |||
222 | static::assertSame('linklist', (string) $result->getBody()); | 222 | static::assertSame('linklist', (string) $result->getBody()); |
223 | 223 | ||
224 | static::assertSame('Search: ghi jkl [abc] [def] - Shaarli', $assignedVariables['pagetitle']); | 224 | static::assertSame('Search: ghi jkl [abc] [def] - Shaarli', $assignedVariables['pagetitle']); |
225 | static::assertSame('?page=2&searchterm=ghi+jkl&searchtags=abc+def', $assignedVariables['previous_page_url']); | 225 | static::assertSame('?page=2&searchterm=ghi+jkl&searchtags=abc%40def', $assignedVariables['previous_page_url']); |
226 | } | 226 | } |
227 | 227 | ||
228 | /** | 228 | /** |
diff --git a/tests/front/controller/visitor/FrontControllerMockHelper.php b/tests/front/controller/visitor/FrontControllerMockHelper.php index fc0bb7d1..02229f68 100644 --- a/tests/front/controller/visitor/FrontControllerMockHelper.php +++ b/tests/front/controller/visitor/FrontControllerMockHelper.php | |||
@@ -41,6 +41,10 @@ trait FrontControllerMockHelper | |||
41 | // Config | 41 | // Config |
42 | $this->container->conf = $this->createMock(ConfigManager::class); | 42 | $this->container->conf = $this->createMock(ConfigManager::class); |
43 | $this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) { | 43 | $this->container->conf->method('get')->willReturnCallback(function (string $parameter, $default) { |
44 | if ($parameter === 'general.tags_separator') { | ||
45 | return '@'; | ||
46 | } | ||
47 | |||
44 | return $default === null ? $parameter : $default; | 48 | return $default === null ? $parameter : $default; |
45 | }); | 49 | }); |
46 | 50 | ||
diff --git a/tests/front/controller/visitor/TagCloudControllerTest.php b/tests/front/controller/visitor/TagCloudControllerTest.php index 9305612e..4915573d 100644 --- a/tests/front/controller/visitor/TagCloudControllerTest.php +++ b/tests/front/controller/visitor/TagCloudControllerTest.php | |||
@@ -100,7 +100,7 @@ class TagCloudControllerTest extends TestCase | |||
100 | ->with() | 100 | ->with() |
101 | ->willReturnCallback(function (string $key): ?string { | 101 | ->willReturnCallback(function (string $key): ?string { |
102 | if ('searchtags' === $key) { | 102 | if ('searchtags' === $key) { |
103 | return 'ghi def'; | 103 | return 'ghi@def'; |
104 | } | 104 | } |
105 | 105 | ||
106 | return null; | 106 | return null; |
@@ -131,7 +131,7 @@ class TagCloudControllerTest extends TestCase | |||
131 | ->withConsecutive(['render_tagcloud']) | 131 | ->withConsecutive(['render_tagcloud']) |
132 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 132 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
133 | if ('render_tagcloud' === $hook) { | 133 | if ('render_tagcloud' === $hook) { |
134 | static::assertSame('ghi def', $data['search_tags']); | 134 | static::assertSame('ghi@def@', $data['search_tags']); |
135 | static::assertCount(1, $data['tags']); | 135 | static::assertCount(1, $data['tags']); |
136 | 136 | ||
137 | static::assertArrayHasKey('loggedin', $param); | 137 | static::assertArrayHasKey('loggedin', $param); |
@@ -147,7 +147,7 @@ class TagCloudControllerTest extends TestCase | |||
147 | static::assertSame('tag.cloud', (string) $result->getBody()); | 147 | static::assertSame('tag.cloud', (string) $result->getBody()); |
148 | static::assertSame('ghi def - Tag cloud - Shaarli', $assignedVariables['pagetitle']); | 148 | static::assertSame('ghi def - Tag cloud - Shaarli', $assignedVariables['pagetitle']); |
149 | 149 | ||
150 | static::assertSame('ghi def', $assignedVariables['search_tags']); | 150 | static::assertSame('ghi@def@', $assignedVariables['search_tags']); |
151 | static::assertCount(1, $assignedVariables['tags']); | 151 | static::assertCount(1, $assignedVariables['tags']); |
152 | 152 | ||
153 | static::assertArrayHasKey('abc', $assignedVariables['tags']); | 153 | static::assertArrayHasKey('abc', $assignedVariables['tags']); |
@@ -277,7 +277,7 @@ class TagCloudControllerTest extends TestCase | |||
277 | ->with() | 277 | ->with() |
278 | ->willReturnCallback(function (string $key): ?string { | 278 | ->willReturnCallback(function (string $key): ?string { |
279 | if ('searchtags' === $key) { | 279 | if ('searchtags' === $key) { |
280 | return 'ghi def'; | 280 | return 'ghi@def'; |
281 | } elseif ('sort' === $key) { | 281 | } elseif ('sort' === $key) { |
282 | return 'alpha'; | 282 | return 'alpha'; |
283 | } | 283 | } |
@@ -310,7 +310,7 @@ class TagCloudControllerTest extends TestCase | |||
310 | ->withConsecutive(['render_taglist']) | 310 | ->withConsecutive(['render_taglist']) |
311 | ->willReturnCallback(function (string $hook, array $data, array $param): array { | 311 | ->willReturnCallback(function (string $hook, array $data, array $param): array { |
312 | if ('render_taglist' === $hook) { | 312 | if ('render_taglist' === $hook) { |
313 | static::assertSame('ghi def', $data['search_tags']); | 313 | static::assertSame('ghi@def@', $data['search_tags']); |
314 | static::assertCount(1, $data['tags']); | 314 | static::assertCount(1, $data['tags']); |
315 | 315 | ||
316 | static::assertArrayHasKey('loggedin', $param); | 316 | static::assertArrayHasKey('loggedin', $param); |
@@ -326,7 +326,7 @@ class TagCloudControllerTest extends TestCase | |||
326 | static::assertSame('tag.list', (string) $result->getBody()); | 326 | static::assertSame('tag.list', (string) $result->getBody()); |
327 | static::assertSame('ghi def - Tag list - Shaarli', $assignedVariables['pagetitle']); | 327 | static::assertSame('ghi def - Tag list - Shaarli', $assignedVariables['pagetitle']); |
328 | 328 | ||
329 | static::assertSame('ghi def', $assignedVariables['search_tags']); | 329 | static::assertSame('ghi@def@', $assignedVariables['search_tags']); |
330 | static::assertCount(1, $assignedVariables['tags']); | 330 | static::assertCount(1, $assignedVariables['tags']); |
331 | static::assertSame(3, $assignedVariables['tags']['abc']); | 331 | static::assertSame(3, $assignedVariables['tags']['abc']); |
332 | } | 332 | } |
diff --git a/tests/front/controller/visitor/TagControllerTest.php b/tests/front/controller/visitor/TagControllerTest.php index 750ea02d..5a556c6d 100644 --- a/tests/front/controller/visitor/TagControllerTest.php +++ b/tests/front/controller/visitor/TagControllerTest.php | |||
@@ -50,7 +50,7 @@ class TagControllerTest extends TestCase | |||
50 | 50 | ||
51 | static::assertInstanceOf(Response::class, $result); | 51 | static::assertInstanceOf(Response::class, $result); |
52 | static::assertSame(302, $result->getStatusCode()); | 52 | static::assertSame(302, $result->getStatusCode()); |
53 | static::assertSame(['/controller/?searchtags=def+abc'], $result->getHeader('location')); | 53 | static::assertSame(['/controller/?searchtags=def%40abc'], $result->getHeader('location')); |
54 | } | 54 | } |
55 | 55 | ||
56 | public function testAddTagWithoutRefererAndExistingSearch(): void | 56 | public function testAddTagWithoutRefererAndExistingSearch(): void |
@@ -80,7 +80,7 @@ class TagControllerTest extends TestCase | |||
80 | 80 | ||
81 | static::assertInstanceOf(Response::class, $result); | 81 | static::assertInstanceOf(Response::class, $result); |
82 | static::assertSame(302, $result->getStatusCode()); | 82 | static::assertSame(302, $result->getStatusCode()); |
83 | static::assertSame(['/controller/?searchtags=def+abc'], $result->getHeader('location')); | 83 | static::assertSame(['/controller/?searchtags=def%40abc'], $result->getHeader('location')); |
84 | } | 84 | } |
85 | 85 | ||
86 | public function testAddTagResetPagination(): void | 86 | public function testAddTagResetPagination(): void |
@@ -96,7 +96,7 @@ class TagControllerTest extends TestCase | |||
96 | 96 | ||
97 | static::assertInstanceOf(Response::class, $result); | 97 | static::assertInstanceOf(Response::class, $result); |
98 | static::assertSame(302, $result->getStatusCode()); | 98 | static::assertSame(302, $result->getStatusCode()); |
99 | static::assertSame(['/controller/?searchtags=def+abc'], $result->getHeader('location')); | 99 | static::assertSame(['/controller/?searchtags=def%40abc'], $result->getHeader('location')); |
100 | } | 100 | } |
101 | 101 | ||
102 | public function testAddTagWithRefererAndEmptySearch(): void | 102 | public function testAddTagWithRefererAndEmptySearch(): void |
diff --git a/tests/netscape/BookmarkImportTest.php b/tests/netscape/BookmarkImportTest.php index c526d5c8..6856ebca 100644 --- a/tests/netscape/BookmarkImportTest.php +++ b/tests/netscape/BookmarkImportTest.php | |||
@@ -531,7 +531,7 @@ class BookmarkImportTest extends TestCase | |||
531 | { | 531 | { |
532 | $post = array( | 532 | $post = array( |
533 | 'privacy' => 'public', | 533 | 'privacy' => 'public', |
534 | 'default_tags' => 'tag1,tag2 tag3' | 534 | 'default_tags' => 'tag1 tag2 tag3' |
535 | ); | 535 | ); |
536 | $files = file2array('netscape_basic.htm'); | 536 | $files = file2array('netscape_basic.htm'); |
537 | $this->assertStringMatchesFormat( | 537 | $this->assertStringMatchesFormat( |
@@ -552,7 +552,7 @@ class BookmarkImportTest extends TestCase | |||
552 | { | 552 | { |
553 | $post = array( | 553 | $post = array( |
554 | 'privacy' => 'public', | 554 | 'privacy' => 'public', |
555 | 'default_tags' => 'tag1&,tag2 "tag3"' | 555 | 'default_tags' => 'tag1& tag2 "tag3"' |
556 | ); | 556 | ); |
557 | $files = file2array('netscape_basic.htm'); | 557 | $files = file2array('netscape_basic.htm'); |
558 | $this->assertStringMatchesFormat( | 558 | $this->assertStringMatchesFormat( |
@@ -573,6 +573,43 @@ class BookmarkImportTest extends TestCase | |||
573 | } | 573 | } |
574 | 574 | ||
575 | /** | 575 | /** |
576 | * Add user-specified tags to all imported bookmarks | ||
577 | */ | ||
578 | public function testSetDefaultTagsWithCustomSeparator() | ||
579 | { | ||
580 | $separator = '@'; | ||
581 | $this->conf->set('general.tags_separator', $separator); | ||
582 | $post = [ | ||
583 | 'privacy' => 'public', | ||
584 | 'default_tags' => 'tag1@tag2@tag3@multiple words tag' | ||
585 | ]; | ||
586 | $files = file2array('netscape_basic.htm'); | ||
587 | $this->assertStringMatchesFormat( | ||
588 | 'File netscape_basic.htm (482 bytes) was successfully processed in %d seconds:' | ||
589 | .' 2 bookmarks imported, 0 bookmarks overwritten, 0 bookmarks skipped.', | ||
590 | $this->netscapeBookmarkUtils->import($post, $files) | ||
591 | ); | ||
592 | $this->assertEquals(2, $this->bookmarkService->count()); | ||
593 | $this->assertEquals(0, $this->bookmarkService->count(BookmarkFilter::$PRIVATE)); | ||
594 | $this->assertEquals( | ||
595 | 'tag1@tag2@tag3@multiple words tag@private@secret', | ||
596 | $this->bookmarkService->get(0)->getTagsString($separator) | ||
597 | ); | ||
598 | $this->assertEquals( | ||
599 | ['tag1', 'tag2', 'tag3', 'multiple words tag', 'private', 'secret'], | ||
600 | $this->bookmarkService->get(0)->getTags() | ||
601 | ); | ||
602 | $this->assertEquals( | ||
603 | 'tag1@tag2@tag3@multiple words tag@public@hello@world', | ||
604 | $this->bookmarkService->get(1)->getTagsString($separator) | ||
605 | ); | ||
606 | $this->assertEquals( | ||
607 | ['tag1', 'tag2', 'tag3', 'multiple words tag', 'public', 'hello', 'world'], | ||
608 | $this->bookmarkService->get(1)->getTags() | ||
609 | ); | ||
610 | } | ||
611 | |||
612 | /** | ||
576 | * Ensure each imported bookmark has a unique id | 613 | * Ensure each imported bookmark has a unique id |
577 | * | 614 | * |
578 | * See https://github.com/shaarli/Shaarli/issues/351 | 615 | * See https://github.com/shaarli/Shaarli/issues/351 |