mirror of
https://github.com/itflow-org/itflow
synced 2026-03-01 11:24:52 +00:00
Reintroduce Webklex IMAP for ticket processing as PHP-IMAP is no longer being developed. This is optional for now and considered beta can be found in cron/ticket_email_parser.php
This commit is contained in:
447
plugins/vendor/webklex/php-imap/tests/live/FolderTest.php
vendored
Normal file
447
plugins/vendor/webklex/php-imap/tests/live/FolderTest.php
vendored
Normal file
@@ -0,0 +1,447 @@
|
||||
<?php
|
||||
/*
|
||||
* File: FolderTest.php
|
||||
* Category: -
|
||||
* Author: M.Goldenbaum
|
||||
* Created: 04.03.23 03:52
|
||||
* Updated: -
|
||||
*
|
||||
* Description:
|
||||
* -
|
||||
*/
|
||||
|
||||
namespace Tests\live;
|
||||
|
||||
use Webklex\PHPIMAP\Client;
|
||||
use Webklex\PHPIMAP\Exceptions\AuthFailedException;
|
||||
use Webklex\PHPIMAP\Exceptions\ConnectionFailedException;
|
||||
use Webklex\PHPIMAP\Exceptions\EventNotFoundException;
|
||||
use Webklex\PHPIMAP\Exceptions\FolderFetchingException;
|
||||
use Webklex\PHPIMAP\Exceptions\ImapBadRequestException;
|
||||
use Webklex\PHPIMAP\Exceptions\ImapServerErrorException;
|
||||
use Webklex\PHPIMAP\Exceptions\InvalidMessageDateException;
|
||||
use Webklex\PHPIMAP\Exceptions\MaskNotFoundException;
|
||||
use Webklex\PHPIMAP\Exceptions\MessageContentFetchingException;
|
||||
use Webklex\PHPIMAP\Exceptions\MessageFlagException;
|
||||
use Webklex\PHPIMAP\Exceptions\MessageHeaderFetchingException;
|
||||
use Webklex\PHPIMAP\Exceptions\MessageNotFoundException;
|
||||
use Webklex\PHPIMAP\Exceptions\ResponseException;
|
||||
use Webklex\PHPIMAP\Exceptions\RuntimeException;
|
||||
use Webklex\PHPIMAP\Folder;
|
||||
use Webklex\PHPIMAP\Message;
|
||||
use Webklex\PHPIMAP\Query\WhereQuery;
|
||||
use Webklex\PHPIMAP\Support\FolderCollection;
|
||||
|
||||
/**
|
||||
* Class FolderTest
|
||||
*
|
||||
* @package Tests
|
||||
*/
|
||||
class FolderTest 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());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::hasChildren()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
* @throws EventNotFoundException
|
||||
*/
|
||||
public function testHasChildren(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$delimiter = $this->getManager()->getConfig()->get("options.delimiter");
|
||||
$child_path = implode($delimiter, ['INBOX', 'test']);
|
||||
if ($folder->getClient()->getFolder($child_path) === null) {
|
||||
$folder->getClient()->createFolder($child_path, false);
|
||||
$folder = $this->getFolder('INBOX');
|
||||
}
|
||||
|
||||
self::assertTrue($folder->hasChildren());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::setChildren()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws EventNotFoundException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testSetChildren(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$delimiter = $this->getManager()->getConfig()->get("options.delimiter");
|
||||
$child_path = implode($delimiter, ['INBOX', 'test']);
|
||||
if ($folder->getClient()->getFolder($child_path) === null) {
|
||||
$folder->getClient()->createFolder($child_path, false);
|
||||
$folder = $this->getFolder('INBOX');
|
||||
}
|
||||
self::assertTrue($folder->hasChildren());
|
||||
|
||||
$folder->setChildren(new FolderCollection());
|
||||
self::assertTrue($folder->getChildren()->isEmpty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::getChildren()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws EventNotFoundException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testGetChildren(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$delimiter = $this->getManager()->getConfig()->get("options.delimiter");
|
||||
$child_path = implode($delimiter, ['INBOX', 'test']);
|
||||
if ($folder->getClient()->getFolder($child_path) === null) {
|
||||
$folder->getClient()->createFolder($child_path, false);
|
||||
}
|
||||
|
||||
$folder = $folder->getClient()->getFolders()->where('name', 'INBOX')->first();
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
self::assertTrue($folder->hasChildren());
|
||||
self::assertFalse($folder->getChildren()->isEmpty());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::move()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws EventNotFoundException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testMove(): void {
|
||||
$client = $this->getClient();
|
||||
|
||||
$delimiter = $this->getManager()->getConfig()->get("options.delimiter");
|
||||
$folder_path = implode($delimiter, ['INBOX', 'test']);
|
||||
|
||||
$folder = $client->getFolder($folder_path);
|
||||
if ($folder === null) {
|
||||
$folder = $client->createFolder($folder_path, false);
|
||||
}
|
||||
$new_folder_path = implode($delimiter, ['INBOX', 'other']);
|
||||
$new_folder = $client->getFolder($new_folder_path);
|
||||
$new_folder?->delete(false);
|
||||
|
||||
$status = $folder->move($new_folder_path, false);
|
||||
self::assertIsArray($status);
|
||||
self::assertTrue(str_starts_with($status[0], 'OK'));
|
||||
|
||||
$new_folder = $client->getFolder($new_folder_path);
|
||||
self::assertEquals($new_folder_path, $new_folder->path);
|
||||
self::assertEquals('other', $new_folder->name);
|
||||
|
||||
if ($this->deleteFolder($new_folder) === false) {
|
||||
$this->fail("Could not delete folder: " . $new_folder->path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::delete()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws EventNotFoundException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testDelete(): void {
|
||||
$client = $this->getClient();
|
||||
|
||||
$delimiter = $this->getManager()->getConfig()->get("options.delimiter");
|
||||
$folder_path = implode($delimiter, ['INBOX', 'test']);
|
||||
|
||||
$folder = $client->getFolder($folder_path);
|
||||
if ($folder === null) {
|
||||
$folder = $client->createFolder($folder_path, false);
|
||||
}
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
if ($this->deleteFolder($folder) === false) {
|
||||
$this->fail("Could not delete folder: " . $folder->path);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::overview()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws EventNotFoundException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
* @throws InvalidMessageDateException
|
||||
* @throws MessageContentFetchingException
|
||||
* @throws MessageFlagException
|
||||
* @throws MessageHeaderFetchingException
|
||||
* @throws MessageNotFoundException
|
||||
*/
|
||||
public function testOverview(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$folder->select();
|
||||
|
||||
// Test empty overview
|
||||
$overview = $folder->overview();
|
||||
self::assertIsArray($overview);
|
||||
self::assertCount(0, $overview);
|
||||
|
||||
$message = $this->appendMessageTemplate($folder, "plain.eml");
|
||||
|
||||
$overview = $folder->overview();
|
||||
|
||||
self::assertIsArray($overview);
|
||||
self::assertCount(1, $overview);
|
||||
|
||||
self::assertEquals($message->from->first()->full, end($overview)["from"]->toString());
|
||||
|
||||
self::assertTrue($message->delete());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::appendMessage()
|
||||
*
|
||||
* @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 MessageNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testAppendMessage(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$message = $this->appendMessageTemplate($folder, "plain.eml");
|
||||
self::assertInstanceOf(Message::class, $message);
|
||||
|
||||
self::assertEquals("Example", $message->subject);
|
||||
self::assertEquals("to@someone-else.com", $message->to);
|
||||
self::assertEquals("from@someone.com", $message->from);
|
||||
|
||||
// Clean up
|
||||
$this->assertTrue($message->delete(true));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::subscribe()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testSubscribe(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$status = $folder->subscribe();
|
||||
self::assertIsArray($status);
|
||||
self::assertTrue(str_starts_with($status[0], 'OK'));
|
||||
|
||||
// Clean up
|
||||
$folder->unsubscribe();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::unsubscribe()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testUnsubscribe(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$folder->subscribe();
|
||||
|
||||
$status = $folder->subscribe();
|
||||
self::assertIsArray($status);
|
||||
self::assertTrue(str_starts_with($status[0], 'OK'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::status()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testStatus(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$status = $folder->status();
|
||||
self::assertEquals(0, $status['messages']);
|
||||
self::assertEquals(0, $status['recent']);
|
||||
self::assertEquals(0, $status['unseen']);
|
||||
self::assertGreaterThan(0, $status['uidnext']);
|
||||
self::assertGreaterThan(0, $status['uidvalidity']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::examine()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testExamine(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$status = $folder->examine();
|
||||
self::assertTrue(isset($status["flags"]) && count($status["flags"]) > 0);
|
||||
self::assertTrue(($status["uidnext"] ?? 0) > 0);
|
||||
self::assertTrue(($status["uidvalidity"] ?? 0) > 0);
|
||||
self::assertTrue(($status["recent"] ?? -1) >= 0);
|
||||
self::assertTrue(($status["exists"] ?? -1) >= 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::getClient()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testGetClient(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
self::assertInstanceOf(Client::class, $folder->getClient());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test Folder::setDelimiter()
|
||||
*
|
||||
* @return void
|
||||
* @throws AuthFailedException
|
||||
* @throws ConnectionFailedException
|
||||
* @throws FolderFetchingException
|
||||
* @throws ImapBadRequestException
|
||||
* @throws ImapServerErrorException
|
||||
* @throws MaskNotFoundException
|
||||
* @throws ResponseException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function testSetDelimiter(): void {
|
||||
$folder = $this->getFolder('INBOX');
|
||||
self::assertInstanceOf(Folder::class, $folder);
|
||||
|
||||
$folder->setDelimiter("/");
|
||||
self::assertEquals("/", $folder->delimiter);
|
||||
|
||||
$folder->setDelimiter(".");
|
||||
self::assertEquals(".", $folder->delimiter);
|
||||
|
||||
$default_delimiter = $this->getManager()->getConfig()->get("options.delimiter", "/");
|
||||
$folder->setDelimiter(null);
|
||||
self::assertEquals($default_delimiter, $folder->delimiter);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user