Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/mail.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorChristoph Wurst <ChristophWurst@users.noreply.github.com>2019-10-07 15:07:51 +0300
committerGitHub <noreply@github.com>2019-10-07 15:07:51 +0300
commit18a76774eb0f0e00b5a3ddfbea8d2e980219b642 (patch)
tree72b07864b1dd615fefc686eee76f7648d3fbae2c /tests
parent4e2ebfa08d809ab01de113eb895757fb7b5a02ca (diff)
Clean up searching for messages (#2058)
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
Diffstat (limited to 'tests')
-rw-r--r--tests/Controller/MessagesControllerTest.php55
-rw-r--r--tests/IMAP/Search/SearchFilterStringParserTest.php (renamed from tests/SearchHelperTest.php)19
-rw-r--r--tests/IMAP/Search/SearchStrategyFactoryTest.php152
-rw-r--r--tests/Service/MailSearchTest.php97
4 files changed, 312 insertions, 11 deletions
diff --git a/tests/Controller/MessagesControllerTest.php b/tests/Controller/MessagesControllerTest.php
index 623f3b5e4..62c660c33 100644
--- a/tests/Controller/MessagesControllerTest.php
+++ b/tests/Controller/MessagesControllerTest.php
@@ -27,13 +27,16 @@ use OC\AppFramework\Http\Request;
use OCA\Mail\Account;
use OCA\Mail\Attachment;
use OCA\Mail\Contracts\IMailManager;
+use OCA\Mail\Contracts\IMailSearch;
use OCA\Mail\Controller\MessagesController;
use OCA\Mail\Exception\ServiceException;
use OCA\Mail\Http\AttachmentDownloadResponse;
use OCA\Mail\Http\HtmlResponse;
use OCA\Mail\Mailbox;
use OCA\Mail\Model\IMAPMessage;
+use OCA\Mail\Model\Message;
use OCA\Mail\Service\AccountService;
+use OCA\Mail\Service\MailManager;
use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Http\ContentSecurityPolicy;
use OCP\AppFramework\Http\JSONResponse;
@@ -44,24 +47,59 @@ use OCP\IL10N;
use OCP\ILogger;
use OCP\IRequest;
use OCP\IURLGenerator;
+use PHPUnit\Framework\MockObject\MockObject;
class MessagesControllerTest extends TestCase {
+ /** @var string */
private $appName;
+
+ /** @var MockObject|IRequest */
private $request;
+
+ /** @var MockObject|AccountService */
private $accountService;
+
+ /** @var MockObject|MailManager */
private $mailManager;
+
+ /** @var MockObject|IMailSearch */
+ private $mailSearch;
+
+ /** @var string */
private $userId;
+
+ /** @var MockObject|Folder */
private $userFolder;
+
+ /** @var MockObject|ILogger */
private $logger;
+
+ /** @var MockObject|IL10N */
private $l10n;
+
+ /** @var MessagesController */
private $controller;
+
+ /** @var MockObject|Account */
private $account;
+
+ /** @var MockObject|Mailbox */
private $mailbox;
+
+ /** @var MockObject|Message */
private $message;
+
+ /** @var MockObject|Attachment */
private $attachment;
+
+ /** @var MockObject|IMimeTypeDetector */
private $mimeTypeDetector;
+
+ /** @var MockObject|IURLGenerator */
private $urlGenerator;
+
+ /** @var MockObject|ITimeFactory */
private $timeFactory;
protected function setUp() {
@@ -71,6 +109,7 @@ class MessagesControllerTest extends TestCase {
$this->request = $this->getMockBuilder(IRequest::class)->getMock();
$this->accountService = $this->createMock(AccountService::class);
$this->mailManager = $this->createMock(IMailManager::class);
+ $this->mailSearch = $this->createMock(IMailSearch::class);
$this->userId = 'john';
$this->userFolder = $this->createMock(Folder::class);
$this->request = $this->createMock(Request::class);
@@ -81,9 +120,19 @@ class MessagesControllerTest extends TestCase {
$this->timeFactory = $this->createMock(ITimeFactory::class);
$this->controller = new MessagesController(
- $this->appName, $this->request, $this->accountService, $this->mailManager,
- $this->userId, $this->userFolder, $this->logger, $this->l10n,
- $this->mimeTypeDetector, $this->urlGenerator, $this->timeFactory);
+ $this->appName,
+ $this->request,
+ $this->accountService,
+ $this->mailManager,
+ $this->mailSearch,
+ $this->userId,
+ $this->userFolder,
+ $this->logger,
+ $this->l10n,
+ $this->mimeTypeDetector,
+ $this->urlGenerator,
+ $this->timeFactory
+ );
$this->account = $this->createMock(Account::class);
$this->mailbox = $this->createMock(Mailbox::class);
diff --git a/tests/SearchHelperTest.php b/tests/IMAP/Search/SearchFilterStringParserTest.php
index 97fb4018e..1bb2d0610 100644
--- a/tests/SearchHelperTest.php
+++ b/tests/IMAP/Search/SearchFilterStringParserTest.php
@@ -1,6 +1,9 @@
-<?php
+<?php declare(strict_types=1);
+
/**
- * @copyright Copyright (c) 2018 Robin Appelman <robin@icewind.nl>
+ * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
*
* @license GNU AGPL version 3 or any later version
*
@@ -16,18 +19,18 @@
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
*/
-namespace OCA\Mail\Tests;
+namespace OCA\Mail\Tests\IMAP\Search;
use ChristophWurst\Nextcloud\Testing\TestCase;
-use OCA\Mail\SearchHelper;
+use OCA\Mail\IMAP\Search\SearchFilterStringParser;
+
+class SearchFilterStringParserTest extends TestCase {
-class SearchHelperTest extends TestCase {
private function search($filter) {
- $helper = new SearchHelper();
- $query = $helper->parseFilterString($filter);
+ $helper = new SearchFilterStringParser();
+ $query = $helper->parse($filter);
return (string)($query->build()['query']);
}
diff --git a/tests/IMAP/Search/SearchStrategyFactoryTest.php b/tests/IMAP/Search/SearchStrategyFactoryTest.php
new file mode 100644
index 000000000..93bf330e0
--- /dev/null
+++ b/tests/IMAP/Search/SearchStrategyFactoryTest.php
@@ -0,0 +1,152 @@
+<?php declare(strict_types=1);
+
+/**
+ * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OCA\Mail\Tests\IMAP\Search;
+
+use ChristophWurst\Nextcloud\Testing\TestCase;
+use Horde_Imap_Client_Data_Capability;
+use Horde_Imap_Client_Search_Query;
+use Horde_Imap_Client_Socket;
+use OCA\Mail\IMAP\Search\FullScanSearchStrategy;
+use OCA\Mail\IMAP\Search\ImapSortSearchStrategy;
+use OCA\Mail\IMAP\Search\SearchStrategyFactory;
+use PHPUnit\Framework\MockObject\MockObject;
+
+class SearchStrategyFactoryTest extends TestCase {
+
+ /** @var SearchStrategyFactory */
+ private $factory;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->factory = new SearchStrategyFactory();
+ }
+
+ public function testGetStrategyForFetchNoFilter() {
+ /** @var MockObject|Horde_Imap_Client_Socket $client */
+ $client = $this->createMock(Horde_Imap_Client_Socket::class);
+ $mailbox = 'INBOX';
+ $filter = new Horde_Imap_Client_Search_Query();
+ $cursor = null;
+ $capability = $this->createMock(Horde_Imap_Client_Data_Capability::class);
+ $client->expects($this->once())
+ ->method('__get')
+ ->with('capability')
+ ->willReturn($capability);
+ $capability->expects($this->once())
+ ->method('query')
+ ->with('SORT')
+ ->willReturn(true);
+
+ $strategy = $this->factory->getStrategy(
+ $client,
+ $mailbox,
+ $filter,
+ $cursor
+ );
+
+ $this->assertInstanceOf(ImapSortSearchStrategy::class, $strategy);
+ }
+
+ public function testGetStrategyForFetchNoSort() {
+ /** @var MockObject|Horde_Imap_Client_Socket $client */
+ $client = $this->createMock(Horde_Imap_Client_Socket::class);
+ $mailbox = 'INBOX';
+ $filter = new Horde_Imap_Client_Search_Query();
+ $cursor = null;
+ $capability = $this->createMock(Horde_Imap_Client_Data_Capability::class);
+ $client->expects($this->once())
+ ->method('__get')
+ ->with('capability')
+ ->willReturn($capability);
+ $capability->expects($this->once())
+ ->method('query')
+ ->with('SORT')
+ ->willReturn(false);
+
+ $strategy = $this->factory->getStrategy(
+ $client,
+ $mailbox,
+ $filter,
+ $cursor
+ );
+
+ $this->assertInstanceOf(FullScanSearchStrategy::class, $strategy);
+ }
+
+ public function testGetStrategyForSearchWithSort() {
+ /** @var MockObject|Horde_Imap_Client_Socket $client */
+ $client = $this->createMock(Horde_Imap_Client_Socket::class);
+ $mailbox = 'INBOX';
+ $filter = new Horde_Imap_Client_Search_Query();
+ $filter->text('test');
+ $cursor = null;
+ $capability = $this->createMock(Horde_Imap_Client_Data_Capability::class);
+ $client->expects($this->once())
+ ->method('__get')
+ ->with('capability')
+ ->willReturn($capability);
+ $capability->expects($this->once())
+ ->method('query')
+ ->with('SORT')
+ ->willReturn(true);
+
+ $strategy = $this->factory->getStrategy(
+ $client,
+ $mailbox,
+ $filter,
+ $cursor
+ );
+
+ $this->assertInstanceOf(ImapSortSearchStrategy::class, $strategy);
+ }
+
+ public function testGetStrategyForSearchWithoutSort() {
+ /** @var MockObject|Horde_Imap_Client_Socket $client */
+ $client = $this->createMock(Horde_Imap_Client_Socket::class);
+ $mailbox = 'INBOX';
+ $filter = new Horde_Imap_Client_Search_Query();
+ $filter->text('sort');
+ $cursor = null;
+ $capability = $this->createMock(Horde_Imap_Client_Data_Capability::class);
+ $client->expects($this->once())
+ ->method('__get')
+ ->with('capability')
+ ->willReturn($capability);
+ $capability->expects($this->once())
+ ->method('query')
+ ->with('SORT')
+ ->willReturn(true);
+
+ $strategy = $this->factory->getStrategy(
+ $client,
+ $mailbox,
+ $filter,
+ $cursor
+ );
+
+ $this->assertInstanceOf(ImapSortSearchStrategy::class, $strategy);
+ }
+
+}
diff --git a/tests/Service/MailSearchTest.php b/tests/Service/MailSearchTest.php
new file mode 100644
index 000000000..c5fa66720
--- /dev/null
+++ b/tests/Service/MailSearchTest.php
@@ -0,0 +1,97 @@
+<?php declare(strict_types=1);
+
+/**
+ * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OCA\Mail\Tests\Service;
+
+use ChristophWurst\Nextcloud\Testing\TestCase;
+use Horde_Imap_Client_Fetch_Results;
+use Horde_Imap_Client_Socket;
+use OCA\Mail\Account;
+use OCA\Mail\Db\MailboxMapper;
+use OCA\Mail\IMAP\IMAPClientFactory;
+use OCA\Mail\IMAP\Search\SearchFilterStringParser;
+use OCA\Mail\IMAP\Search\SearchStrategyFactory;
+use OCA\Mail\Service\MailSearch;
+use OCP\ILogger;
+use PHPUnit\Framework\MockObject\MockObject;
+
+class MailSearchTest extends TestCase {
+
+ /** @var MockObject|IMAPClientFactory */
+ private $imapClientFactory;
+
+ /** @var MockObject|SearchStrategyFactory */
+ private $searchStrategyFactory;
+
+ /** @var MockObject|SearchFilterStringParser */
+ private $searchStringParser;
+
+ /** @var MockObject|MailboxMapper */
+ private $mailboxMapper;
+
+ /** @var MockObject|ILogger */
+ private $logger;
+
+ /** @var MailSearch */
+ private $search;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->imapClientFactory = $this->createMock(IMAPClientFactory::class);
+ $this->searchStrategyFactory = $this->createMock(SearchStrategyFactory::class);
+ $this->searchStringParser = $this->createMock(SearchFilterStringParser::class);
+ $this->mailboxMapper = $this->createMock(MailboxMapper::class);
+ $this->logger = $this->createMock(ILogger::class);
+
+ $this->search = new MailSearch(
+ $this->imapClientFactory,
+ $this->searchStrategyFactory,
+ $this->searchStringParser,
+ $this->mailboxMapper,
+ $this->logger
+ );
+ }
+
+ public function testNoFindMessages() {
+ $account = $this->createMock(Account::class);
+ $client = $this->createMock(Horde_Imap_Client_Socket::class);
+ $this->imapClientFactory->expects($this->once())
+ ->method('getClient')
+ ->with($account)
+ ->willReturn($client);
+ $client->expects($this->once())
+ ->method('fetch')
+ ->willReturn(new Horde_Imap_Client_Fetch_Results());
+
+ $messages = $this->search->findMessages(
+ $account,
+ 'INBOX',
+ null,
+ null
+ );
+
+ $this->assertEmpty($messages);
+ }
+
+}