Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 3 additions & 12 deletions lib/IMAP/MessageMapper.php
Original file line number Diff line number Diff line change
Expand Up @@ -1033,17 +1033,8 @@ private function checkLinks(string $body, string $mailAddress) : bool {
private function getPageSize(Horde_Imap_Client_Socket $client,
string $mailbox,
Horde_Imap_Client_Ids $idsToFetch): int {
$rangeSearchQuery = new Horde_Imap_Client_Search_Query();
$rangeSearchQuery->ids($idsToFetch);
$rangeSearchResult = $client->search(
$mailbox,
$rangeSearchQuery,
[
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
],
]
);
return (int)$rangeSearchResult['count'];
$query = new Horde_Imap_Client_Fetch_Query();
$query->uid();
return count($client->fetch($mailbox, $query, ['ids' => $idsToFetch]));
}
}
181 changes: 81 additions & 100 deletions tests/Unit/IMAP/MessageMapperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
use Horde_Imap_Client_Fetch_Query;
use Horde_Imap_Client_Fetch_Results;
use Horde_Imap_Client_Ids;
use Horde_Imap_Client_Search_Query;
use Horde_Imap_Client_Socket;
use Horde_Mime_Part;
use OCA\Mail\Db\Mailbox;
Expand Down Expand Up @@ -294,52 +293,38 @@ public function testFindAllNoKnownUid(): void {
/** @var Horde_Imap_Client_Socket|MockObject $client */
$client = $this->createMock(Horde_Imap_Client_Socket::class);
$mailbox = 'inbox';
$rangeSearchQuery = new Horde_Imap_Client_Search_Query();
$rangeSearchQuery->ids(new Horde_Imap_Client_Ids('123:321'));
$client->expects(self::exactly(2))
$client->expects(self::once())
->method('search')
->withConsecutive(
->with(
$mailbox,
null,
[
$mailbox,
null,
[
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_MIN,
Horde_Imap_Client::SEARCH_RESULTS_MAX,
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
]
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_MIN,
Horde_Imap_Client::SEARCH_RESULTS_MAX,
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
]
],
[
$mailbox,
($rangeSearchQuery),
[
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
]
],
],
]
)
->willReturnOnConsecutiveCalls(
[
'min' => 123,
'max' => 321,
'count' => 50,
],
[
'count' => 50,
],
);
->willReturn([
'min' => 123,
'max' => 321,
'count' => 50,
]);
$query = new Horde_Imap_Client_Fetch_Query();
$query->uid();
$pageSizeResults = new Horde_Imap_Client_Fetch_Results();
for ($i = 0; $i < 50; $i++) {
$pageSizeResults[$i] = new Horde_Imap_Client_Data_Fetch();
}
$uidResults = new Horde_Imap_Client_Fetch_Results();
foreach (range(123, 321) as $i) {
$uid = new Horde_Imap_Client_Data_Fetch();
$uid->setUid($i);
$uidResults[$i] = $uid;
}
$bodyResults = new Horde_Imap_Client_Fetch_Results();
$client->expects(self::exactly(2))
$client->expects(self::exactly(3))
->method('fetch')
->withConsecutive(
[
Expand All @@ -349,13 +334,21 @@ public function testFindAllNoKnownUid(): void {
'ids' => new Horde_Imap_Client_Ids('123:321'),
]
],
[
$mailbox,
$query,
[
'ids' => new Horde_Imap_Client_Ids('123:321'),
]
],
[
$mailbox,
self::anything(),
self::anything()
]
)
->willReturnOnConsecutiveCalls(
$pageSizeResults,
$uidResults,
$bodyResults
);
Expand All @@ -377,52 +370,38 @@ public function testFindAllWithKnownUid(): void {
/** @var Horde_Imap_Client_Socket|MockObject $client */
$client = $this->createMock(Horde_Imap_Client_Socket::class);
$mailbox = 'inbox';
$rangeSearchQuery = new Horde_Imap_Client_Search_Query();
$rangeSearchQuery->ids(new Horde_Imap_Client_Ids('301:321'));
$client->expects(self::exactly(2))
$client->expects(self::once())
->method('search')
->withConsecutive(
[
$mailbox,
null,
[
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_MIN,
Horde_Imap_Client::SEARCH_RESULTS_MAX,
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
],
],
],
->with(
$mailbox,
null,
[
$mailbox,
$rangeSearchQuery,
[
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
],
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_MIN,
Horde_Imap_Client::SEARCH_RESULTS_MAX,
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
],
],
]
)
->willReturnOnConsecutiveCalls(
[
'min' => 123,
'max' => 321,
'count' => 50,
],
[
'count' => 50,
],
);
->willReturn([
'min' => 123,
'max' => 321,
'count' => 50,
]);
$query = new Horde_Imap_Client_Fetch_Query();
$query->uid();
$pageSizeResults = new Horde_Imap_Client_Fetch_Results();
for ($i = 0; $i < 50; $i++) {
$pageSizeResults[$i] = new Horde_Imap_Client_Data_Fetch();
}
$uidResults = new Horde_Imap_Client_Fetch_Results();
foreach (range(123, 321) as $i) {
$uid = new Horde_Imap_Client_Data_Fetch();
$uid->setUid($i);
$uidResults[$i] = $uid;
}
$bodyResults = new Horde_Imap_Client_Fetch_Results();
$client->expects(self::exactly(2))
$client->expects(self::exactly(3))
->method('fetch')
->withConsecutive(
[
Expand All @@ -432,13 +411,21 @@ public function testFindAllWithKnownUid(): void {
'ids' => new Horde_Imap_Client_Ids('301:321'),
]
],
[
$mailbox,
$query,
[
'ids' => new Horde_Imap_Client_Ids('301:321'),
]
],
[
$mailbox,
self::anything(),
self::anything()
]
)
->willReturnOnConsecutiveCalls(
$pageSizeResults,
$uidResults,
$bodyResults
);
Expand Down Expand Up @@ -467,52 +454,38 @@ public function testFindAllPackedLastChunk(): void {
/** @var Horde_Imap_Client_Socket|MockObject $client */
$client = $this->createMock(Horde_Imap_Client_Socket::class);
$mailbox = 'inbox';
$rangeSearchQuery = new Horde_Imap_Client_Search_Query();
$rangeSearchQuery->ids(new Horde_Imap_Client_Ids('92001:99999'));
$client->expects(self::exactly(2))
$client->expects(self::once())
->method('search')
->withConsecutive(
[
$mailbox,
null,
[
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_MIN,
Horde_Imap_Client::SEARCH_RESULTS_MAX,
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
],
],
],
->with(
$mailbox,
null,
[
$mailbox,
$rangeSearchQuery,
[
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
],
'results' => [
Horde_Imap_Client::SEARCH_RESULTS_MIN,
Horde_Imap_Client::SEARCH_RESULTS_MAX,
Horde_Imap_Client::SEARCH_RESULTS_COUNT,
],
],
]
)
->willReturnOnConsecutiveCalls(
[
'min' => 10000,
'max' => 99999,
'count' => 50000,
],
[
'count' => 50,
],
);
->willReturn([
'min' => 10000,
'max' => 99999,
'count' => 50000,
]);
$query = new Horde_Imap_Client_Fetch_Query();
$query->uid();
$pageSizeResults = new Horde_Imap_Client_Fetch_Results();
for ($i = 0; $i < 50; $i++) {
$pageSizeResults[$i] = new Horde_Imap_Client_Data_Fetch();
}
$uidResults = new Horde_Imap_Client_Fetch_Results();
foreach (range(92000, 98000) as $i) {
$uid = new Horde_Imap_Client_Data_Fetch();
$uid->setUid($i);
$uidResults[$i] = $uid;
}
$bodyResults = new Horde_Imap_Client_Fetch_Results();
$client->expects(self::exactly(2))
$client->expects(self::exactly(3))
->method('fetch')
->withConsecutive(
[
Expand All @@ -522,13 +495,21 @@ public function testFindAllPackedLastChunk(): void {
'ids' => new Horde_Imap_Client_Ids('92001:99999'),
]
],
[
$mailbox,
$query,
[
'ids' => new Horde_Imap_Client_Ids('92001:99999'),
]
],
[
$mailbox,
self::anything(),
self::anything()
]
)
->willReturnOnConsecutiveCalls(
$pageSizeResults,
$uidResults,
$bodyResults
);
Expand Down
Loading