From e26e2060f5470ce8bf4c5973284bae07b8af170a Mon Sep 17 00:00:00 2001 From: ArthurHoaro Date: Fri, 17 Jan 2020 21:34:12 +0100 Subject: Add and update unit test for the new system (Bookmark + Service) See #1307 --- tests/formatter/BookmarkDefaultFormatterTest.php | 156 +++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 tests/formatter/BookmarkDefaultFormatterTest.php (limited to 'tests/formatter/BookmarkDefaultFormatterTest.php') diff --git a/tests/formatter/BookmarkDefaultFormatterTest.php b/tests/formatter/BookmarkDefaultFormatterTest.php new file mode 100644 index 00000000..fe42a208 --- /dev/null +++ b/tests/formatter/BookmarkDefaultFormatterTest.php @@ -0,0 +1,156 @@ +conf = new ConfigManager(self::$testConf); + $this->formatter = new BookmarkDefaultFormatter($this->conf); + } + + /** + * Test formatting a bookmark with all its attribute filled. + */ + public function testFormatFull() + { + $bookmark = new Bookmark(); + $bookmark->setId($id = 11); + $bookmark->setShortUrl($short = 'abcdef'); + $bookmark->setUrl('https://sub.domain.tld?query=here&for=real#hash'); + $bookmark->setTitle($title = 'This is a bookmark'); + $bookmark->setDescription($desc = '

Content

`Here is some content

'); + $bookmark->setTags($tags = ['tag1', 'bookmark', 'other', '']); + $bookmark->setThumbnail('http://domain2.tdl2/?type=img&name=file.png'); + $bookmark->setSticky(true); + $bookmark->setCreated($created = DateTime::createFromFormat('Ymd_His', '20190521_190412')); + $bookmark->setUpdated($updated = DateTime::createFromFormat('Ymd_His', '20190521_191213')); + $bookmark->setPrivate(true); + + $link = $this->formatter->format($bookmark); + $this->assertEquals($id, $link['id']); + $this->assertEquals($short, $link['shorturl']); + $this->assertEquals('https://sub.domain.tld?query=here&for=real#hash', $link['url']); + $this->assertEquals( + 'https://sub.domain.tld?query=here&for=real#hash', + $link['real_url'] + ); + $this->assertEquals('This is a <strong>bookmark</strong>', $link['title']); + $this->assertEquals( + '<h2>Content</h2><p>`Here is some content</p>', + $link['description'] + ); + $tags[3] = '<script>alert("xss");</script>'; + $this->assertEquals($tags, $link['taglist']); + $this->assertEquals(implode(' ', $tags), $link['tags']); + $this->assertEquals( + 'http://domain2.tdl2/?type=img&name=file.png', + $link['thumbnail'] + ); + $this->assertEquals($created, $link['created']); + $this->assertEquals($created->getTimestamp(), $link['timestamp']); + $this->assertEquals($updated, $link['updated']); + $this->assertEquals($updated->getTimestamp(), $link['updated_timestamp']); + $this->assertTrue($link['private']); + $this->assertTrue($link['sticky']); + $this->assertEquals('private', $link['class']); + } + + /** + * Test formatting a bookmark with all its attribute filled. + */ + public function testFormatMinimal() + { + $bookmark = new Bookmark(); + + $link = $this->formatter->format($bookmark); + $this->assertEmpty($link['id']); + $this->assertEmpty($link['shorturl']); + $this->assertEmpty($link['url']); + $this->assertEmpty($link['real_url']); + $this->assertEmpty($link['title']); + $this->assertEmpty($link['description']); + $this->assertEmpty($link['taglist']); + $this->assertEmpty($link['tags']); + $this->assertEmpty($link['thumbnail']); + $this->assertEmpty($link['created']); + $this->assertEmpty($link['timestamp']); + $this->assertEmpty($link['updated']); + $this->assertEmpty($link['updated_timestamp']); + $this->assertFalse($link['private']); + $this->assertFalse($link['sticky']); + $this->assertEmpty($link['class']); + } + + /** + * Make sure that the description is properly formatted by the default formatter. + */ + public function testFormatDescription() + { + $description = []; + $description[] = 'This a description' . PHP_EOL; + $description[] = 'text https://sub.domain.tld?query=here&for=real#hash more text'. PHP_EOL; + $description[] = 'Also, there is an #hashtag added'. PHP_EOL; + $description[] = ' A N D KEEP SPACES ! '. PHP_EOL; + + $bookmark = new Bookmark(); + $bookmark->setDescription(implode('', $description)); + $link = $this->formatter->format($bookmark); + + $description[0] = 'This a <strong>description</strong>
'; + $url = 'https://sub.domain.tld?query=here&for=real#hash'; + $description[1] = 'text '. $url .' more text
'; + $description[2] = 'Also, there is an #hashtag added
'; + $description[3] = '    A  N  D KEEP     '. + 'SPACES    !  
'; + + $this->assertEquals(implode(PHP_EOL, $description) . PHP_EOL, $link['description']); + } + + /** + * Test formatting URL with an index_url set + * It should prepend relative links. + */ + public function testFormatNoteWithIndexUrl() + { + $bookmark = new Bookmark(); + $bookmark->setUrl($short = '?abcdef'); + $description = 'Text #hashtag more text'; + $bookmark->setDescription($description); + + $this->formatter->addContextData('index_url', $root = 'https://domain.tld/hithere/'); + + $link = $this->formatter->format($bookmark); + $this->assertEquals($root . $short, $link['url']); + $this->assertEquals($root . $short, $link['real_url']); + $this->assertEquals( + 'Text '. + '#hashtag more text', + $link['description'] + ); + } +} -- cgit v1.2.3