Skip to content

Commit a93ea51

Browse files
committed
Update and add tests
1 parent d13b472 commit a93ea51

File tree

3 files changed

+54
-21
lines changed

3 files changed

+54
-21
lines changed

tests/Integration/MessagesTest.php

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,18 @@ function folder(): Folder
182182
$targetFolderName = uniqid()
183183
);
184184

185-
$message->copy($targetFolderName);
185+
$newUid = $message->copy($targetFolderName);
186186

187-
$targetMessages = $targetFolder->messages()
188-
->withHeaders()
189-
->withBody()
190-
->get();
191-
192-
expect($targetMessages->count())->toBe(1);
187+
expect($newUid)->toBeInt();
188+
expect($newUid)->toBeGreaterThan(0);
193189

194-
/** @var Message $movedMessage */
195-
$movedMessage = $targetMessages->first();
190+
$copiedMessage = $targetFolder->messages()
191+
->withBody()
192+
->withHeaders()
193+
->findOrFail($newUid);
196194

197-
expect($movedMessage->from()->email())->toBe('[email protected]');
198-
expect($movedMessage->text())->toBe('copy test');
195+
expect($copiedMessage->from()->email())->toBe('[email protected]');
196+
expect($copiedMessage->text())->toBe('copy test');
199197
});
200198

201199
test('move', function () {
@@ -216,13 +214,14 @@ function folder(): Folder
216214
$targetFolderName = uniqid()
217215
);
218216

219-
$message->move($targetFolderName);
217+
expect($message->move($targetFolderName))->toBeNull();
220218

221219
$targetMessages = $targetFolder->messages()
222220
->withHeaders()
223221
->withBody()
224222
->get();
225223

224+
expect($folder->messages()->count())->toBe(0);
226225
expect($targetMessages->count())->toBe(1);
227226

228227
/** @var Message $movedMessage */

tests/Unit/Connection/Responses/MessageResponseParserTest.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
<?php
22

33
use DirectoryTree\ImapEngine\Connection\Responses\Data\ListData;
4+
use DirectoryTree\ImapEngine\Connection\Responses\Data\ResponseCodeData;
45
use DirectoryTree\ImapEngine\Connection\Responses\MessageResponseParser;
6+
use DirectoryTree\ImapEngine\Connection\Responses\TaggedResponse;
57
use DirectoryTree\ImapEngine\Connection\Responses\UntaggedResponse;
68
use DirectoryTree\ImapEngine\Connection\Tokens\Atom;
79
use DirectoryTree\ImapEngine\Connection\Tokens\Literal;
@@ -89,3 +91,31 @@
8991

9092
expect($parsedFlags)->toBe(['11111' => []]);
9193
});
94+
95+
it('parses UID from tagged COPYUID response', function () {
96+
$response = new TaggedResponse([
97+
new Atom('TAG1'), // Tag
98+
new Atom('OK'), // Status
99+
new ResponseCodeData([
100+
new Atom('COPYUID'), // Response code
101+
new Atom('1570950167'), // UIDVALIDITY
102+
new Atom('1234'), // Source UID
103+
new Atom('5678'), // Destination UID
104+
]),
105+
new Atom('Move completed.'), // Human-readable text
106+
]);
107+
108+
$parsedUid = MessageResponseParser::getUidFromCopy($response);
109+
110+
expect($parsedUid)->toBe(5678);
111+
});
112+
113+
it('returns null for non-COPYUID tagged response', function () {
114+
$response = new TaggedResponse([
115+
new Atom('TAG1'),
116+
new Atom('OK'),
117+
new Atom('Move completed.'),
118+
]);
119+
120+
expect(MessageResponseParser::getUidFromCopy($response))->toBeNull();
121+
});

tests/Unit/MessageTest.php

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use DirectoryTree\ImapEngine\Mailbox;
88
use DirectoryTree\ImapEngine\Message;
99

10-
test('it moves message using MOVE when capable', function () {
10+
test('it moves message using MOVE when capable and returns the new UID', function () {
1111
$mailbox = Mailbox::make([
1212
'username' => 'foo',
1313
'password' => 'bar',
@@ -18,17 +18,19 @@
1818
'TAG1 OK Logged in',
1919
'* CAPABILITY IMAP4rev1 STARTTLS MOVE AUTH=PLAIN',
2020
'TAG2 OK CAPABILITY completed',
21-
'TAG3 OK MOVE completed',
21+
'TAG3 OK [COPYUID 1234567890 1 42] MOVE completed',
2222
]));
2323

2424
$folder = new Folder($mailbox, 'INBOX', [], '/');
2525

2626
$message = new Message($folder, 1, [], 'header', 'body');
2727

28-
$message->move('INBOX.Sent');
29-
})->throwsNoExceptions();
28+
$newUid = $message->move('INBOX.Sent');
29+
30+
expect($newUid)->toBe(42);
31+
});
3032

31-
test('it copies and then deletes message using UIDPLUS when incapable of MOVE', function () {
33+
test('it copies and then deletes message using UIDPLUS when incapable of MOVE and returns the new UID', function () {
3234
$mailbox = Mailbox::make([
3335
'username' => 'foo',
3436
'password' => 'bar',
@@ -39,16 +41,18 @@
3941
'TAG1 OK Logged in',
4042
'* CAPABILITY IMAP4rev1 STARTTLS UIDPLUS AUTH=PLAIN',
4143
'TAG2 OK CAPABILITY completed',
42-
'TAG3 OK UID MOVE completed',
43-
'TAG4 OK COPY completed',
44+
'TAG3 OK [COPYUID 1234567890 1 123] COPY completed',
45+
'TAG4 OK STORE completed',
4446
]));
4547

4648
$folder = new Folder($mailbox, 'INBOX', [], '/');
4749

4850
$message = new Message($folder, 1, [], 'header', 'body');
4951

50-
$message->move('INBOX.Sent');
51-
})->throwsNoExceptions();
52+
$newUid = $message->move('INBOX.Sent');
53+
54+
expect($newUid)->toBe(123);
55+
});
5256

5357
test('it throws exception when server does not support MOVE or UIDPLUS capabilities', function () {
5458
$mailbox = Mailbox::make([

0 commit comments

Comments
 (0)