generated from Nodarx/template
0250b5a847
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
65 lines
2.6 KiB
PHP
65 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace KTXT\ProviderImap\Tests\Unit;
|
|
|
|
use KTXM\ProviderImap\Providers\EntityResource;
|
|
use KTXM\ProviderImap\Providers\MessageProperties;
|
|
use KTXM\ProviderImap\Service\Cache\MessageIngestor;
|
|
use KTXM\ProviderImap\Stores\MessageFileStore;
|
|
use KTXM\ProviderImap\Stores\MessageStore;
|
|
use PHPUnit\Framework\TestCase;
|
|
use RuntimeException;
|
|
|
|
final class MessageIngestorTest extends TestCase
|
|
{
|
|
public function testWritesContentBeforeMetaForEachMessage(): void
|
|
{
|
|
$calls = [];
|
|
|
|
$fileStore = $this->createStub(MessageFileStore::class);
|
|
$fileStore->method('write')->willReturnCallback(
|
|
function (string $tid, string $sid, string $mailbox, int $uidValidity, int $uid, array $content) use (&$calls): void {
|
|
$calls[] = ['file', $tid, $sid, $mailbox, $uidValidity, $uid, $content['schemaVersion']];
|
|
},
|
|
);
|
|
$messageStore = $this->createStub(MessageStore::class);
|
|
$messageStore->method('upsert')->willReturnCallback(
|
|
function (string $tid, string $sid, int $uidValidity, EntityResource $entity) use (&$calls): void {
|
|
$calls[] = ['meta', $tid, $sid, $entity->collection(), $uidValidity, $entity->identifier()];
|
|
},
|
|
);
|
|
|
|
$ingested = (new MessageIngestor($fileStore, $messageStore))
|
|
->ingest('tenant', 'svc', 7, $this->entity(41), $this->entity(42));
|
|
|
|
$this->assertSame([41, 42], $ingested);
|
|
$this->assertSame([
|
|
['file', 'tenant', 'svc', 'INBOX', 7, 41, EntityResource::CACHE_SCHEMA_VERSION],
|
|
['meta', 'tenant', 'svc', 'INBOX', 7, 41],
|
|
['file', 'tenant', 'svc', 'INBOX', 7, 42, EntityResource::CACHE_SCHEMA_VERSION],
|
|
['meta', 'tenant', 'svc', 'INBOX', 7, 42],
|
|
], $calls);
|
|
}
|
|
|
|
public function testMetaIsNotWrittenWhenContentFails(): void
|
|
{
|
|
$fileStore = $this->createStub(MessageFileStore::class);
|
|
$fileStore->method('write')->willThrowException(new RuntimeException('disk full'));
|
|
$messageStore = $this->createMock(MessageStore::class);
|
|
$messageStore->expects($this->never())->method('upsert');
|
|
|
|
$this->expectException(RuntimeException::class);
|
|
(new MessageIngestor($fileStore, $messageStore))->ingest('tenant', 'svc', 7, $this->entity(41));
|
|
}
|
|
|
|
private function entity(int $uid): EntityResource
|
|
{
|
|
$properties = new MessageProperties([]);
|
|
$properties->setSubject('Message ' . $uid);
|
|
|
|
return (new EntityResource('imap', 'svc'))->fromMutation('INBOX', $uid, $properties);
|
|
}
|
|
}
|