@remit/imap-worker 0.0.70 → 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 +26 -33
- 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
package/package.json
CHANGED
|
@@ -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 { AppendSentMessageEvent } from "../events.js";
|
|
5
5
|
import {
|
|
6
6
|
APPEND_SENT_MAX_ATTEMPTS,
|
|
@@ -8,16 +8,6 @@ import {
|
|
|
8
8
|
handleAppendSentMessage,
|
|
9
9
|
} from "./append-sent-message.js";
|
|
10
10
|
|
|
11
|
-
const noopLog = {
|
|
12
|
-
info: () => {},
|
|
13
|
-
warn: () => {},
|
|
14
|
-
error: () => {},
|
|
15
|
-
debug: () => {},
|
|
16
|
-
fatal: () => {},
|
|
17
|
-
trace: () => {},
|
|
18
|
-
child: () => noopLog,
|
|
19
|
-
} as unknown as Logger;
|
|
20
|
-
|
|
21
11
|
interface Call {
|
|
22
12
|
method: string;
|
|
23
13
|
args: unknown[];
|
|
@@ -175,7 +165,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
175
165
|
});
|
|
176
166
|
|
|
177
167
|
it("appends a seen RFC822 copy to the Sent folder and drops the outbox row", async () => {
|
|
178
|
-
await handleAppendSentMessage(event,
|
|
168
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
179
169
|
|
|
180
170
|
const append = called("connection.append")[0];
|
|
181
171
|
assert.equal(append?.args[0], "INBOX/Sent");
|
|
@@ -188,7 +178,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
188
178
|
});
|
|
189
179
|
|
|
190
180
|
it("takes the draft's stored attachments with the row (#679)", async () => {
|
|
191
|
-
await handleAppendSentMessage(event,
|
|
181
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
192
182
|
|
|
193
183
|
// The row is the only reference to those objects. Sweeping has to happen
|
|
194
184
|
// here too, not only on a discard, or a sent message leaves its files
|
|
@@ -201,7 +191,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
201
191
|
});
|
|
202
192
|
|
|
203
193
|
it("builds the message from the outbox row's own headers", async () => {
|
|
204
|
-
await handleAppendSentMessage(event,
|
|
194
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
205
195
|
|
|
206
196
|
const raw = String(called("connection.append")[0]?.args[1] as Buffer);
|
|
207
197
|
assert.match(raw, /^From: Alice <alice@example\.com>$/m);
|
|
@@ -216,7 +206,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
216
206
|
it("uses a bare address when the outbox row carries no display name", async () => {
|
|
217
207
|
h.outbox = { ...h.outbox, fromName: undefined };
|
|
218
208
|
|
|
219
|
-
await handleAppendSentMessage(event,
|
|
209
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
220
210
|
|
|
221
211
|
const raw = String(called("connection.append")[0]?.args[1] as Buffer);
|
|
222
212
|
assert.match(raw, /^From: alice@example\.com$/m);
|
|
@@ -225,7 +215,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
225
215
|
it("settles the row as unfiled when the account has no Sent folder at all", async () => {
|
|
226
216
|
h.sentMailbox = null;
|
|
227
217
|
|
|
228
|
-
await handleAppendSentMessage(event,
|
|
218
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
229
219
|
|
|
230
220
|
assert.equal(called("connection.append").length, 0);
|
|
231
221
|
assert.equal(called("outboxMessage.delete").length, 0);
|
|
@@ -243,7 +233,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
243
233
|
it("skips the append while the outbox row is not yet sent", async () => {
|
|
244
234
|
h.outbox = { ...h.outbox, status: "pending" };
|
|
245
235
|
|
|
246
|
-
await handleAppendSentMessage(event,
|
|
236
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
247
237
|
|
|
248
238
|
assert.equal(called("connection.append").length, 0);
|
|
249
239
|
assert.equal(called("outboxMessage.delete").length, 0);
|
|
@@ -252,7 +242,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
252
242
|
it("returns early without touching the outbox when the account is soft-deleted", async () => {
|
|
253
243
|
h.account = { ...h.account, deletedAt: Date.now() };
|
|
254
244
|
|
|
255
|
-
await handleAppendSentMessage(event,
|
|
245
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
256
246
|
|
|
257
247
|
assert.equal(called("connection.append").length, 0);
|
|
258
248
|
assert.equal(called("outboxMessage.delete").length, 0);
|
|
@@ -264,7 +254,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
264
254
|
};
|
|
265
255
|
|
|
266
256
|
await assert.rejects(
|
|
267
|
-
handleAppendSentMessage(event,
|
|
257
|
+
handleAppendSentMessage(event, noopLogger, 1, deps()),
|
|
268
258
|
/server exploded/,
|
|
269
259
|
);
|
|
270
260
|
|
|
@@ -282,7 +272,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
282
272
|
|
|
283
273
|
await handleAppendSentMessage(
|
|
284
274
|
event,
|
|
285
|
-
|
|
275
|
+
noopLogger,
|
|
286
276
|
APPEND_SENT_MAX_ATTEMPTS,
|
|
287
277
|
deps(),
|
|
288
278
|
);
|
|
@@ -301,7 +291,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
301
291
|
it("settles the row as unfiled when a terminal auth failure acks the record", async () => {
|
|
302
292
|
h.ackWithoutWork = true;
|
|
303
293
|
|
|
304
|
-
await handleAppendSentMessage(event,
|
|
294
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
305
295
|
|
|
306
296
|
const patch = called("outboxMessage.update")[0]?.args[2] as {
|
|
307
297
|
status: string;
|
|
@@ -313,7 +303,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
313
303
|
|
|
314
304
|
it("leaves the row alone when the APPEND landed but the delete did not", async () => {
|
|
315
305
|
await assert.rejects(
|
|
316
|
-
handleAppendSentMessage(event,
|
|
306
|
+
handleAppendSentMessage(event, noopLogger, 1, depsWithFailingDelete()),
|
|
317
307
|
/storage down/,
|
|
318
308
|
);
|
|
319
309
|
|
|
@@ -325,7 +315,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
325
315
|
it("stops redelivering a landed APPEND at the budget instead of filing another copy", async () => {
|
|
326
316
|
await handleAppendSentMessage(
|
|
327
317
|
event,
|
|
328
|
-
|
|
318
|
+
noopLogger,
|
|
329
319
|
APPEND_SENT_MAX_ATTEMPTS,
|
|
330
320
|
depsWithFailingDelete(),
|
|
331
321
|
);
|
|
@@ -335,7 +325,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
335
325
|
});
|
|
336
326
|
|
|
337
327
|
it("records the uid the APPEND produced before it deletes the row", async () => {
|
|
338
|
-
await handleAppendSentMessage(event,
|
|
328
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
339
329
|
|
|
340
330
|
// Order is the whole of it: a uid written after the delete is a uid a
|
|
341
331
|
// redelivery never sees, and the redelivery is what files the second copy.
|
|
@@ -352,7 +342,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
352
342
|
// nothing, and "filed" still has to be told apart from "not filed".
|
|
353
343
|
h.append = async () => ({ uid: 0, uidValidity: 0 });
|
|
354
344
|
|
|
355
|
-
await handleAppendSentMessage(event,
|
|
345
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
356
346
|
|
|
357
347
|
assert.deepEqual(patches(), [{ appendedUid: -1 }]);
|
|
358
348
|
assert.equal(called("outboxMessage.delete").length, 1);
|
|
@@ -361,7 +351,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
361
351
|
it("files nothing a second time when a redelivery finds a recorded uid (#858)", async () => {
|
|
362
352
|
h.outbox = { ...h.outbox, appendedUid: 55 };
|
|
363
353
|
|
|
364
|
-
await handleAppendSentMessage(event,
|
|
354
|
+
await handleAppendSentMessage(event, noopLogger, 1, deps());
|
|
365
355
|
|
|
366
356
|
// The copy is already in the user's Sent folder. All this redelivery owes
|
|
367
357
|
// is the delete the last attempt could not make.
|
|
@@ -382,7 +372,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
382
372
|
h.outbox = { ...h.outbox, appendedUid: 55 };
|
|
383
373
|
|
|
384
374
|
await assert.rejects(
|
|
385
|
-
handleAppendSentMessage(event,
|
|
375
|
+
handleAppendSentMessage(event, noopLogger, 1, depsWithFailingDelete()),
|
|
386
376
|
/storage down/,
|
|
387
377
|
);
|
|
388
378
|
|
|
@@ -392,7 +382,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
392
382
|
|
|
393
383
|
it("keeps the row when the uid cannot be recorded", async () => {
|
|
394
384
|
await assert.rejects(
|
|
395
|
-
handleAppendSentMessage(event,
|
|
385
|
+
handleAppendSentMessage(event, noopLogger, 1, depsWithFailingUpdate()),
|
|
396
386
|
/storage down/,
|
|
397
387
|
);
|
|
398
388
|
|
|
@@ -425,7 +415,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
425
415
|
},
|
|
426
416
|
};
|
|
427
417
|
|
|
428
|
-
await handleAppendSentMessage(event,
|
|
418
|
+
await handleAppendSentMessage(event, noopLogger, 1, failing);
|
|
429
419
|
|
|
430
420
|
assert.equal(called("connection.append").length, 0);
|
|
431
421
|
assert.deepEqual(patches(), []);
|
|
@@ -436,7 +426,7 @@ describe("handleAppendSentMessage", () => {
|
|
|
436
426
|
|
|
437
427
|
await handleAppendSentMessage(
|
|
438
428
|
event,
|
|
439
|
-
|
|
429
|
+
noopLogger,
|
|
440
430
|
APPEND_SENT_MAX_ATTEMPTS,
|
|
441
431
|
depsWithFailingDelete(),
|
|
442
432
|
);
|
|
@@ -6,21 +6,11 @@ import {
|
|
|
6
6
|
S3Client,
|
|
7
7
|
} from "@aws-sdk/client-s3";
|
|
8
8
|
import { SendMessageCommand, SQSClient } from "@aws-sdk/client-sqs";
|
|
9
|
-
import
|
|
9
|
+
import { noopLogger } from "@remit/logger-lambda/noop-logger";
|
|
10
10
|
import { mockClient } from "aws-sdk-client-mock";
|
|
11
11
|
import type { DeleteAccountObjectsEvent } from "../events.js";
|
|
12
12
|
import { handleDeleteAccountObjects } from "./delete-account-objects.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
|
const s3Mock = mockClient(S3Client);
|
|
25
15
|
const sqsMock = mockClient(SQSClient);
|
|
26
16
|
|
|
@@ -45,7 +35,7 @@ describe("handleDeleteAccountObjects", () => {
|
|
|
45
35
|
});
|
|
46
36
|
s3Mock.on(DeleteObjectsCommand).resolves({});
|
|
47
37
|
|
|
48
|
-
await handleDeleteAccountObjects(event,
|
|
38
|
+
await handleDeleteAccountObjects(event, noopLogger);
|
|
49
39
|
|
|
50
40
|
const listCall = s3Mock.commandCalls(ListObjectsV2Command)[0];
|
|
51
41
|
assert.equal(listCall.args[0].input.Prefix, "accounts/cfg-1/");
|
|
@@ -72,7 +62,7 @@ describe("handleDeleteAccountObjects", () => {
|
|
|
72
62
|
});
|
|
73
63
|
s3Mock.on(DeleteObjectsCommand).resolves({});
|
|
74
64
|
|
|
75
|
-
await handleDeleteAccountObjects(event,
|
|
65
|
+
await handleDeleteAccountObjects(event, noopLogger);
|
|
76
66
|
|
|
77
67
|
const listCalls = s3Mock.commandCalls(ListObjectsV2Command);
|
|
78
68
|
assert.equal(listCalls.length, 2);
|
|
@@ -83,7 +73,7 @@ describe("handleDeleteAccountObjects", () => {
|
|
|
83
73
|
it("skips the delete call when a page holds no keys", async () => {
|
|
84
74
|
s3Mock.on(ListObjectsV2Command).resolves({ IsTruncated: false });
|
|
85
75
|
|
|
86
|
-
await handleDeleteAccountObjects(event,
|
|
76
|
+
await handleDeleteAccountObjects(event, noopLogger);
|
|
87
77
|
|
|
88
78
|
assert.equal(s3Mock.commandCalls(DeleteObjectsCommand).length, 0);
|
|
89
79
|
});
|
|
@@ -94,7 +84,7 @@ describe("handleDeleteAccountObjects", () => {
|
|
|
94
84
|
|
|
95
85
|
await handleDeleteAccountObjects(
|
|
96
86
|
{ ...event, continuationToken: "tok-mid" },
|
|
97
|
-
|
|
87
|
+
noopLogger,
|
|
98
88
|
() => 5_000,
|
|
99
89
|
);
|
|
100
90
|
|
|
@@ -119,7 +109,7 @@ describe("handleDeleteAccountObjects", () => {
|
|
|
119
109
|
});
|
|
120
110
|
s3Mock.on(DeleteObjectsCommand).resolves({});
|
|
121
111
|
|
|
122
|
-
await handleDeleteAccountObjects(event,
|
|
112
|
+
await handleDeleteAccountObjects(event, noopLogger, () => 120_000);
|
|
123
113
|
|
|
124
114
|
assert.equal(s3Mock.commandCalls(ListObjectsV2Command).length, 1);
|
|
125
115
|
assert.equal(sqsMock.commandCalls(SendMessageCommand).length, 0);
|
|
@@ -1,20 +1,10 @@
|
|
|
1
1
|
import assert from "node:assert/strict";
|
|
2
2
|
import { beforeEach, describe, it } from "node:test";
|
|
3
3
|
import type { RoleResolution } from "@remit/data-ports/folder-role";
|
|
4
|
-
import
|
|
4
|
+
import { noopLogger } from "@remit/logger-lambda/noop-logger";
|
|
5
5
|
import type { EmptyTrashEvent } from "../events.js";
|
|
6
6
|
import { type EmptyTrashDeps, handleEmptyTrash } from "./empty-trash.js";
|
|
7
7
|
|
|
8
|
-
const noopLog = {
|
|
9
|
-
info: () => {},
|
|
10
|
-
warn: () => {},
|
|
11
|
-
error: () => {},
|
|
12
|
-
debug: () => {},
|
|
13
|
-
fatal: () => {},
|
|
14
|
-
trace: () => {},
|
|
15
|
-
child: () => noopLog,
|
|
16
|
-
} as unknown as Logger;
|
|
17
|
-
|
|
18
8
|
interface Call {
|
|
19
9
|
method: string;
|
|
20
10
|
args: unknown[];
|
|
@@ -224,7 +214,7 @@ describe("handleEmptyTrash", () => {
|
|
|
224
214
|
});
|
|
225
215
|
|
|
226
216
|
it("expunges every server uid and both local rows for each trashed message", async () => {
|
|
227
|
-
await handleEmptyTrash(event,
|
|
217
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
228
218
|
|
|
229
219
|
assert.deepEqual(called("connection.deleteMessages")[0]?.args, [[10, 11]]);
|
|
230
220
|
assert.deepEqual(
|
|
@@ -245,7 +235,7 @@ describe("handleEmptyTrash", () => {
|
|
|
245
235
|
{ messageId: "msg-late", uid: 12, status: "active" },
|
|
246
236
|
];
|
|
247
237
|
|
|
248
|
-
await handleEmptyTrash(event,
|
|
238
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
249
239
|
|
|
250
240
|
assert.deepEqual(
|
|
251
241
|
called("message.delete").map((c) => c.args[0]),
|
|
@@ -259,7 +249,7 @@ describe("handleEmptyTrash", () => {
|
|
|
259
249
|
// exists anywhere, with nothing left to clear the mark.
|
|
260
250
|
h.connection.search = async () => [];
|
|
261
251
|
|
|
262
|
-
await handleEmptyTrash(event,
|
|
252
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
263
253
|
|
|
264
254
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
265
255
|
assert.equal(called("message.delete").length, 0);
|
|
@@ -274,7 +264,7 @@ describe("handleEmptyTrash", () => {
|
|
|
274
264
|
h.localMessages = [deleting("msg-2", 11)];
|
|
275
265
|
h.connection.search = async () => [];
|
|
276
266
|
|
|
277
|
-
await handleEmptyTrash(event,
|
|
267
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
278
268
|
|
|
279
269
|
assert.equal(called("message.delete").length, 0);
|
|
280
270
|
assert.deepEqual(revertedMessageIds(), ["msg-2"]);
|
|
@@ -288,7 +278,7 @@ describe("handleEmptyTrash", () => {
|
|
|
288
278
|
h.messagesWithoutListingRow = ["msg-expunging"];
|
|
289
279
|
h.connection.search = async () => [];
|
|
290
280
|
|
|
291
|
-
await handleEmptyTrash(event,
|
|
281
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
292
282
|
|
|
293
283
|
assert.deepEqual(revertedMessageIds(), ["msg-1"]);
|
|
294
284
|
});
|
|
@@ -296,7 +286,7 @@ describe("handleEmptyTrash", () => {
|
|
|
296
286
|
it("deletes the message even when it has no thread row", async () => {
|
|
297
287
|
h.threadMessage = false;
|
|
298
288
|
|
|
299
|
-
await handleEmptyTrash(event,
|
|
289
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
300
290
|
|
|
301
291
|
assert.equal(called("message.delete").length, 2);
|
|
302
292
|
assert.equal(called("threadMessage.delete").length, 0);
|
|
@@ -309,7 +299,7 @@ describe("handleEmptyTrash", () => {
|
|
|
309
299
|
deletedAt: Date.now(),
|
|
310
300
|
};
|
|
311
301
|
|
|
312
|
-
await handleEmptyTrash(event,
|
|
302
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
313
303
|
|
|
314
304
|
assert.equal(h.getConnectionCount, 0);
|
|
315
305
|
});
|
|
@@ -317,7 +307,10 @@ describe("handleEmptyTrash", () => {
|
|
|
317
307
|
it("throws when the account no longer exists", async () => {
|
|
318
308
|
h.account = null;
|
|
319
309
|
|
|
320
|
-
await assert.rejects(
|
|
310
|
+
await assert.rejects(
|
|
311
|
+
handleEmptyTrash(event, noopLogger, deps()),
|
|
312
|
+
/not found/,
|
|
313
|
+
);
|
|
321
314
|
});
|
|
322
315
|
|
|
323
316
|
it("acks terminally without connecting when the Trash mailbox was deleted", async () => {
|
|
@@ -325,7 +318,7 @@ describe("handleEmptyTrash", () => {
|
|
|
325
318
|
name: "NotFoundError",
|
|
326
319
|
});
|
|
327
320
|
|
|
328
|
-
await handleEmptyTrash(event,
|
|
321
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
329
322
|
|
|
330
323
|
assert.equal(h.getConnectionCount, 0);
|
|
331
324
|
assert.equal(called("message.delete").length, 0);
|
|
@@ -339,7 +332,7 @@ describe("handleEmptyTrash", () => {
|
|
|
339
332
|
trashMailboxPath: "Trash",
|
|
340
333
|
} as unknown as EmptyTrashEvent;
|
|
341
334
|
|
|
342
|
-
await handleEmptyTrash(unversioned,
|
|
335
|
+
await handleEmptyTrash(unversioned, noopLogger, deps());
|
|
343
336
|
|
|
344
337
|
assert.equal(h.getConnectionCount, 0, "no connection is ever opened");
|
|
345
338
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
@@ -353,7 +346,7 @@ describe("handleEmptyTrash", () => {
|
|
|
353
346
|
mailbox: { mailboxId: "other-mbx", fullPath: "INBOX/Bak" },
|
|
354
347
|
};
|
|
355
348
|
|
|
356
|
-
await handleEmptyTrash(event,
|
|
349
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
357
350
|
|
|
358
351
|
assert.equal(h.getConnectionCount, 0);
|
|
359
352
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
@@ -366,7 +359,7 @@ describe("handleEmptyTrash", () => {
|
|
|
366
359
|
mailbox: { mailboxId: "trash-mbx", fullPath: "Trash" },
|
|
367
360
|
};
|
|
368
361
|
|
|
369
|
-
await handleEmptyTrash(event,
|
|
362
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
370
363
|
|
|
371
364
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
372
365
|
assert.deepEqual(revertedMessageIds(), ["msg-1", "msg-2"]);
|
|
@@ -378,7 +371,7 @@ describe("handleEmptyTrash", () => {
|
|
|
378
371
|
h.connection.openBox = async () => ({ uidvalidity: 77 });
|
|
379
372
|
h.mailbox = { mailboxId: "trash-mbx", uidValidity: 77 };
|
|
380
373
|
|
|
381
|
-
await handleEmptyTrash(event,
|
|
374
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
382
375
|
|
|
383
376
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
384
377
|
assert.deepEqual(revertedMessageIds(), ["msg-1", "msg-2"]);
|
|
@@ -394,7 +387,7 @@ describe("handleEmptyTrash", () => {
|
|
|
394
387
|
h.connection.openBox = async () => ({ uidvalidity: 77 });
|
|
395
388
|
h.mailbox = { mailboxId: "trash-mbx", uidValidity: 77 };
|
|
396
389
|
|
|
397
|
-
await handleEmptyTrash(event,
|
|
390
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
398
391
|
|
|
399
392
|
assert.deepEqual(revertedMessageIds(), ["msg-1"]);
|
|
400
393
|
assert.deepEqual(undeletedThreadMessageIds(), ["tm-msg-1"]);
|
|
@@ -405,7 +398,7 @@ describe("handleEmptyTrash", () => {
|
|
|
405
398
|
// marked `deleting` hides healthy mail until the user notices.
|
|
406
399
|
h.connection.openBox = async () => ({ uidvalidity: 999 });
|
|
407
400
|
|
|
408
|
-
await handleEmptyTrash(event,
|
|
401
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
409
402
|
|
|
410
403
|
assert.equal(
|
|
411
404
|
(called("mailbox.update")[0]?.args[2] as { cursorState?: string })
|
|
@@ -424,7 +417,7 @@ describe("handleEmptyTrash", () => {
|
|
|
424
417
|
cursorState: "rebuilding",
|
|
425
418
|
};
|
|
426
419
|
|
|
427
|
-
await handleEmptyTrash(event,
|
|
420
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
428
421
|
|
|
429
422
|
assert.equal(h.getConnectionCount, 0);
|
|
430
423
|
assert.equal(called("message.delete").length, 0);
|
|
@@ -437,7 +430,7 @@ describe("handleEmptyTrash", () => {
|
|
|
437
430
|
};
|
|
438
431
|
|
|
439
432
|
await assert.rejects(
|
|
440
|
-
handleEmptyTrash(event,
|
|
433
|
+
handleEmptyTrash(event, noopLogger, deps()),
|
|
441
434
|
/server exploded/,
|
|
442
435
|
);
|
|
443
436
|
|
|
@@ -463,7 +456,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
|
|
|
463
456
|
movingIntoTrash("msg-moving", 10),
|
|
464
457
|
];
|
|
465
458
|
|
|
466
|
-
await handleEmptyTrash(event,
|
|
459
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
467
460
|
|
|
468
461
|
assert.deepEqual(
|
|
469
462
|
called("message.delete").map((c) => c.args[0]),
|
|
@@ -480,7 +473,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
|
|
|
480
473
|
// uid is somebody else's.
|
|
481
474
|
h.localMessages = [retryingIntoTrash("msg-retrying", 11)];
|
|
482
475
|
|
|
483
|
-
await handleEmptyTrash(event,
|
|
476
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
484
477
|
|
|
485
478
|
assert.equal(called("message.delete").length, 0);
|
|
486
479
|
assert.equal(called("threadMessage.delete").length, 0);
|
|
@@ -495,7 +488,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
|
|
|
495
488
|
// `deleting` is hidden from every listing for good.
|
|
496
489
|
h.localMessages = [deleting("msg-1", 10), markedMidMove("msg-marked", 11)];
|
|
497
490
|
|
|
498
|
-
await handleEmptyTrash(event,
|
|
491
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
499
492
|
|
|
500
493
|
assert.deepEqual(
|
|
501
494
|
called("message.delete").map((c) => c.args[0]),
|
|
@@ -522,7 +515,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
|
|
|
522
515
|
},
|
|
523
516
|
];
|
|
524
517
|
|
|
525
|
-
await handleEmptyTrash(event,
|
|
518
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
526
519
|
|
|
527
520
|
assert.deepEqual(
|
|
528
521
|
called("message.delete").map((c) => c.args[0]),
|
|
@@ -547,7 +540,7 @@ describe("handleEmptyTrash and an unsettled placement", () => {
|
|
|
547
540
|
},
|
|
548
541
|
];
|
|
549
542
|
|
|
550
|
-
await handleEmptyTrash(event,
|
|
543
|
+
await handleEmptyTrash(event, noopLogger, deps());
|
|
551
544
|
|
|
552
545
|
assert.deepEqual(
|
|
553
546
|
called("message.delete").map((c) => c.args[0]),
|
|
@@ -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);
|
|
@@ -3,6 +3,7 @@ import { beforeEach, describe, it, mock } from "node:test";
|
|
|
3
3
|
import type { ThreadMessageItem } from "@remit/data-ports";
|
|
4
4
|
import type { Logger } from "@remit/logger-lambda";
|
|
5
5
|
import { renderMetrics, resetMetrics } from "@remit/logger-lambda";
|
|
6
|
+
import { noopLogger } from "@remit/logger-lambda/noop-logger";
|
|
6
7
|
import type { MessageDeleteEvent } from "../events.js";
|
|
7
8
|
import {
|
|
8
9
|
deleteAllThreadMessagesForMessage,
|
|
@@ -256,16 +257,6 @@ describe("deleteAllThreadMessagesForMessage (#212)", () => {
|
|
|
256
257
|
});
|
|
257
258
|
});
|
|
258
259
|
|
|
259
|
-
const noopLog = {
|
|
260
|
-
info: () => {},
|
|
261
|
-
warn: () => {},
|
|
262
|
-
error: () => {},
|
|
263
|
-
debug: () => {},
|
|
264
|
-
fatal: () => {},
|
|
265
|
-
trace: () => {},
|
|
266
|
-
child: () => noopLog,
|
|
267
|
-
} as unknown as Logger;
|
|
268
|
-
|
|
269
260
|
interface Call {
|
|
270
261
|
method: string;
|
|
271
262
|
args: unknown[];
|
|
@@ -543,7 +534,7 @@ describe("handleMessageDelete", () => {
|
|
|
543
534
|
});
|
|
544
535
|
|
|
545
536
|
it("moves to trash, rewrites the uid, and flips the thread row to deleted", async () => {
|
|
546
|
-
await handleMessageDelete(moveEvent,
|
|
537
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
547
538
|
|
|
548
539
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
549
540
|
"msg-1",
|
|
@@ -569,7 +560,7 @@ describe("handleMessageDelete", () => {
|
|
|
569
560
|
sourceNoLongerHoldsTheUid();
|
|
570
561
|
h.destinationSearchUids = [77];
|
|
571
562
|
|
|
572
|
-
await handleMessageDelete(moveEvent,
|
|
563
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
573
564
|
|
|
574
565
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
575
566
|
"msg-1",
|
|
@@ -598,7 +589,7 @@ describe("handleMessageDelete", () => {
|
|
|
598
589
|
sourceNoLongerHoldsTheUid();
|
|
599
590
|
h.destinationSearchUids = [12, 77];
|
|
600
591
|
|
|
601
|
-
await handleMessageDelete(moveEvent,
|
|
592
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
602
593
|
|
|
603
594
|
assert.deepEqual(called("message.updateUid")[0]?.args, [
|
|
604
595
|
"msg-1",
|
|
@@ -623,7 +614,7 @@ describe("handleMessageDelete", () => {
|
|
|
623
614
|
return { uidvalidity: 1 };
|
|
624
615
|
}) as Connection["openBox"];
|
|
625
616
|
|
|
626
|
-
await handleMessageDelete(moveEvent,
|
|
617
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
627
618
|
|
|
628
619
|
assert.deepEqual(
|
|
629
620
|
opened,
|
|
@@ -650,7 +641,7 @@ describe("handleMessageDelete", () => {
|
|
|
650
641
|
h.destinationSearchUids = [];
|
|
651
642
|
|
|
652
643
|
await assert.rejects(
|
|
653
|
-
handleMessageDelete(moveEvent,
|
|
644
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
654
645
|
/unconfirmed/,
|
|
655
646
|
);
|
|
656
647
|
|
|
@@ -683,7 +674,7 @@ describe("handleMessageDelete", () => {
|
|
|
683
674
|
sourceNoLongerHoldsTheUid();
|
|
684
675
|
h.destinationSearchUids = [];
|
|
685
676
|
|
|
686
|
-
await handleMessageDelete(moveEvent,
|
|
677
|
+
await handleMessageDelete(moveEvent, noopLogger, 3, deps());
|
|
687
678
|
|
|
688
679
|
assert.equal(
|
|
689
680
|
called("threadMessage.deleteMany").length,
|
|
@@ -710,7 +701,7 @@ describe("handleMessageDelete", () => {
|
|
|
710
701
|
sourceNoLongerHoldsTheUid();
|
|
711
702
|
h.messageRow = {};
|
|
712
703
|
|
|
713
|
-
await handleMessageDelete(moveEvent,
|
|
704
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
714
705
|
|
|
715
706
|
assert.equal(
|
|
716
707
|
called("connection.search").filter((c) =>
|
|
@@ -739,7 +730,7 @@ describe("handleMessageDelete", () => {
|
|
|
739
730
|
sourceNoLongerHoldsTheUid();
|
|
740
731
|
h.messageRow = undefined;
|
|
741
732
|
|
|
742
|
-
await handleMessageDelete(moveEvent,
|
|
733
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
743
734
|
|
|
744
735
|
assert.equal(called("message.update").length, 0);
|
|
745
736
|
assert.equal(called("message.delete").length, 0);
|
|
@@ -757,7 +748,7 @@ describe("handleMessageDelete", () => {
|
|
|
757
748
|
h.destinationSearchUids = [100];
|
|
758
749
|
|
|
759
750
|
await assert.rejects(
|
|
760
|
-
handleMessageDelete(moveEvent,
|
|
751
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
761
752
|
/unconfirmed/,
|
|
762
753
|
);
|
|
763
754
|
|
|
@@ -797,7 +788,7 @@ describe("handleMessageDelete", () => {
|
|
|
797
788
|
},
|
|
798
789
|
];
|
|
799
790
|
|
|
800
|
-
await handleMessageDelete(moveEvent,
|
|
791
|
+
await handleMessageDelete(moveEvent, noopLogger, 3, deps());
|
|
801
792
|
|
|
802
793
|
assert.equal(called("message.delete").length, 0);
|
|
803
794
|
assert.equal(called("threadMessage.deleteMany").length, 0);
|
|
@@ -845,7 +836,7 @@ describe("handleMessageDelete", () => {
|
|
|
845
836
|
h.connection.moveMessages = async () => ({ uidMap: new Map() });
|
|
846
837
|
h.destinationSearchUids = [100];
|
|
847
838
|
|
|
848
|
-
await handleMessageDelete(moveEvent,
|
|
839
|
+
await handleMessageDelete(moveEvent, noopLogger, 3, deps());
|
|
849
840
|
|
|
850
841
|
assert.deepEqual(
|
|
851
842
|
called("emitEvent").map((c) => c.args[0]),
|
|
@@ -874,7 +865,7 @@ describe("handleMessageDelete", () => {
|
|
|
874
865
|
moveThrows();
|
|
875
866
|
|
|
876
867
|
await assert.rejects(
|
|
877
|
-
handleMessageDelete(moveEvent,
|
|
868
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
878
869
|
/UID MOVE failed/,
|
|
879
870
|
);
|
|
880
871
|
|
|
@@ -891,7 +882,7 @@ describe("handleMessageDelete", () => {
|
|
|
891
882
|
moveThrows();
|
|
892
883
|
sourceNoLongerHoldsTheUid();
|
|
893
884
|
|
|
894
|
-
await handleMessageDelete(moveEvent,
|
|
885
|
+
await handleMessageDelete(moveEvent, noopLogger, 3, deps());
|
|
895
886
|
|
|
896
887
|
assert.equal(
|
|
897
888
|
called("threadMessage.deleteMany").length,
|
|
@@ -905,7 +896,7 @@ describe("handleMessageDelete", () => {
|
|
|
905
896
|
it("settles a still-present message at the ceiling back onto its source", async () => {
|
|
906
897
|
moveThrows();
|
|
907
898
|
|
|
908
|
-
await handleMessageDelete(moveEvent,
|
|
899
|
+
await handleMessageDelete(moveEvent, noopLogger, 3, deps());
|
|
909
900
|
|
|
910
901
|
assert.deepEqual(
|
|
911
902
|
called("message.updateForMove").at(-1)?.args,
|
|
@@ -927,7 +918,7 @@ describe("handleMessageDelete", () => {
|
|
|
927
918
|
}) as Connection["openBox"];
|
|
928
919
|
|
|
929
920
|
await assert.rejects(
|
|
930
|
-
handleMessageDelete(moveEvent,
|
|
921
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
931
922
|
/unconfirmed/,
|
|
932
923
|
);
|
|
933
924
|
|
|
@@ -958,7 +949,7 @@ describe("handleMessageDelete", () => {
|
|
|
958
949
|
operation,
|
|
959
950
|
} as unknown as MessageDeleteEvent;
|
|
960
951
|
|
|
961
|
-
await handleMessageDelete(malformed,
|
|
952
|
+
await handleMessageDelete(malformed, noopLogger, 1, deps());
|
|
962
953
|
|
|
963
954
|
assert.equal(
|
|
964
955
|
called("connection.deleteMessages").length,
|
|
@@ -991,7 +982,7 @@ describe("handleMessageDelete", () => {
|
|
|
991
982
|
destinationMailboxPath: undefined,
|
|
992
983
|
} as MessageDeleteEvent;
|
|
993
984
|
|
|
994
|
-
await handleMessageDelete(destinationless,
|
|
985
|
+
await handleMessageDelete(destinationless, noopLogger, 1, deps());
|
|
995
986
|
|
|
996
987
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
997
988
|
assert.equal(called("message.delete").length, 0);
|
|
@@ -1002,7 +993,7 @@ describe("handleMessageDelete", () => {
|
|
|
1002
993
|
});
|
|
1003
994
|
|
|
1004
995
|
it("expunges on the server and removes every thread row before the message row", async () => {
|
|
1005
|
-
await handleMessageDelete(permanentEvent,
|
|
996
|
+
await handleMessageDelete(permanentEvent, noopLogger, 1, deps());
|
|
1006
997
|
|
|
1007
998
|
assert.deepEqual(called("connection.deleteMessages")[0]?.args, [[10]]);
|
|
1008
999
|
assert.equal(called("threadMessage.delete").length, 2);
|
|
@@ -1021,7 +1012,7 @@ describe("handleMessageDelete", () => {
|
|
|
1021
1012
|
};
|
|
1022
1013
|
sourceNoLongerHoldsTheUid();
|
|
1023
1014
|
|
|
1024
|
-
await handleMessageDelete(permanentEvent,
|
|
1015
|
+
await handleMessageDelete(permanentEvent, noopLogger, 1, deps());
|
|
1025
1016
|
|
|
1026
1017
|
assert.equal(called("message.delete").length, 1);
|
|
1027
1018
|
assert.equal(called("threadMessage.delete").length, 2);
|
|
@@ -1042,7 +1033,7 @@ describe("handleMessageDelete", () => {
|
|
|
1042
1033
|
sourceNoLongerHoldsTheUid();
|
|
1043
1034
|
|
|
1044
1035
|
await assert.rejects(
|
|
1045
|
-
handleMessageDelete(moveEvent,
|
|
1036
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
1046
1037
|
/not found/,
|
|
1047
1038
|
);
|
|
1048
1039
|
|
|
@@ -1070,7 +1061,7 @@ describe("handleMessageDelete", () => {
|
|
|
1070
1061
|
};
|
|
1071
1062
|
|
|
1072
1063
|
await assert.rejects(
|
|
1073
|
-
handleMessageDelete(moveEvent,
|
|
1064
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
1074
1065
|
/NONEXISTENT/,
|
|
1075
1066
|
);
|
|
1076
1067
|
|
|
@@ -1092,7 +1083,7 @@ describe("handleMessageDelete", () => {
|
|
|
1092
1083
|
h.connection.fetchMessages = async () => [];
|
|
1093
1084
|
|
|
1094
1085
|
await assert.rejects(
|
|
1095
|
-
handleMessageDelete(permanentEvent,
|
|
1086
|
+
handleMessageDelete(permanentEvent, noopLogger, 1, deps()),
|
|
1096
1087
|
/NONEXISTENT/,
|
|
1097
1088
|
);
|
|
1098
1089
|
|
|
@@ -1117,7 +1108,7 @@ describe("handleMessageDelete", () => {
|
|
|
1117
1108
|
};
|
|
1118
1109
|
|
|
1119
1110
|
await assert.rejects(
|
|
1120
|
-
handleMessageDelete(permanentEvent,
|
|
1111
|
+
handleMessageDelete(permanentEvent, noopLogger, 1, deps()),
|
|
1121
1112
|
/NONEXISTENT mailbox does not exist/,
|
|
1122
1113
|
);
|
|
1123
1114
|
|
|
@@ -1138,7 +1129,7 @@ describe("handleMessageDelete", () => {
|
|
|
1138
1129
|
throw new Error("TRYCREATE: no such mailbox");
|
|
1139
1130
|
};
|
|
1140
1131
|
|
|
1141
|
-
await handleMessageDelete(moveEvent,
|
|
1132
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1142
1133
|
|
|
1143
1134
|
assert.equal(called("connection.createMailbox").length, 0);
|
|
1144
1135
|
assert.deepEqual(
|
|
@@ -1158,7 +1149,7 @@ describe("handleMessageDelete", () => {
|
|
|
1158
1149
|
schemaVersion: undefined,
|
|
1159
1150
|
} as unknown as MessageDeleteEvent;
|
|
1160
1151
|
|
|
1161
|
-
await handleMessageDelete(unversioned,
|
|
1152
|
+
await handleMessageDelete(unversioned, noopLogger, 1, deps());
|
|
1162
1153
|
|
|
1163
1154
|
assert.equal(h.getConnectionCount, 0);
|
|
1164
1155
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
@@ -1179,7 +1170,7 @@ describe("handleMessageDelete", () => {
|
|
|
1179
1170
|
schemaVersion: undefined,
|
|
1180
1171
|
} as unknown as MessageDeleteEvent;
|
|
1181
1172
|
|
|
1182
|
-
await handleMessageDelete(unversioned,
|
|
1173
|
+
await handleMessageDelete(unversioned, noopLogger, 1, deps());
|
|
1183
1174
|
|
|
1184
1175
|
assert.deepEqual(
|
|
1185
1176
|
called("threadMessage.update").map((c) => c.args[1]),
|
|
@@ -1198,7 +1189,7 @@ describe("handleMessageDelete", () => {
|
|
|
1198
1189
|
schemaVersion: undefined,
|
|
1199
1190
|
} as unknown as MessageDeleteEvent;
|
|
1200
1191
|
|
|
1201
|
-
await handleMessageDelete(unversioned,
|
|
1192
|
+
await handleMessageDelete(unversioned, noopLogger, 1, deps());
|
|
1202
1193
|
|
|
1203
1194
|
assert.equal(called("connection.deleteMessages").length, 0);
|
|
1204
1195
|
assert.deepEqual(called("message.delete")[0]?.args, ["msg-1"]);
|
|
@@ -1215,7 +1206,7 @@ describe("handleMessageDelete", () => {
|
|
|
1215
1206
|
};
|
|
1216
1207
|
|
|
1217
1208
|
await assert.rejects(
|
|
1218
|
-
handleMessageDelete(moveEvent,
|
|
1209
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
1219
1210
|
/server exploded/,
|
|
1220
1211
|
);
|
|
1221
1212
|
|
|
@@ -1234,7 +1225,7 @@ describe("handleMessageDelete", () => {
|
|
|
1234
1225
|
it("hands the optimistic trash move back when openBox trips a UIDVALIDITY mismatch", async () => {
|
|
1235
1226
|
h.connection.openBox = async () => ({ uidvalidity: 999 });
|
|
1236
1227
|
|
|
1237
|
-
await handleMessageDelete(moveEvent,
|
|
1228
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1238
1229
|
|
|
1239
1230
|
assert.equal(
|
|
1240
1231
|
(called("mailbox.update")[0]?.args[2] as { cursorState?: string })
|
|
@@ -1269,7 +1260,7 @@ describe("handleMessageDelete", () => {
|
|
|
1269
1260
|
|
|
1270
1261
|
await handleMessageDelete(
|
|
1271
1262
|
moveEvent,
|
|
1272
|
-
|
|
1263
|
+
noopLogger,
|
|
1273
1264
|
MESSAGE_DELETE_MAX_ATTEMPTS,
|
|
1274
1265
|
deps(),
|
|
1275
1266
|
);
|
|
@@ -1403,7 +1394,7 @@ describe("handleMessageDelete", () => {
|
|
|
1403
1394
|
cursorState: "rebuilding",
|
|
1404
1395
|
};
|
|
1405
1396
|
|
|
1406
|
-
await handleMessageDelete(moveEvent,
|
|
1397
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1407
1398
|
|
|
1408
1399
|
assert.equal(called("threadMessage.findAllByMessageId").length, 1);
|
|
1409
1400
|
});
|
|
@@ -1487,7 +1478,7 @@ describe("handleMessageDelete", () => {
|
|
|
1487
1478
|
h.sourceSearchUids = [4];
|
|
1488
1479
|
h.destinationSearchUids = [12];
|
|
1489
1480
|
|
|
1490
|
-
await handleMessageDelete(moveEvent,
|
|
1481
|
+
await handleMessageDelete(moveEvent, noopLogger, 2, deps());
|
|
1491
1482
|
|
|
1492
1483
|
assert.equal(called("message.updateUid").length, 0);
|
|
1493
1484
|
assert.deepEqual(
|
|
@@ -1507,7 +1498,7 @@ describe("handleMessageDelete", () => {
|
|
|
1507
1498
|
cursorState: "rebuilding",
|
|
1508
1499
|
};
|
|
1509
1500
|
|
|
1510
|
-
await handleMessageDelete(moveEvent,
|
|
1501
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1511
1502
|
|
|
1512
1503
|
assert.deepEqual(
|
|
1513
1504
|
called("emitEvent").map((c) => c.args[0]),
|
|
@@ -1525,7 +1516,7 @@ describe("handleMessageDelete", () => {
|
|
|
1525
1516
|
cursorState: "rebuilding",
|
|
1526
1517
|
};
|
|
1527
1518
|
|
|
1528
|
-
await handleMessageDelete(moveEvent,
|
|
1519
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1529
1520
|
|
|
1530
1521
|
assert.equal(h.getConnectionCount, 0);
|
|
1531
1522
|
assert.deepEqual(
|
|
@@ -1549,7 +1540,7 @@ describe("handleMessageDelete", () => {
|
|
|
1549
1540
|
};
|
|
1550
1541
|
h.allThreadMessages = [];
|
|
1551
1542
|
|
|
1552
|
-
await handleMessageDelete(permanentEvent,
|
|
1543
|
+
await handleMessageDelete(permanentEvent, noopLogger, 1, deps());
|
|
1553
1544
|
|
|
1554
1545
|
assert.equal(h.getConnectionCount, 0);
|
|
1555
1546
|
assert.deepEqual(called("message.delete")[0]?.args, ["msg-1"]);
|
|
@@ -1568,7 +1559,7 @@ describe("handleMessageDelete", () => {
|
|
|
1568
1559
|
};
|
|
1569
1560
|
h.allThreadMessages = [];
|
|
1570
1561
|
|
|
1571
|
-
await handleMessageDelete(moveEvent,
|
|
1562
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1572
1563
|
|
|
1573
1564
|
assert.deepEqual(called("message.delete")[0]?.args, ["msg-1"]);
|
|
1574
1565
|
assert.equal(
|
|
@@ -1583,7 +1574,7 @@ describe("handleMessageDelete", () => {
|
|
|
1583
1574
|
name: "NotFoundError",
|
|
1584
1575
|
});
|
|
1585
1576
|
|
|
1586
|
-
await handleMessageDelete(moveEvent,
|
|
1577
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1587
1578
|
|
|
1588
1579
|
assert.equal(h.getConnectionCount, 0);
|
|
1589
1580
|
assert.equal(called("message.updateUid").length, 0);
|
|
@@ -1597,7 +1588,7 @@ describe("handleMessageDelete", () => {
|
|
|
1597
1588
|
deletedAt: Date.now(),
|
|
1598
1589
|
};
|
|
1599
1590
|
|
|
1600
|
-
await handleMessageDelete(moveEvent,
|
|
1591
|
+
await handleMessageDelete(moveEvent, noopLogger, 1, deps());
|
|
1601
1592
|
|
|
1602
1593
|
assert.equal(h.getConnectionCount, 0);
|
|
1603
1594
|
});
|
|
@@ -1606,7 +1597,7 @@ describe("handleMessageDelete", () => {
|
|
|
1606
1597
|
h.account = null;
|
|
1607
1598
|
|
|
1608
1599
|
await assert.rejects(
|
|
1609
|
-
handleMessageDelete(moveEvent,
|
|
1600
|
+
handleMessageDelete(moveEvent, noopLogger, 1, deps()),
|
|
1610
1601
|
/not found/,
|
|
1611
1602
|
);
|
|
1612
1603
|
});
|