@remit/imap-worker 0.0.69 → 0.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/handlers/append-sent-message.test.ts +20 -30
- package/src/handlers/delete-account-objects.test.ts +6 -16
- package/src/handlers/empty-trash.test.ts +159 -28
- package/src/handlers/empty-trash.ts +31 -9
- package/src/handlers/mailbox-management.test.ts +25 -35
- package/src/handlers/message-copy.test.ts +25 -35
- package/src/handlers/message-delete.test.ts +40 -49
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { beforeEach, describe, it } from "node:test";
|
|
3
|
-
import
|
|
3
|
+
import { noopLogger } from "@remit/logger-lambda/noop-logger";
|
|
4
4
|
import type {
|
|
5
5
|
MailboxCreateEvent,
|
|
6
6
|
MailboxDeleteEvent,
|
|
@@ -11,16 +11,6 @@ import {
|
|
|
11
11
|
processMailboxManagement,
|
|
12
12
|
} from "./mailbox-management.js";
|
|
13
13
|
|
|
14
|
-
const noopLog = {
|
|
15
|
-
info: () => {},
|
|
16
|
-
warn: () => {},
|
|
17
|
-
error: () => {},
|
|
18
|
-
debug: () => {},
|
|
19
|
-
fatal: () => {},
|
|
20
|
-
trace: () => {},
|
|
21
|
-
child: () => noopLog,
|
|
22
|
-
} as unknown as Logger;
|
|
23
|
-
|
|
24
14
|
interface Call {
|
|
25
15
|
method: string;
|
|
26
16
|
args: unknown[];
|
|
@@ -163,7 +153,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
163
153
|
});
|
|
164
154
|
|
|
165
155
|
it("creates the folder and writes back the server's UIDVALIDITY and counts", async () => {
|
|
166
|
-
await processMailboxManagement(createEvent,
|
|
156
|
+
await processMailboxManagement(createEvent, noopLogger, deps());
|
|
167
157
|
|
|
168
158
|
assert.equal(called("connection.createMailbox")[0]?.args[0], "Archive");
|
|
169
159
|
assert.deepEqual(lastUpdate(), {
|
|
@@ -176,13 +166,13 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
176
166
|
});
|
|
177
167
|
|
|
178
168
|
it("subscribes only when the event asks for it", async () => {
|
|
179
|
-
await processMailboxManagement(createEvent,
|
|
169
|
+
await processMailboxManagement(createEvent, noopLogger, deps());
|
|
180
170
|
assert.equal(called("connection.subscribeMailbox").length, 0);
|
|
181
171
|
|
|
182
172
|
h = fresh();
|
|
183
173
|
await processMailboxManagement(
|
|
184
174
|
{ ...createEvent, subscribe: true },
|
|
185
|
-
|
|
175
|
+
noopLogger,
|
|
186
176
|
deps(),
|
|
187
177
|
);
|
|
188
178
|
assert.equal(called("connection.subscribeMailbox")[0]?.args[0], "Archive");
|
|
@@ -191,7 +181,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
191
181
|
it("still marks the mailbox synced when the server does not list the new folder", async () => {
|
|
192
182
|
h.connection.listMailboxes = async () => [];
|
|
193
183
|
|
|
194
|
-
await processMailboxManagement(createEvent,
|
|
184
|
+
await processMailboxManagement(createEvent, noopLogger, deps());
|
|
195
185
|
|
|
196
186
|
assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
|
|
197
187
|
});
|
|
@@ -201,7 +191,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
201
191
|
throw new Error("Mailbox already exists");
|
|
202
192
|
};
|
|
203
193
|
|
|
204
|
-
await processMailboxManagement(createEvent,
|
|
194
|
+
await processMailboxManagement(createEvent, noopLogger, deps());
|
|
205
195
|
|
|
206
196
|
assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
|
|
207
197
|
});
|
|
@@ -212,7 +202,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
212
202
|
};
|
|
213
203
|
|
|
214
204
|
await assert.rejects(
|
|
215
|
-
processMailboxManagement(createEvent,
|
|
205
|
+
processMailboxManagement(createEvent, noopLogger, deps()),
|
|
216
206
|
/server exploded/,
|
|
217
207
|
);
|
|
218
208
|
|
|
@@ -225,7 +215,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
225
215
|
// create is moot and must not poison the account's FIFO.
|
|
226
216
|
h.mailboxUpdateError = notFoundError();
|
|
227
217
|
|
|
228
|
-
await processMailboxManagement(createEvent,
|
|
218
|
+
await processMailboxManagement(createEvent, noopLogger, deps());
|
|
229
219
|
|
|
230
220
|
assert.equal(h.disconnectCount, 1, "the scope is still disconnected");
|
|
231
221
|
});
|
|
@@ -237,7 +227,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
237
227
|
deletedAt: Date.now(),
|
|
238
228
|
};
|
|
239
229
|
|
|
240
|
-
await processMailboxManagement(createEvent,
|
|
230
|
+
await processMailboxManagement(createEvent, noopLogger, deps());
|
|
241
231
|
|
|
242
232
|
assert.equal(called("connection.createMailbox").length, 0);
|
|
243
233
|
});
|
|
@@ -246,7 +236,7 @@ describe("processMailboxManagement — MAILBOX_CREATE", () => {
|
|
|
246
236
|
h.account = null;
|
|
247
237
|
|
|
248
238
|
await assert.rejects(
|
|
249
|
-
processMailboxManagement(createEvent,
|
|
239
|
+
processMailboxManagement(createEvent, noopLogger, deps()),
|
|
250
240
|
/not found/,
|
|
251
241
|
);
|
|
252
242
|
});
|
|
@@ -258,7 +248,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
|
|
|
258
248
|
});
|
|
259
249
|
|
|
260
250
|
it("renames on the server and clears the pending oldPath", async () => {
|
|
261
|
-
await processMailboxManagement(renameEvent,
|
|
251
|
+
await processMailboxManagement(renameEvent, noopLogger, deps());
|
|
262
252
|
|
|
263
253
|
assert.deepEqual(called("connection.renameMailbox")[0]?.args, [
|
|
264
254
|
"Archive",
|
|
@@ -275,7 +265,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
|
|
|
275
265
|
throw new Error("Mailbox not found");
|
|
276
266
|
};
|
|
277
267
|
|
|
278
|
-
await processMailboxManagement(renameEvent,
|
|
268
|
+
await processMailboxManagement(renameEvent, noopLogger, deps());
|
|
279
269
|
|
|
280
270
|
assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
|
|
281
271
|
assert.equal(called("mailbox.update").length, 0);
|
|
@@ -287,7 +277,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
|
|
|
287
277
|
};
|
|
288
278
|
h.mailboxUpdateError = notFoundError();
|
|
289
279
|
|
|
290
|
-
await processMailboxManagement(renameEvent,
|
|
280
|
+
await processMailboxManagement(renameEvent, noopLogger, deps());
|
|
291
281
|
|
|
292
282
|
assert.equal(h.disconnectCount, 1, "the scope is still disconnected");
|
|
293
283
|
});
|
|
@@ -298,7 +288,7 @@ describe("processMailboxManagement — MAILBOX_RENAME", () => {
|
|
|
298
288
|
};
|
|
299
289
|
|
|
300
290
|
await assert.rejects(
|
|
301
|
-
processMailboxManagement(renameEvent,
|
|
291
|
+
processMailboxManagement(renameEvent, noopLogger, deps()),
|
|
302
292
|
/server exploded/,
|
|
303
293
|
);
|
|
304
294
|
|
|
@@ -316,7 +306,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
|
|
|
316
306
|
});
|
|
317
307
|
|
|
318
308
|
it("deletes on the server and drops the local row", async () => {
|
|
319
|
-
await processMailboxManagement(deleteEvent,
|
|
309
|
+
await processMailboxManagement(deleteEvent, noopLogger, deps());
|
|
320
310
|
|
|
321
311
|
assert.equal(called("connection.deleteMailbox")[0]?.args[0], "Archive");
|
|
322
312
|
assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
|
|
@@ -327,7 +317,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
|
|
|
327
317
|
throw new Error("Mailbox not found");
|
|
328
318
|
};
|
|
329
319
|
|
|
330
|
-
await processMailboxManagement(deleteEvent,
|
|
320
|
+
await processMailboxManagement(deleteEvent, noopLogger, deps());
|
|
331
321
|
|
|
332
322
|
assert.equal(called("mailbox.delete").length, 1);
|
|
333
323
|
});
|
|
@@ -337,7 +327,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
|
|
|
337
327
|
throw new Error("Cannot delete INBOX");
|
|
338
328
|
};
|
|
339
329
|
|
|
340
|
-
await processMailboxManagement(deleteEvent,
|
|
330
|
+
await processMailboxManagement(deleteEvent, noopLogger, deps());
|
|
341
331
|
|
|
342
332
|
assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
|
|
343
333
|
assert.equal(called("mailbox.delete").length, 0);
|
|
@@ -349,7 +339,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
|
|
|
349
339
|
};
|
|
350
340
|
|
|
351
341
|
await assert.rejects(
|
|
352
|
-
processMailboxManagement(deleteEvent,
|
|
342
|
+
processMailboxManagement(deleteEvent, noopLogger, deps()),
|
|
353
343
|
/server exploded/,
|
|
354
344
|
);
|
|
355
345
|
|
|
@@ -362,7 +352,7 @@ describe("processMailboxManagement — MAILBOX_DELETE", () => {
|
|
|
362
352
|
};
|
|
363
353
|
h.mailboxUpdateError = notFoundError();
|
|
364
354
|
|
|
365
|
-
await processMailboxManagement(deleteEvent,
|
|
355
|
+
await processMailboxManagement(deleteEvent, noopLogger, deps());
|
|
366
356
|
|
|
367
357
|
assert.equal(h.disconnectCount, 1, "the scope is still disconnected");
|
|
368
358
|
});
|
|
@@ -388,7 +378,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
|
|
|
388
378
|
};
|
|
389
379
|
|
|
390
380
|
await assert.doesNotReject(
|
|
391
|
-
processMailboxManagement(deleteEvent,
|
|
381
|
+
processMailboxManagement(deleteEvent, noopLogger, deps()),
|
|
392
382
|
);
|
|
393
383
|
assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
|
|
394
384
|
assert.equal(called("mailbox.update").length, 0);
|
|
@@ -403,7 +393,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
|
|
|
403
393
|
};
|
|
404
394
|
|
|
405
395
|
await assert.rejects(
|
|
406
|
-
processMailboxManagement(deleteEvent,
|
|
396
|
+
processMailboxManagement(deleteEvent, noopLogger, deps()),
|
|
407
397
|
/Command failed/,
|
|
408
398
|
);
|
|
409
399
|
assert.deepEqual(lastUpdate(), { syncStatus: "failed" });
|
|
@@ -424,7 +414,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
|
|
|
424
414
|
};
|
|
425
415
|
|
|
426
416
|
await assert.doesNotReject(
|
|
427
|
-
processMailboxManagement(createEvent,
|
|
417
|
+
processMailboxManagement(createEvent, noopLogger, deps()),
|
|
428
418
|
);
|
|
429
419
|
assert.deepEqual(lastUpdate(), { syncStatus: "synced" });
|
|
430
420
|
});
|
|
@@ -438,7 +428,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
|
|
|
438
428
|
};
|
|
439
429
|
|
|
440
430
|
await assert.rejects(
|
|
441
|
-
processMailboxManagement(createEvent,
|
|
431
|
+
processMailboxManagement(createEvent, noopLogger, deps()),
|
|
442
432
|
/Command failed/,
|
|
443
433
|
);
|
|
444
434
|
assert.deepEqual(lastUpdate(), { syncStatus: "failed" });
|
|
@@ -453,7 +443,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
|
|
|
453
443
|
};
|
|
454
444
|
|
|
455
445
|
await assert.doesNotReject(
|
|
456
|
-
processMailboxManagement(renameEvent,
|
|
446
|
+
processMailboxManagement(renameEvent, noopLogger, deps()),
|
|
457
447
|
);
|
|
458
448
|
assert.deepEqual(called("mailbox.delete")[0]?.args, ["acc-1", "mbx-1"]);
|
|
459
449
|
});
|
|
@@ -467,7 +457,7 @@ describe("processMailboxManagement — a tagged NO the server means as success (
|
|
|
467
457
|
};
|
|
468
458
|
|
|
469
459
|
await assert.rejects(
|
|
470
|
-
processMailboxManagement(renameEvent,
|
|
460
|
+
processMailboxManagement(renameEvent, noopLogger, deps()),
|
|
471
461
|
/Command failed/,
|
|
472
462
|
);
|
|
473
463
|
assert.equal(lastUpdate()?.syncStatus, "failed");
|
|
@@ -1,19 +1,9 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { beforeEach, describe, it } from "node:test";
|
|
3
|
-
import
|
|
3
|
+
import { noopLogger } from "@remit/logger-lambda/noop-logger";
|
|
4
4
|
import type { MessageCopyEvent } from "../events.js";
|
|
5
5
|
import { handleMessageCopy, type MessageCopyDeps } from "./message-copy.js";
|
|
6
6
|
|
|
7
|
-
const noopLog = {
|
|
8
|
-
info: () => {},
|
|
9
|
-
warn: () => {},
|
|
10
|
-
error: () => {},
|
|
11
|
-
debug: () => {},
|
|
12
|
-
fatal: () => {},
|
|
13
|
-
trace: () => {},
|
|
14
|
-
child: () => noopLog,
|
|
15
|
-
} as unknown as Logger;
|
|
16
|
-
|
|
17
7
|
interface Call {
|
|
18
8
|
method: string;
|
|
19
9
|
args: unknown[];
|
|
@@ -194,7 +184,7 @@ describe("handleMessageCopy", () => {
|
|
|
194
184
|
});
|
|
195
185
|
|
|
196
186
|
it("writes the new UID, marks the copy synced, and updates the thread row", async () => {
|
|
197
|
-
await handleMessageCopy(event,
|
|
187
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
198
188
|
|
|
199
189
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
200
190
|
"new-msg",
|
|
@@ -214,7 +204,7 @@ describe("handleMessageCopy", () => {
|
|
|
214
204
|
h.connection.copyMessages = async () => ({ uidMap: new Map() });
|
|
215
205
|
h.destinationHolds = [42];
|
|
216
206
|
|
|
217
|
-
await handleMessageCopy(event,
|
|
207
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
218
208
|
|
|
219
209
|
assert.ok(askedTheDestination(), "the destination was asked for the copy");
|
|
220
210
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
@@ -240,7 +230,7 @@ describe("handleMessageCopy", () => {
|
|
|
240
230
|
h.connection.copyMessages = async () => ({ uidMap: new Map() });
|
|
241
231
|
h.destinationHolds = [12, 42];
|
|
242
232
|
|
|
243
|
-
await handleMessageCopy(event,
|
|
233
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
244
234
|
|
|
245
235
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
246
236
|
"new-msg",
|
|
@@ -253,7 +243,7 @@ describe("handleMessageCopy", () => {
|
|
|
253
243
|
h.connection.copyMessages = async () => ({ uidMap: new Map() });
|
|
254
244
|
h.destinationHolds = [];
|
|
255
245
|
|
|
256
|
-
await handleMessageCopy(event,
|
|
246
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
257
247
|
|
|
258
248
|
assert.ok(askedTheDestination());
|
|
259
249
|
assert.equal(called("message.delete")[0]?.args[0], "new-msg");
|
|
@@ -269,7 +259,7 @@ describe("handleMessageCopy", () => {
|
|
|
269
259
|
};
|
|
270
260
|
h.copyRow = { ...unsettledCopyRow(), messageIdHeader: undefined };
|
|
271
261
|
|
|
272
|
-
await handleMessageCopy(event,
|
|
262
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
273
263
|
|
|
274
264
|
assert.equal(copies, 1, "the COPY is issued once");
|
|
275
265
|
assert.equal(called("search").length, 0, "there is nothing to ask with");
|
|
@@ -285,7 +275,7 @@ describe("handleMessageCopy", () => {
|
|
|
285
275
|
it("never copies twice when a redelivered copy already landed", async () => {
|
|
286
276
|
h.destinationHolds = [42];
|
|
287
277
|
|
|
288
|
-
await handleMessageCopy(event,
|
|
278
|
+
await handleMessageCopy(event, noopLogger, 2, deps());
|
|
289
279
|
|
|
290
280
|
assert.equal(called("copyMessages").length, 0);
|
|
291
281
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
@@ -305,10 +295,10 @@ describe("handleMessageCopy", () => {
|
|
|
305
295
|
};
|
|
306
296
|
|
|
307
297
|
await assert.rejects(
|
|
308
|
-
handleMessageCopy(event,
|
|
298
|
+
handleMessageCopy(event, noopLogger, 1, deps()),
|
|
309
299
|
/connection reset/,
|
|
310
300
|
);
|
|
311
|
-
await handleMessageCopy(event,
|
|
301
|
+
await handleMessageCopy(event, noopLogger, 2, deps());
|
|
312
302
|
|
|
313
303
|
assert.equal(copies, 1, "the redelivery issues no second COPY");
|
|
314
304
|
assert.equal(called("search").length, 0);
|
|
@@ -324,7 +314,7 @@ describe("handleMessageCopy", () => {
|
|
|
324
314
|
syncStatus: "synced",
|
|
325
315
|
};
|
|
326
316
|
|
|
327
|
-
await handleMessageCopy(event,
|
|
317
|
+
await handleMessageCopy(event, noopLogger, 2, deps());
|
|
328
318
|
|
|
329
319
|
assert.equal(h.getConnectionCount, 0);
|
|
330
320
|
assert.equal(called("copyMessages").length, 0);
|
|
@@ -333,7 +323,7 @@ describe("handleMessageCopy", () => {
|
|
|
333
323
|
it("acks when the copy row no longer exists", async () => {
|
|
334
324
|
h.copyRow = null;
|
|
335
325
|
|
|
336
|
-
await handleMessageCopy(event,
|
|
326
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
337
327
|
|
|
338
328
|
assert.equal(h.getConnectionCount, 0);
|
|
339
329
|
assert.equal(called("message.update").length, 0);
|
|
@@ -346,7 +336,7 @@ describe("handleMessageCopy", () => {
|
|
|
346
336
|
deletedAt: Date.now(),
|
|
347
337
|
};
|
|
348
338
|
|
|
349
|
-
await handleMessageCopy(event,
|
|
339
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
350
340
|
|
|
351
341
|
assert.equal(h.getConnectionCount, 0);
|
|
352
342
|
});
|
|
@@ -355,7 +345,7 @@ describe("handleMessageCopy", () => {
|
|
|
355
345
|
h.account = null;
|
|
356
346
|
|
|
357
347
|
await assert.rejects(
|
|
358
|
-
handleMessageCopy(event,
|
|
348
|
+
handleMessageCopy(event, noopLogger, 1, deps()),
|
|
359
349
|
/not found/,
|
|
360
350
|
);
|
|
361
351
|
});
|
|
@@ -363,7 +353,7 @@ describe("handleMessageCopy", () => {
|
|
|
363
353
|
it("acks terminally without connecting when the source mailbox was deleted", async () => {
|
|
364
354
|
h.mailboxError = notFoundError();
|
|
365
355
|
|
|
366
|
-
await handleMessageCopy(event,
|
|
356
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
367
357
|
|
|
368
358
|
assert.equal(h.getConnectionCount, 0);
|
|
369
359
|
assert.equal(called("message.updateUid").length, 0);
|
|
@@ -382,7 +372,7 @@ describe("handleMessageCopy", () => {
|
|
|
382
372
|
cursorState: "rebuilding",
|
|
383
373
|
};
|
|
384
374
|
|
|
385
|
-
await handleMessageCopy(event,
|
|
375
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
386
376
|
|
|
387
377
|
assert.equal(h.getConnectionCount, 0);
|
|
388
378
|
assert.equal(called("message.updateUid").length, 0);
|
|
@@ -405,7 +395,7 @@ describe("handleMessageCopy", () => {
|
|
|
405
395
|
};
|
|
406
396
|
h.destinationHolds = [42];
|
|
407
397
|
|
|
408
|
-
await handleMessageCopy(event,
|
|
398
|
+
await handleMessageCopy(event, noopLogger, 2, deps());
|
|
409
399
|
|
|
410
400
|
assert.ok(askedTheDestination(), "the destination was asked for the copy");
|
|
411
401
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
@@ -429,7 +419,7 @@ describe("handleMessageCopy", () => {
|
|
|
429
419
|
};
|
|
430
420
|
h.copyRow = { ...unsettledCopyRow(), messageIdHeader: undefined };
|
|
431
421
|
|
|
432
|
-
await handleMessageCopy(event,
|
|
422
|
+
await handleMessageCopy(event, noopLogger, 2, deps());
|
|
433
423
|
|
|
434
424
|
assert.equal(
|
|
435
425
|
called("message.delete").length,
|
|
@@ -453,7 +443,7 @@ describe("handleMessageCopy", () => {
|
|
|
453
443
|
cursorState: "rebuilding",
|
|
454
444
|
};
|
|
455
445
|
|
|
456
|
-
await handleMessageCopy(event,
|
|
446
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
457
447
|
|
|
458
448
|
assert.deepEqual(
|
|
459
449
|
called("emitEvent").map((c) => c.args[0]),
|
|
@@ -472,7 +462,7 @@ describe("handleMessageCopy", () => {
|
|
|
472
462
|
};
|
|
473
463
|
h.destinationHolds = [];
|
|
474
464
|
|
|
475
|
-
await handleMessageCopy(event,
|
|
465
|
+
await handleMessageCopy(event, noopLogger, 2, deps());
|
|
476
466
|
|
|
477
467
|
assert.ok(askedTheDestination());
|
|
478
468
|
assert.deepEqual(called("message.delete")[0]?.args, ["new-msg"]);
|
|
@@ -481,7 +471,7 @@ describe("handleMessageCopy", () => {
|
|
|
481
471
|
it("reconciles the optimistic copy row away when openBox trips a UIDVALIDITY mismatch", async () => {
|
|
482
472
|
h.connection.openBox = async () => ({ uidvalidity: 999 });
|
|
483
473
|
|
|
484
|
-
await handleMessageCopy(event,
|
|
474
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
485
475
|
|
|
486
476
|
assert.equal(
|
|
487
477
|
(called("mailbox.update")[0]?.args[2] as { cursorState?: string })
|
|
@@ -500,7 +490,7 @@ describe("handleMessageCopy", () => {
|
|
|
500
490
|
};
|
|
501
491
|
|
|
502
492
|
await assert.rejects(
|
|
503
|
-
handleMessageCopy(event,
|
|
493
|
+
handleMessageCopy(event, noopLogger, 1, deps()),
|
|
504
494
|
/TRYCREATE/,
|
|
505
495
|
);
|
|
506
496
|
|
|
@@ -513,7 +503,7 @@ describe("handleMessageCopy", () => {
|
|
|
513
503
|
throw new Error("NONEXISTENT source message");
|
|
514
504
|
};
|
|
515
505
|
|
|
516
|
-
await handleMessageCopy(event,
|
|
506
|
+
await handleMessageCopy(event, noopLogger, 1, deps());
|
|
517
507
|
|
|
518
508
|
const update = called("message.update")[0];
|
|
519
509
|
assert.equal((update?.args[1] as { status?: string })?.status, "deleted");
|
|
@@ -526,7 +516,7 @@ describe("handleMessageCopy", () => {
|
|
|
526
516
|
};
|
|
527
517
|
|
|
528
518
|
await assert.rejects(
|
|
529
|
-
handleMessageCopy(event,
|
|
519
|
+
handleMessageCopy(event, noopLogger, 1, deps()),
|
|
530
520
|
/server exploded/,
|
|
531
521
|
);
|
|
532
522
|
|
|
@@ -548,7 +538,7 @@ describe("handleMessageCopy", () => {
|
|
|
548
538
|
return asked === 1 ? [] : [42];
|
|
549
539
|
};
|
|
550
540
|
|
|
551
|
-
await handleMessageCopy(event,
|
|
541
|
+
await handleMessageCopy(event, noopLogger, 3, deps());
|
|
552
542
|
|
|
553
543
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
554
544
|
"new-msg",
|
|
@@ -563,7 +553,7 @@ describe("handleMessageCopy", () => {
|
|
|
563
553
|
};
|
|
564
554
|
h.destinationHolds = [];
|
|
565
555
|
|
|
566
|
-
await handleMessageCopy(event,
|
|
556
|
+
await handleMessageCopy(event, noopLogger, 3, deps());
|
|
567
557
|
|
|
568
558
|
assert.equal(called("message.delete")[0]?.args[0], "new-msg");
|
|
569
559
|
assert.equal(called("threadMessage.deleteMany").length, 1);
|