make some overall QoL improvements

This commit is contained in:
Frederik Spirgi
2026-09-30 10:06:29 +02:00
parent 7a1b152f20
commit d15f7867d5
9 changed files with 239 additions and 45 deletions
+29
View File
@@ -97,3 +97,32 @@ test("discarding a chat draft aborts upload, deletes temporary files, and serial
composer.clear();
assert.deepEqual(deletes, [`/attachments/${temporaryId}`], "Sent attachments are retained");
});
test("attachments stay with their chat while uploads finish after switching", async t => {
const originalDocument = globalThis.document, originalFetch = globalThis.fetch;
t.after(() => { globalThis.document = originalDocument; globalThis.fetch = originalFetch; });
const elements = Object.fromEntries(["attachImage", "imagePicker", "uploadPreviews", "composer"].map(id => [id, new Element()]));
globalThis.document = {getElementById: id => elements[id], querySelector: () => elements.composer, createElement: () => new Element()};
let completeUpload;
const deletes = [];
globalThis.fetch = (url) => {
if (url === "/uploads/config") return Promise.resolve(Response.json({maxFiles: 5, maxSizeMb: 10}));
if (url === "/uploads") return new Promise(resolve => { completeUpload = resolve; });
deletes.push(url);
return Promise.resolve(Response.json({success: true}));
};
const composer = createAttachmentComposer({onChange() {}, onError: message => assert.fail(message)});
elements.imagePicker.files = [new File(["fixture"], "draft.png", {type: "image/png"})];
elements.imagePicker.onchange();
composer.saveDraft(1);
composer.restoreDraft(2);
assert.equal(composer.attachments.length, 0);
const metadata = {id: "12345678-1234-1234-1234-123456789abc"};
completeUpload(Response.json(metadata));
await new Promise(resolve => setTimeout(resolve, 0));
assert.deepEqual(deletes, []);
composer.saveDraft(2);
composer.restoreDraft(1);
assert.deepEqual(composer.attachments, [metadata]);
composer.discard();
});