[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: QueryTest.php
<?php /* * File: QueryTest.php * Category: - * Author: M.Goldenbaum * Created: 04.03.23 03:52 * Updated: - * * Description: * - */ namespace Tests\live; use Carbon\Carbon; use Webklex\PHPIMAP\ClientManager; use Webklex\PHPIMAP\Exceptions\AuthFailedException; use Webklex\PHPIMAP\Exceptions\ConnectionFailedException; use Webklex\PHPIMAP\Exceptions\EventNotFoundException; use Webklex\PHPIMAP\Exceptions\FolderFetchingException; use Webklex\PHPIMAP\Exceptions\GetMessagesFailedException; use Webklex\PHPIMAP\Exceptions\ImapBadRequestException; use Webklex\PHPIMAP\Exceptions\ImapServerErrorException; use Webklex\PHPIMAP\Exceptions\InvalidMessageDateException; use Webklex\PHPIMAP\Exceptions\InvalidWhereQueryCriteriaException; use Webklex\PHPIMAP\Exceptions\MaskNotFoundException; use Webklex\PHPIMAP\Exceptions\MessageContentFetchingException; use Webklex\PHPIMAP\Exceptions\MessageFlagException; use Webklex\PHPIMAP\Exceptions\MessageHeaderFetchingException; use Webklex\PHPIMAP\Exceptions\MessageSearchValidationException; use Webklex\PHPIMAP\Exceptions\ResponseException; use Webklex\PHPIMAP\Exceptions\RuntimeException; use Webklex\PHPIMAP\Folder; use Webklex\PHPIMAP\Query\WhereQuery; /** * Class QueryTest * * @package Tests */ class QueryTest extends LiveMailboxTestCase { /** * Try to create a new query instance * * @return void * @throws AuthFailedException * @throws ConnectionFailedException * @throws FolderFetchingException * @throws ImapBadRequestException * @throws ImapServerErrorException * @throws MaskNotFoundException * @throws ResponseException * @throws RuntimeException */ public function testQuery(): void { $folder = $this->getFolder('INBOX'); self::assertInstanceOf(Folder::class, $folder); self::assertInstanceOf(WhereQuery::class, $folder->query()); self::assertInstanceOf(WhereQuery::class, $folder->search()); self::assertInstanceOf(WhereQuery::class, $folder->messages()); } /** * Try to create a new query instance with a where clause * * @return void * @throws AuthFailedException * @throws ConnectionFailedException * @throws EventNotFoundException * @throws FolderFetchingException * @throws ImapBadRequestException * @throws ImapServerErrorException * @throws InvalidMessageDateException * @throws MaskNotFoundException * @throws MessageContentFetchingException * @throws MessageFlagException * @throws MessageHeaderFetchingException * @throws ResponseException * @throws RuntimeException * @throws GetMessagesFailedException * @throws InvalidWhereQueryCriteriaException * @throws MessageSearchValidationException */ public function testQueryWhere(): void { $client = $this->getClient(); $delimiter = $this->getManager()->get("options.delimiter"); $folder_path = implode($delimiter, ['INBOX', 'search']); $folder = $client->getFolder($folder_path); if ($folder !== null) { self::assertTrue($this->deleteFolder($folder)); } $folder = $client->createFolder($folder_path, false); $messages = [ $this->appendMessageTemplate($folder, '1366671050@github.com.eml'), $this->appendMessageTemplate($folder, 'attachment_encoded_filename.eml'), $this->appendMessageTemplate($folder, 'attachment_long_filename.eml'), $this->appendMessageTemplate($folder, 'attachment_no_disposition.eml'), $this->appendMessageTemplate($folder, 'bcc.eml'), $this->appendMessageTemplate($folder, 'boolean_decoded_content.eml'), $this->appendMessageTemplate($folder, 'email_address.eml'), $this->appendMessageTemplate($folder, 'embedded_email.eml'), $this->appendMessageTemplate($folder, 'embedded_email_without_content_disposition.eml'), $this->appendMessageTemplate($folder, 'embedded_email_without_content_disposition-embedded.eml'), $this->appendMessageTemplate($folder, 'example_attachment.eml'), $this->appendMessageTemplate($folder, 'example_bounce.eml'), $this->appendMessageTemplate($folder, 'four_nested_emails.eml'), $this->appendMessageTemplate($folder, 'gbk_charset.eml'), $this->appendMessageTemplate($folder, 'html_only.eml'), $this->appendMessageTemplate($folder, 'imap_mime_header_decode_returns_false.eml'), $this->appendMessageTemplate($folder, 'inline_attachment.eml'), $this->appendMessageTemplate($folder, 'issue-275.eml'), $this->appendMessageTemplate($folder, 'issue-275-2.eml'), $this->appendMessageTemplate($folder, 'issue-348.eml'), $this->appendMessageTemplate($folder, 'ks_c_5601-1987_headers.eml'), $this->appendMessageTemplate($folder, 'mail_that_is_attachment.eml'), $this->appendMessageTemplate($folder, 'missing_date.eml'), $this->appendMessageTemplate($folder, 'missing_from.eml'), $this->appendMessageTemplate($folder, 'mixed_filename.eml'), $this->appendMessageTemplate($folder, 'multipart_without_body.eml'), $this->appendMessageTemplate($folder, 'multiple_html_parts_and_attachments.eml'), $this->appendMessageTemplate($folder, 'multiple_nested_attachments.eml'), $this->appendMessageTemplate($folder, 'nestes_embedded_with_attachment.eml'), $this->appendMessageTemplate($folder, 'null_content_charset.eml'), $this->appendMessageTemplate($folder, 'pec.eml'), $this->appendMessageTemplate($folder, 'plain.eml'), $this->appendMessageTemplate($folder, 'plain_only.eml'), $this->appendMessageTemplate($folder, 'plain_text_attachment.eml'), $this->appendMessageTemplate($folder, 'references.eml'), $this->appendMessageTemplate($folder, 'simple_multipart.eml'), $this->appendMessageTemplate($folder, 'structured_with_attachment.eml'), $this->appendMessageTemplate($folder, 'thread_my_topic.eml'), $this->appendMessageTemplate($folder, 'thread_re_my_topic.eml'), $this->appendMessageTemplate($folder, 'thread_unrelated.eml'), $this->appendMessageTemplate($folder, 'undefined_charset_header.eml'), $this->appendMessageTemplate($folder, 'undisclosed_recipients_minus.eml'), $this->appendMessageTemplate($folder, 'undisclosed_recipients_space.eml'), $this->appendMessageTemplate($folder, 'unknown_encoding.eml'), $this->appendMessageTemplate($folder, 'without_charset_plain_only.eml'), $this->appendMessageTemplate($folder, 'without_charset_simple_multipart.eml'), ]; $folder->getClient()->expunge(); $query = $folder->query()->all(); self::assertEquals(count($messages), $query->count()); $query = $folder->query()->whereSubject("test"); self::assertEquals(11, $query->count()); $query = $folder->query()->whereOn(Carbon::now()); self::assertEquals(count($messages), $query->count()); self::assertTrue($this->deleteFolder($folder)); } /** * Test query where criteria * * @return void * @throws AuthFailedException * @throws ConnectionFailedException * @throws FolderFetchingException * @throws ImapBadRequestException * @throws ImapServerErrorException * @throws InvalidWhereQueryCriteriaException * @throws MaskNotFoundException * @throws ResponseException * @throws RuntimeException */ public function testQueryWhereCriteria(): void { $folder = $this->getFolder('INBOX'); self::assertInstanceOf(Folder::class, $folder); $this->assertWhereSearchCriteria($folder, 'SUBJECT', 'Test'); $this->assertWhereSearchCriteria($folder, 'BODY', 'Test'); $this->assertWhereSearchCriteria($folder, 'TEXT', 'Test'); $this->assertWhereSearchCriteria($folder, 'KEYWORD', 'Test'); $this->assertWhereSearchCriteria($folder, 'UNKEYWORD', 'Test'); $this->assertWhereSearchCriteria($folder, 'FLAGGED', 'Seen'); $this->assertWhereSearchCriteria($folder, 'UNFLAGGED', 'Seen'); $this->assertHeaderSearchCriteria($folder, 'Message-ID', 'Seen'); $this->assertHeaderSearchCriteria($folder, 'In-Reply-To', 'Seen'); $this->assertWhereSearchCriteria($folder, 'BCC', 'test@example.com'); $this->assertWhereSearchCriteria($folder, 'CC', 'test@example.com'); $this->assertWhereSearchCriteria($folder, 'FROM', 'test@example.com'); $this->assertWhereSearchCriteria($folder, 'TO', 'test@example.com'); $this->assertWhereSearchCriteria($folder, 'UID', '1'); $this->assertWhereSearchCriteria($folder, 'UID', '1,2'); $this->assertWhereSearchCriteria($folder, 'ALL'); $this->assertWhereSearchCriteria($folder, 'NEW'); $this->assertWhereSearchCriteria($folder, 'OLD'); $this->assertWhereSearchCriteria($folder, 'SEEN'); $this->assertWhereSearchCriteria($folder, 'UNSEEN'); $this->assertWhereSearchCriteria($folder, 'RECENT'); $this->assertWhereSearchCriteria($folder, 'ANSWERED'); $this->assertWhereSearchCriteria($folder, 'UNANSWERED'); $this->assertWhereSearchCriteria($folder, 'DELETED'); $this->assertWhereSearchCriteria($folder, 'UNDELETED'); $this->assertHeaderSearchCriteria($folder, 'Content-Language','en_US'); $this->assertWhereSearchCriteria($folder, 'CUSTOM X-Spam-Flag NO'); $this->assertWhereSearchCriteria($folder, 'CUSTOM X-Spam-Flag YES'); $this->assertWhereSearchCriteria($folder, 'NOT'); $this->assertWhereSearchCriteria($folder, 'OR'); $this->assertWhereSearchCriteria($folder, 'AND'); $this->assertWhereSearchCriteria($folder, 'BEFORE', '01-Jan-2020', true); $this->assertWhereSearchCriteria($folder, 'BEFORE', Carbon::now()->subDays(1), true); $this->assertWhereSearchCriteria($folder, 'ON', '01-Jan-2020', true); $this->assertWhereSearchCriteria($folder, 'ON', Carbon::now()->subDays(1), true); $this->assertWhereSearchCriteria($folder, 'SINCE', '01-Jan-2020', true); $this->assertWhereSearchCriteria($folder, 'SINCE', Carbon::now()->subDays(1), true); } /** * Assert where search criteria * @param Folder $folder * @param string $criteria * @param string|Carbon|null $value * @param bool $date * * @return void * @throws AuthFailedException * @throws ConnectionFailedException * @throws ImapBadRequestException * @throws ImapServerErrorException * @throws InvalidWhereQueryCriteriaException * @throws ResponseException * @throws RuntimeException */ protected function assertWhereSearchCriteria(Folder $folder, string $criteria, Carbon|string $value = null, bool $date = false): void { $query = $folder->query()->where($criteria, $value); self::assertInstanceOf(WhereQuery::class, $query); $item = $query->getQuery()->first(); $criteria = str_replace("CUSTOM ", "", $criteria); $expected = $value === null ? [$criteria] : [$criteria, $value]; if ($date === true && $value instanceof Carbon) { $date_format = ClientManager::get('date_format', 'd M y'); $expected[1] = $value->format($date_format); } self::assertIsArray($item); self::assertIsString($item[0]); if($value !== null) { self::assertCount(2, $item); self::assertIsString($item[1]); }else{ self::assertCount(1, $item); } self::assertSame($expected, $item); } /** * Assert header search criteria * @param Folder $folder * @param string $criteria * @param mixed|null $value * * @return void * @throws AuthFailedException * @throws ConnectionFailedException * @throws ImapBadRequestException * @throws ImapServerErrorException * @throws InvalidWhereQueryCriteriaException * @throws ResponseException * @throws RuntimeException */ protected function assertHeaderSearchCriteria(Folder $folder, string $criteria, mixed $value = null): void { $query = $folder->query()->whereHeader($criteria, $value); self::assertInstanceOf(WhereQuery::class, $query); $item = $query->getQuery()->first(); self::assertIsArray($item); self::assertIsString($item[0]); self::assertCount(1, $item); self::assertSame(['HEADER '.$criteria.' '.$value], $item); } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.62 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002