diff options
Diffstat (limited to 'tests/bookmark/BookmarkFileServiceTest.php')
-rw-r--r-- | tests/bookmark/BookmarkFileServiceTest.php | 259 |
1 files changed, 162 insertions, 97 deletions
diff --git a/tests/bookmark/BookmarkFileServiceTest.php b/tests/bookmark/BookmarkFileServiceTest.php index c399822b..f619aff3 100644 --- a/tests/bookmark/BookmarkFileServiceTest.php +++ b/tests/bookmark/BookmarkFileServiceTest.php | |||
@@ -6,6 +6,7 @@ | |||
6 | namespace Shaarli\Bookmark; | 6 | namespace Shaarli\Bookmark; |
7 | 7 | ||
8 | use DateTime; | 8 | use DateTime; |
9 | use malkusch\lock\mutex\NoMutex; | ||
9 | use ReferenceLinkDB; | 10 | use ReferenceLinkDB; |
10 | use ReflectionClass; | 11 | use ReflectionClass; |
11 | use Shaarli; | 12 | use Shaarli; |
@@ -52,6 +53,9 @@ class BookmarkFileServiceTest extends TestCase | |||
52 | */ | 53 | */ |
53 | protected $privateLinkDB = null; | 54 | protected $privateLinkDB = null; |
54 | 55 | ||
56 | /** @var NoMutex */ | ||
57 | protected $mutex; | ||
58 | |||
55 | /** | 59 | /** |
56 | * Instantiates public and private LinkDBs with test data | 60 | * Instantiates public and private LinkDBs with test data |
57 | * | 61 | * |
@@ -68,6 +72,8 @@ class BookmarkFileServiceTest extends TestCase | |||
68 | */ | 72 | */ |
69 | protected function setUp(): void | 73 | protected function setUp(): void |
70 | { | 74 | { |
75 | $this->mutex = new NoMutex(); | ||
76 | |||
71 | if (file_exists(self::$testDatastore)) { | 77 | if (file_exists(self::$testDatastore)) { |
72 | unlink(self::$testDatastore); | 78 | unlink(self::$testDatastore); |
73 | } | 79 | } |
@@ -87,8 +93,8 @@ class BookmarkFileServiceTest extends TestCase | |||
87 | $this->refDB = new \ReferenceLinkDB(); | 93 | $this->refDB = new \ReferenceLinkDB(); |
88 | $this->refDB->write(self::$testDatastore); | 94 | $this->refDB->write(self::$testDatastore); |
89 | $this->history = new History('sandbox/history.php'); | 95 | $this->history = new History('sandbox/history.php'); |
90 | $this->publicLinkDB = new BookmarkFileService($this->conf, $this->history, false); | 96 | $this->publicLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, false); |
91 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 97 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
92 | } | 98 | } |
93 | 99 | ||
94 | /** | 100 | /** |
@@ -105,7 +111,7 @@ class BookmarkFileServiceTest extends TestCase | |||
105 | $db = self::getMethod('migrate'); | 111 | $db = self::getMethod('migrate'); |
106 | $db->invokeArgs($this->privateLinkDB, []); | 112 | $db->invokeArgs($this->privateLinkDB, []); |
107 | 113 | ||
108 | $db = new \FakeBookmarkService($this->conf, $this->history, true); | 114 | $db = new \FakeBookmarkService($this->conf, $this->history, $this->mutex, true); |
109 | $this->assertInstanceOf(BookmarkArray::class, $db->getBookmarks()); | 115 | $this->assertInstanceOf(BookmarkArray::class, $db->getBookmarks()); |
110 | $this->assertEquals($this->refDB->countLinks(), $db->count()); | 116 | $this->assertEquals($this->refDB->countLinks(), $db->count()); |
111 | } | 117 | } |
@@ -174,7 +180,7 @@ class BookmarkFileServiceTest extends TestCase | |||
174 | $this->assertEquals($updated, $bookmark->getUpdated()); | 180 | $this->assertEquals($updated, $bookmark->getUpdated()); |
175 | 181 | ||
176 | // reload from file | 182 | // reload from file |
177 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 183 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
178 | 184 | ||
179 | $bookmark = $this->privateLinkDB->get(43); | 185 | $bookmark = $this->privateLinkDB->get(43); |
180 | $this->assertEquals(43, $bookmark->getId()); | 186 | $this->assertEquals(43, $bookmark->getId()); |
@@ -212,7 +218,7 @@ class BookmarkFileServiceTest extends TestCase | |||
212 | $this->assertNull($bookmark->getUpdated()); | 218 | $this->assertNull($bookmark->getUpdated()); |
213 | 219 | ||
214 | // reload from file | 220 | // reload from file |
215 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 221 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
216 | 222 | ||
217 | $bookmark = $this->privateLinkDB->get(43); | 223 | $bookmark = $this->privateLinkDB->get(43); |
218 | $this->assertEquals(43, $bookmark->getId()); | 224 | $this->assertEquals(43, $bookmark->getId()); |
@@ -242,7 +248,7 @@ class BookmarkFileServiceTest extends TestCase | |||
242 | $this->assertEquals(43, $bookmark->getId()); | 248 | $this->assertEquals(43, $bookmark->getId()); |
243 | 249 | ||
244 | // reload from file | 250 | // reload from file |
245 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 251 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
246 | 252 | ||
247 | $this->privateLinkDB->get(43); | 253 | $this->privateLinkDB->get(43); |
248 | } | 254 | } |
@@ -259,17 +265,6 @@ class BookmarkFileServiceTest extends TestCase | |||
259 | } | 265 | } |
260 | 266 | ||
261 | /** | 267 | /** |
262 | * Test add() method with an entry which is not a bookmark instance | ||
263 | */ | ||
264 | public function testAddNotABookmark() | ||
265 | { | ||
266 | $this->expectException(\Exception::class); | ||
267 | $this->expectExceptionMessage('Provided data is invalid'); | ||
268 | |||
269 | $this->privateLinkDB->add(['title' => 'hi!']); | ||
270 | } | ||
271 | |||
272 | /** | ||
273 | * Test add() method with a Bookmark already containing an ID | 268 | * Test add() method with a Bookmark already containing an ID |
274 | */ | 269 | */ |
275 | public function testAddWithId() | 270 | public function testAddWithId() |
@@ -314,7 +309,7 @@ class BookmarkFileServiceTest extends TestCase | |||
314 | $this->assertTrue(new \DateTime('5 seconds ago') < $bookmark->getUpdated()); | 309 | $this->assertTrue(new \DateTime('5 seconds ago') < $bookmark->getUpdated()); |
315 | 310 | ||
316 | // reload from file | 311 | // reload from file |
317 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 312 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
318 | 313 | ||
319 | $bookmark = $this->privateLinkDB->get(42); | 314 | $bookmark = $this->privateLinkDB->get(42); |
320 | $this->assertEquals(42, $bookmark->getId()); | 315 | $this->assertEquals(42, $bookmark->getId()); |
@@ -355,7 +350,7 @@ class BookmarkFileServiceTest extends TestCase | |||
355 | $this->assertTrue(new \DateTime('5 seconds ago') < $bookmark->getUpdated()); | 350 | $this->assertTrue(new \DateTime('5 seconds ago') < $bookmark->getUpdated()); |
356 | 351 | ||
357 | // reload from file | 352 | // reload from file |
358 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 353 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
359 | 354 | ||
360 | $bookmark = $this->privateLinkDB->get(42); | 355 | $bookmark = $this->privateLinkDB->get(42); |
361 | $this->assertEquals(42, $bookmark->getId()); | 356 | $this->assertEquals(42, $bookmark->getId()); |
@@ -388,7 +383,7 @@ class BookmarkFileServiceTest extends TestCase | |||
388 | $this->assertEquals($title, $bookmark->getTitle()); | 383 | $this->assertEquals($title, $bookmark->getTitle()); |
389 | 384 | ||
390 | // reload from file | 385 | // reload from file |
391 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 386 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
392 | 387 | ||
393 | $bookmark = $this->privateLinkDB->get(42); | 388 | $bookmark = $this->privateLinkDB->get(42); |
394 | $this->assertEquals(42, $bookmark->getId()); | 389 | $this->assertEquals(42, $bookmark->getId()); |
@@ -407,17 +402,6 @@ class BookmarkFileServiceTest extends TestCase | |||
407 | } | 402 | } |
408 | 403 | ||
409 | /** | 404 | /** |
410 | * Test set() method with an entry which is not a bookmark instance | ||
411 | */ | ||
412 | public function testSetNotABookmark() | ||
413 | { | ||
414 | $this->expectException(\Exception::class); | ||
415 | $this->expectExceptionMessage('Provided data is invalid'); | ||
416 | |||
417 | $this->privateLinkDB->set(['title' => 'hi!']); | ||
418 | } | ||
419 | |||
420 | /** | ||
421 | * Test set() method with a Bookmark without an ID defined. | 405 | * Test set() method with a Bookmark without an ID defined. |
422 | */ | 406 | */ |
423 | public function testSetWithoutId() | 407 | public function testSetWithoutId() |
@@ -452,7 +436,7 @@ class BookmarkFileServiceTest extends TestCase | |||
452 | $this->assertEquals(43, $bookmark->getId()); | 436 | $this->assertEquals(43, $bookmark->getId()); |
453 | 437 | ||
454 | // reload from file | 438 | // reload from file |
455 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 439 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
456 | 440 | ||
457 | $bookmark = $this->privateLinkDB->get(43); | 441 | $bookmark = $this->privateLinkDB->get(43); |
458 | $this->assertEquals(43, $bookmark->getId()); | 442 | $this->assertEquals(43, $bookmark->getId()); |
@@ -472,7 +456,7 @@ class BookmarkFileServiceTest extends TestCase | |||
472 | $this->assertEquals($title, $bookmark->getTitle()); | 456 | $this->assertEquals($title, $bookmark->getTitle()); |
473 | 457 | ||
474 | // reload from file | 458 | // reload from file |
475 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 459 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
476 | 460 | ||
477 | $bookmark = $this->privateLinkDB->get(42); | 461 | $bookmark = $this->privateLinkDB->get(42); |
478 | $this->assertEquals(42, $bookmark->getId()); | 462 | $this->assertEquals(42, $bookmark->getId()); |
@@ -491,17 +475,6 @@ class BookmarkFileServiceTest extends TestCase | |||
491 | } | 475 | } |
492 | 476 | ||
493 | /** | 477 | /** |
494 | * Test addOrSet() method with an entry which is not a bookmark instance | ||
495 | */ | ||
496 | public function testAddOrSetNotABookmark() | ||
497 | { | ||
498 | $this->expectException(\Exception::class); | ||
499 | $this->expectExceptionMessage('Provided data is invalid'); | ||
500 | |||
501 | $this->privateLinkDB->addOrSet(['title' => 'hi!']); | ||
502 | } | ||
503 | |||
504 | /** | ||
505 | * Test addOrSet() method for a bookmark without any field set and without writing the data store | 478 | * Test addOrSet() method for a bookmark without any field set and without writing the data store |
506 | */ | 479 | */ |
507 | public function testAddOrSetMinimalNoWrite() | 480 | public function testAddOrSetMinimalNoWrite() |
@@ -515,7 +488,7 @@ class BookmarkFileServiceTest extends TestCase | |||
515 | $this->assertEquals($title, $bookmark->getTitle()); | 488 | $this->assertEquals($title, $bookmark->getTitle()); |
516 | 489 | ||
517 | // reload from file | 490 | // reload from file |
518 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 491 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
519 | 492 | ||
520 | $bookmark = $this->privateLinkDB->get(42); | 493 | $bookmark = $this->privateLinkDB->get(42); |
521 | $this->assertEquals(42, $bookmark->getId()); | 494 | $this->assertEquals(42, $bookmark->getId()); |
@@ -541,7 +514,7 @@ class BookmarkFileServiceTest extends TestCase | |||
541 | $this->assertInstanceOf(BookmarkNotFoundException::class, $exception); | 514 | $this->assertInstanceOf(BookmarkNotFoundException::class, $exception); |
542 | 515 | ||
543 | // reload from file | 516 | // reload from file |
544 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, true); | 517 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
545 | 518 | ||
546 | $this->privateLinkDB->get(42); | 519 | $this->privateLinkDB->get(42); |
547 | } | 520 | } |
@@ -559,17 +532,6 @@ class BookmarkFileServiceTest extends TestCase | |||
559 | } | 532 | } |
560 | 533 | ||
561 | /** | 534 | /** |
562 | * Test remove() method with an entry which is not a bookmark instance | ||
563 | */ | ||
564 | public function testRemoveNotABookmark() | ||
565 | { | ||
566 | $this->expectException(\Exception::class); | ||
567 | $this->expectExceptionMessage('Provided data is invalid'); | ||
568 | |||
569 | $this->privateLinkDB->remove(['title' => 'hi!']); | ||
570 | } | ||
571 | |||
572 | /** | ||
573 | * Test remove() method with a Bookmark with an unknown ID | 535 | * Test remove() method with a Bookmark with an unknown ID |
574 | */ | 536 | */ |
575 | public function testRemoveWithUnknownId() | 537 | public function testRemoveWithUnknownId() |
@@ -645,7 +607,7 @@ class BookmarkFileServiceTest extends TestCase | |||
645 | 607 | ||
646 | $conf = new ConfigManager('tests/utils/config/configJson'); | 608 | $conf = new ConfigManager('tests/utils/config/configJson'); |
647 | $conf->set('resource.datastore', 'null/store.db'); | 609 | $conf->set('resource.datastore', 'null/store.db'); |
648 | new BookmarkFileService($conf, $this->history, true); | 610 | new BookmarkFileService($conf, $this->history, $this->mutex, true); |
649 | } | 611 | } |
650 | 612 | ||
651 | /** | 613 | /** |
@@ -655,7 +617,7 @@ class BookmarkFileServiceTest extends TestCase | |||
655 | { | 617 | { |
656 | unlink(self::$testDatastore); | 618 | unlink(self::$testDatastore); |
657 | $this->assertFileNotExists(self::$testDatastore); | 619 | $this->assertFileNotExists(self::$testDatastore); |
658 | new BookmarkFileService($this->conf, $this->history, true); | 620 | new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
659 | $this->assertFileExists(self::$testDatastore); | 621 | $this->assertFileExists(self::$testDatastore); |
660 | 622 | ||
661 | // ensure the correct data has been written | 623 | // ensure the correct data has been written |
@@ -669,7 +631,7 @@ class BookmarkFileServiceTest extends TestCase | |||
669 | { | 631 | { |
670 | unlink(self::$testDatastore); | 632 | unlink(self::$testDatastore); |
671 | $this->assertFileNotExists(self::$testDatastore); | 633 | $this->assertFileNotExists(self::$testDatastore); |
672 | $db = new \FakeBookmarkService($this->conf, $this->history, false); | 634 | $db = new \FakeBookmarkService($this->conf, $this->history, $this->mutex, false); |
673 | $this->assertFileNotExists(self::$testDatastore); | 635 | $this->assertFileNotExists(self::$testDatastore); |
674 | $this->assertInstanceOf(BookmarkArray::class, $db->getBookmarks()); | 636 | $this->assertInstanceOf(BookmarkArray::class, $db->getBookmarks()); |
675 | $this->assertCount(0, $db->getBookmarks()); | 637 | $this->assertCount(0, $db->getBookmarks()); |
@@ -702,13 +664,13 @@ class BookmarkFileServiceTest extends TestCase | |||
702 | */ | 664 | */ |
703 | public function testSave() | 665 | public function testSave() |
704 | { | 666 | { |
705 | $testDB = new BookmarkFileService($this->conf, $this->history, true); | 667 | $testDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
706 | $dbSize = $testDB->count(); | 668 | $dbSize = $testDB->count(); |
707 | 669 | ||
708 | $bookmark = new Bookmark(); | 670 | $bookmark = new Bookmark(); |
709 | $testDB->add($bookmark); | 671 | $testDB->add($bookmark); |
710 | 672 | ||
711 | $testDB = new BookmarkFileService($this->conf, $this->history, true); | 673 | $testDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, true); |
712 | $this->assertEquals($dbSize + 1, $testDB->count()); | 674 | $this->assertEquals($dbSize + 1, $testDB->count()); |
713 | } | 675 | } |
714 | 676 | ||
@@ -718,28 +680,12 @@ class BookmarkFileServiceTest extends TestCase | |||
718 | public function testCountHiddenPublic() | 680 | public function testCountHiddenPublic() |
719 | { | 681 | { |
720 | $this->conf->set('privacy.hide_public_links', true); | 682 | $this->conf->set('privacy.hide_public_links', true); |
721 | $linkDB = new BookmarkFileService($this->conf, $this->history, false); | 683 | $linkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, false); |
722 | 684 | ||
723 | $this->assertEquals(0, $linkDB->count()); | 685 | $this->assertEquals(0, $linkDB->count()); |
724 | } | 686 | } |
725 | 687 | ||
726 | /** | 688 | /** |
727 | * List the days for which bookmarks have been posted | ||
728 | */ | ||
729 | public function testDays() | ||
730 | { | ||
731 | $this->assertEquals( | ||
732 | ['20100309', '20100310', '20121206', '20121207', '20130614', '20150310'], | ||
733 | $this->publicLinkDB->days() | ||
734 | ); | ||
735 | |||
736 | $this->assertEquals( | ||
737 | ['20100309', '20100310', '20121206', '20121207', '20130614', '20141125', '20150310'], | ||
738 | $this->privateLinkDB->days() | ||
739 | ); | ||
740 | } | ||
741 | |||
742 | /** | ||
743 | * The URL corresponds to an existing entry in the DB | 689 | * The URL corresponds to an existing entry in the DB |
744 | */ | 690 | */ |
745 | public function testGetKnownLinkFromURL() | 691 | public function testGetKnownLinkFromURL() |
@@ -786,6 +732,10 @@ class BookmarkFileServiceTest extends TestCase | |||
786 | // They need to be grouped with the first case found - order by date DESC: `sTuff`. | 732 | // They need to be grouped with the first case found - order by date DESC: `sTuff`. |
787 | 'sTuff' => 2, | 733 | 'sTuff' => 2, |
788 | 'ut' => 1, | 734 | 'ut' => 1, |
735 | 'assurance' => 1, | ||
736 | 'coding-style' => 1, | ||
737 | 'quality' => 1, | ||
738 | 'standards' => 1, | ||
789 | ], | 739 | ], |
790 | $this->publicLinkDB->bookmarksCountPerTag() | 740 | $this->publicLinkDB->bookmarksCountPerTag() |
791 | ); | 741 | ); |
@@ -814,6 +764,10 @@ class BookmarkFileServiceTest extends TestCase | |||
814 | 'tag3' => 1, | 764 | 'tag3' => 1, |
815 | 'tag4' => 1, | 765 | 'tag4' => 1, |
816 | 'ut' => 1, | 766 | 'ut' => 1, |
767 | 'assurance' => 1, | ||
768 | 'coding-style' => 1, | ||
769 | 'quality' => 1, | ||
770 | 'standards' => 1, | ||
817 | ], | 771 | ], |
818 | $this->privateLinkDB->bookmarksCountPerTag() | 772 | $this->privateLinkDB->bookmarksCountPerTag() |
819 | ); | 773 | ); |
@@ -928,6 +882,37 @@ class BookmarkFileServiceTest extends TestCase | |||
928 | } | 882 | } |
929 | 883 | ||
930 | /** | 884 | /** |
885 | * Test filterHash() on a private bookmark while logged out. | ||
886 | */ | ||
887 | public function testFilterHashPrivateWhileLoggedOut() | ||
888 | { | ||
889 | $this->expectException(BookmarkNotFoundException::class); | ||
890 | $this->expectExceptionMessage('The link you are trying to reach does not exist or has been deleted'); | ||
891 | |||
892 | $hash = smallHash('20141125_084734' . 6); | ||
893 | |||
894 | $this->publicLinkDB->findByHash($hash); | ||
895 | } | ||
896 | |||
897 | /** | ||
898 | * Test filterHash() with private key. | ||
899 | */ | ||
900 | public function testFilterHashWithPrivateKey() | ||
901 | { | ||
902 | $hash = smallHash('20141125_084734' . 6); | ||
903 | $privateKey = 'this is usually auto generated'; | ||
904 | |||
905 | $bookmark = $this->privateLinkDB->findByHash($hash); | ||
906 | $bookmark->addAdditionalContentEntry('private_key', $privateKey); | ||
907 | $this->privateLinkDB->save(); | ||
908 | |||
909 | $this->privateLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, false); | ||
910 | $bookmark = $this->privateLinkDB->findByHash($hash, $privateKey); | ||
911 | |||
912 | static::assertSame(6, $bookmark->getId()); | ||
913 | } | ||
914 | |||
915 | /** | ||
931 | * Test linksCountPerTag all tags without filter. | 916 | * Test linksCountPerTag all tags without filter. |
932 | * Equal occurrences should be sorted alphabetically. | 917 | * Equal occurrences should be sorted alphabetically. |
933 | */ | 918 | */ |
@@ -956,6 +941,10 @@ class BookmarkFileServiceTest extends TestCase | |||
956 | 'tag4' => 1, | 941 | 'tag4' => 1, |
957 | 'ut' => 1, | 942 | 'ut' => 1, |
958 | 'w3c' => 1, | 943 | 'w3c' => 1, |
944 | 'assurance' => 1, | ||
945 | 'coding-style' => 1, | ||
946 | 'quality' => 1, | ||
947 | 'standards' => 1, | ||
959 | ]; | 948 | ]; |
960 | $tags = $this->privateLinkDB->bookmarksCountPerTag(); | 949 | $tags = $this->privateLinkDB->bookmarksCountPerTag(); |
961 | 950 | ||
@@ -1054,6 +1043,10 @@ class BookmarkFileServiceTest extends TestCase | |||
1054 | 'stallman' => 1, | 1043 | 'stallman' => 1, |
1055 | 'ut' => 1, | 1044 | 'ut' => 1, |
1056 | 'w3c' => 1, | 1045 | 'w3c' => 1, |
1046 | 'assurance' => 1, | ||
1047 | 'coding-style' => 1, | ||
1048 | 'quality' => 1, | ||
1049 | 'standards' => 1, | ||
1057 | ]; | 1050 | ]; |
1058 | $bookmark = new Bookmark(); | 1051 | $bookmark = new Bookmark(); |
1059 | $bookmark->setTags(['newTagToCount', BookmarkMarkdownFormatter::NO_MD_TAG]); | 1052 | $bookmark->setTags(['newTagToCount', BookmarkMarkdownFormatter::NO_MD_TAG]); |
@@ -1065,33 +1058,105 @@ class BookmarkFileServiceTest extends TestCase | |||
1065 | } | 1058 | } |
1066 | 1059 | ||
1067 | /** | 1060 | /** |
1068 | * Test filterDay while logged in | 1061 | * Test find by dates in the middle of the datastore (sorted by dates) with a single bookmark as a result. |
1069 | */ | 1062 | */ |
1070 | public function testFilterDayLoggedIn(): void | 1063 | public function testFilterByDateMidTimePeriodSingleBookmark(): void |
1071 | { | 1064 | { |
1072 | $bookmarks = $this->privateLinkDB->filterDay('20121206'); | 1065 | $bookmarks = $this->privateLinkDB->findByDate( |
1073 | $expectedIds = [4, 9, 1, 0]; | 1066 | DateTime::createFromFormat('Ymd_His', '20121206_150000'), |
1067 | DateTime::createFromFormat('Ymd_His', '20121206_160000'), | ||
1068 | $before, | ||
1069 | $after | ||
1070 | ); | ||
1074 | 1071 | ||
1075 | static::assertCount(4, $bookmarks); | 1072 | static::assertCount(1, $bookmarks); |
1076 | foreach ($bookmarks as $bookmark) { | 1073 | |
1077 | $i = ($i ?? -1) + 1; | 1074 | static::assertSame(9, $bookmarks[0]->getId()); |
1078 | static::assertSame($expectedIds[$i], $bookmark->getId()); | 1075 | static::assertEquals(DateTime::createFromFormat('Ymd_His', '20121206_142300'), $before); |
1079 | } | 1076 | static::assertEquals(DateTime::createFromFormat('Ymd_His', '20121206_172539'), $after); |
1080 | } | 1077 | } |
1081 | 1078 | ||
1082 | /** | 1079 | /** |
1083 | * Test filterDay while logged out | 1080 | * Test find by dates in the middle of the datastore (sorted by dates) with a multiple bookmarks as a result. |
1084 | */ | 1081 | */ |
1085 | public function testFilterDayLoggedOut(): void | 1082 | public function testFilterByDateMidTimePeriodMultipleBookmarks(): void |
1086 | { | 1083 | { |
1087 | $bookmarks = $this->publicLinkDB->filterDay('20121206'); | 1084 | $bookmarks = $this->privateLinkDB->findByDate( |
1088 | $expectedIds = [4, 9, 1]; | 1085 | DateTime::createFromFormat('Ymd_His', '20121206_150000'), |
1086 | DateTime::createFromFormat('Ymd_His', '20121206_180000'), | ||
1087 | $before, | ||
1088 | $after | ||
1089 | ); | ||
1089 | 1090 | ||
1090 | static::assertCount(3, $bookmarks); | 1091 | static::assertCount(2, $bookmarks); |
1091 | foreach ($bookmarks as $bookmark) { | 1092 | |
1092 | $i = ($i ?? -1) + 1; | 1093 | static::assertSame(1, $bookmarks[0]->getId()); |
1093 | static::assertSame($expectedIds[$i], $bookmark->getId()); | 1094 | static::assertSame(9, $bookmarks[1]->getId()); |
1094 | } | 1095 | static::assertEquals(DateTime::createFromFormat('Ymd_His', '20121206_142300'), $before); |
1096 | static::assertEquals(DateTime::createFromFormat('Ymd_His', '20121206_182539'), $after); | ||
1097 | } | ||
1098 | |||
1099 | /** | ||
1100 | * Test find by dates at the end of the datastore (sorted by dates). | ||
1101 | */ | ||
1102 | public function testFilterByDateLastTimePeriod(): void | ||
1103 | { | ||
1104 | $after = new DateTime(); | ||
1105 | $bookmarks = $this->privateLinkDB->findByDate( | ||
1106 | DateTime::createFromFormat('Ymd_His', '20150310_114640'), | ||
1107 | DateTime::createFromFormat('Ymd_His', '20450101_010101'), | ||
1108 | $before, | ||
1109 | $after | ||
1110 | ); | ||
1111 | |||
1112 | static::assertCount(1, $bookmarks); | ||
1113 | |||
1114 | static::assertSame(41, $bookmarks[0]->getId()); | ||
1115 | static::assertEquals(DateTime::createFromFormat('Ymd_His', '20150310_114633'), $before); | ||
1116 | static::assertNull($after); | ||
1117 | } | ||
1118 | |||
1119 | /** | ||
1120 | * Test find by dates at the beginning of the datastore (sorted by dates). | ||
1121 | */ | ||
1122 | public function testFilterByDateFirstTimePeriod(): void | ||
1123 | { | ||
1124 | $before = new DateTime(); | ||
1125 | $bookmarks = $this->privateLinkDB->findByDate( | ||
1126 | DateTime::createFromFormat('Ymd_His', '20000101_101010'), | ||
1127 | DateTime::createFromFormat('Ymd_His', '20100309_110000'), | ||
1128 | $before, | ||
1129 | $after | ||
1130 | ); | ||
1131 | |||
1132 | static::assertCount(1, $bookmarks); | ||
1133 | |||
1134 | static::assertSame(11, $bookmarks[0]->getId()); | ||
1135 | static::assertNull($before); | ||
1136 | static::assertEquals(DateTime::createFromFormat('Ymd_His', '20100310_101010'), $after); | ||
1137 | } | ||
1138 | |||
1139 | /** | ||
1140 | * Test getLatest with a sticky bookmark: it should be ignored and return the latest by creation date instead. | ||
1141 | */ | ||
1142 | public function testGetLatestWithSticky(): void | ||
1143 | { | ||
1144 | $bookmark = $this->publicLinkDB->getLatest(); | ||
1145 | |||
1146 | static::assertSame(41, $bookmark->getId()); | ||
1147 | } | ||
1148 | |||
1149 | /** | ||
1150 | * Test getLatest with a sticky bookmark: it should be ignored and return the latest by creation date instead. | ||
1151 | */ | ||
1152 | public function testGetLatestEmptyDatastore(): void | ||
1153 | { | ||
1154 | unlink($this->conf->get('resource.datastore')); | ||
1155 | $this->publicLinkDB = new BookmarkFileService($this->conf, $this->history, $this->mutex, false); | ||
1156 | |||
1157 | $bookmark = $this->publicLinkDB->getLatest(); | ||
1158 | |||
1159 | static::assertNull($bookmark); | ||
1095 | } | 1160 | } |
1096 | 1161 | ||
1097 | /** | 1162 | /** |