From 69681d12cb3fb55762902192230edd87fd3215f9 Mon Sep 17 00:00:00 2001 From: Benjamin Brahmer Date: Wed, 25 Jan 2023 15:23:44 +0100 Subject: Implement item search The search result can only link to the feed. Signed-off-by: Benjamin Brahmer --- tests/Unit/Search/FeedSearchProviderTest.php | 2 +- tests/Unit/Search/FolderSearchProviderTest.php | 2 +- tests/Unit/Search/ItemSearchProviderTest.php | 147 +++++++++++++++++++++++++ 3 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 tests/Unit/Search/ItemSearchProviderTest.php (limited to 'tests') diff --git a/tests/Unit/Search/FeedSearchProviderTest.php b/tests/Unit/Search/FeedSearchProviderTest.php index 97ec1f984..e1463a7a7 100644 --- a/tests/Unit/Search/FeedSearchProviderTest.php +++ b/tests/Unit/Search/FeedSearchProviderTest.php @@ -110,7 +110,7 @@ class FeedSearchProviderTest extends TestCase $this->generator->expects($this->once()) ->method('imagePath') - ->with('core', 'filetypes/text.svg') + ->with('core', 'rss.svg') ->willReturn('folderpath.svg'); $this->generator->expects($this->once()) diff --git a/tests/Unit/Search/FolderSearchProviderTest.php b/tests/Unit/Search/FolderSearchProviderTest.php index cf4ffd969..e06bf45f7 100644 --- a/tests/Unit/Search/FolderSearchProviderTest.php +++ b/tests/Unit/Search/FolderSearchProviderTest.php @@ -77,7 +77,7 @@ class FolderSearchProviderTest extends TestCase public function testGetOrderInternal() { - $this->assertSame(-1, $this->class->getOrder('news.page.index', [])); + $this->assertSame(0, $this->class->getOrder('news.page.index', [])); } public function testSearch() diff --git a/tests/Unit/Search/ItemSearchProviderTest.php b/tests/Unit/Search/ItemSearchProviderTest.php new file mode 100644 index 000000000..062d52a77 --- /dev/null +++ b/tests/Unit/Search/ItemSearchProviderTest.php @@ -0,0 +1,147 @@ +l10n = $this->getMockBuilder(IL10N::class) + ->disableOriginalConstructor() + ->getMock(); + $this->generator = $this->getMockBuilder(IURLGenerator::class) + ->disableOriginalConstructor() + ->getMock(); + $this->itemService = $this->getMockBuilder(ItemServiceV2::class) + ->disableOriginalConstructor() + ->getMock(); + + $this->class = new ItemSearchProvider( + $this->l10n, + $this->generator, + $this->itemService + ); + } + + public function testGetId() + { + $this->assertSame('news_item', $this->class->getId()); + } + + public function testGetName() + { + $this->l10n->expects($this->once()) + ->method('t') + ->with('News articles') + ->willReturnArgument(0); + + $this->assertSame('News articles', $this->class->getName()); + } + + public function testGetOrderExternal() + { + $this->assertSame(65, $this->class->getOrder('contacts.Page.index', [])); + } + + public function testGetOrderInternal() + { + $this->assertSame(1, $this->class->getOrder('news.page.index', [])); + } + + public function testSearch() + { + $user = $this->getMockBuilder(IUser::class) + ->getMock(); + $query = $this->getMockBuilder(ISearchQuery::class) + ->getMock(); + + $query->expects($this->once()) + ->method('getCursor') + ->willReturn(null); + + $query->expects($this->once()) + ->method('getLimit') + ->willReturn(10); + + $user->expects($this->once()) + ->method('getUID') + ->willReturn('user'); + + $query->expects($this->once()) + ->method('getTerm') + ->willReturn('some text'); + + + $items = [ + Item::fromRow(['id' => 1,'title' => 'some_tErm', 'body' => 'some text', 'feedId' => 1]), + Item::fromRow(['id' => 2,'title' => 'nothing', 'body' => 'some text', 'feedId' => 1]) + ]; + + $this->itemService->expects($this->once()) + ->method('findAllWithFilters') + ->with( + 'user', + ListType::ALL_ITEMS, + 10, + 0, + false, + ['some text']) + ->willReturn($items); + + + $this->l10n->expects($this->once()) + ->method('t') + ->with('News') + ->willReturnArgument(0); + + $this->generator->expects($this->once()) + ->method('imagePath') + ->with('core', 'filetypes/text.svg') + ->willReturn('folderpath.svg'); + + $this->generator->expects($this->exactly(2)) + ->method('linkToRoute') + ->with('news.page.index') + ->willReturn('/news'); + + + $result = $this->class->search($user, $query)->jsonSerialize(); + $entry = $result['entries'][0]->jsonSerialize(); + $this->assertSame('News', $result['name']); + $this->assertSame('some_tErm', $entry['title']); + $this->assertSame('folderpath.svg', $entry['thumbnailUrl']); + $this->assertSame('some text', $entry['subline']); + $this->assertSame('/news#/items/feeds/1', $entry['resourceUrl']); + } +} -- cgit v1.2.3