1
0
mirror of https://github.com/chylex/Nextcloud-News.git synced 2024-10-17 08:42:48 +02:00
Nextcloud-News/tests/Unit/Search/FolderSearchProviderTest.php
Benjamin Brahmer 69681d12cb Implement item search
The search result can only link to the feed.

Signed-off-by: Benjamin Brahmer <info@b-brahmer.de>
2023-02-14 11:18:00 +01:00

133 lines
3.7 KiB
PHP

<?php
namespace OCA\News\Search;
use OCA\News\Db\Folder;
use OCA\News\Service\FeedServiceV2;
use OCA\News\Service\FolderServiceV2;
use OCA\News\Service\OpmlService;
use OCA\News\Utility\OPMLExporter;
use OCP\IL10N;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\Search\ISearchQuery;
use PHPUnit\Framework\TestCase;
class FolderSearchProviderTest extends TestCase
{
/**
* @var \PHPUnit\Framework\MockObject\MockObject|FolderServiceV2
*/
private $folderService;
/**
* @var \PHPUnit\Framework\MockObject\MockObject|IL10N
*/
private $l10n;
/**
* @var \PHPUnit\Framework\MockObject\MockObject|IURLGenerator
*/
private $generator;
/**
* @var FolderSearchProvider
*/
private $class;
protected function setUp(): void
{
$this->l10n = $this->getMockBuilder(IL10N::class)
->disableOriginalConstructor()
->getMock();
$this->generator = $this->getMockBuilder(IURLGenerator::class)
->disableOriginalConstructor()
->getMock();
$this->folderService = $this->getMockBuilder(FolderServiceV2::class)
->disableOriginalConstructor()
->getMock();
$this->class = new FolderSearchProvider(
$this->l10n,
$this->generator,
$this->folderService
);
}
public function testGetId()
{
$this->assertSame('news_folder', $this->class->getId());
}
public function testGetName()
{
$this->l10n->expects($this->once())
->method('t')
->with('News folders')
->willReturnArgument(0);
$this->assertSame('News folders', $this->class->getName());
}
public function testGetOrderExternal()
{
$this->assertSame(55, $this->class->getOrder('contacts.Page.index', []));
}
public function testGetOrderInternal()
{
$this->assertSame(0, $this->class->getOrder('news.page.index', []));
}
public function testSearch()
{
$user = $this->getMockBuilder(IUser::class)
->getMock();
$query = $this->getMockBuilder(ISearchQuery::class)
->getMock();
$user->expects($this->once())
->method('getUID')
->willReturn('user');
$query->expects($this->once())
->method('getTerm')
->willReturn('Term');
$folders = [
Folder::fromRow(['id' => 1,'name' => 'some_tErm']),
Folder::fromRow(['id' => 2,'name' => 'nothing'])
];
$this->folderService->expects($this->once())
->method('findAllForUser')
->with('user')
->willReturn($folders);
$this->l10n->expects($this->once())
->method('t')
->with('News')
->willReturnArgument(0);
$this->generator->expects($this->once())
->method('imagePath')
->with('core', 'filetypes/folder.svg')
->willReturn('folderpath.svg');
$this->generator->expects($this->once())
->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('', $entry['subline']);
$this->assertSame('/news#/items/folders/1', $entry['resourceUrl']);
}
}