import assert from 'node:assert/strict' import test from 'node:test' import { MAX_ATTACHMENT_BYTES, MAX_COMPOSER_TEXT_LENGTH, MAX_EDITABLE_TEXT_BYTES, prepareComposerSubmission, } from '../src/attachments.ts' test('files up to one hundred megabytes are accepted', () => { assert.equal(MAX_ATTACHMENT_BYTES, 100 * 1024 * 1024) }) test('regular composer text remains inline', () => { const result = prepareComposerSubmission('short request', [], new Date('2026-09-18T12:34:56Z')) assert.equal(result.content, 'short request') assert.deepEqual(result.files, []) assert.equal(result.converted, false) }) test('oversized composer text becomes a named text attachment', async () => { const content = 'x'.repeat(MAX_COMPOSER_TEXT_LENGTH + 1) const result = prepareComposerSubmission(content, [], new Date('2026-09-18T12:34:56Z')) assert.equal(result.converted, true) assert.equal(result.files.length, 1) assert.equal(result.files[0].name, 'message-long-2026-09-18-123456.txt') assert.equal(result.files[0].type, 'text/plain') assert.equal(await result.files[0].text(), content) assert.match(result.content, /message-long-2026-09-18-123456\.txt/) }) test('conversion refuses to exceed the four attachment limit', () => { const files = Array.from({length:4}, (_, index) => new File(['x'], `file-${index}.txt`, {type:'text/plain'})) assert.throws( () => prepareComposerSubmission('x'.repeat(MAX_COMPOSER_TEXT_LENGTH + 1), files, new Date()), /quatre fichiers/i, ) }) test('conversion refuses text too large for the integrated editor', () => { assert.throws( () => prepareComposerSubmission('x'.repeat(MAX_EDITABLE_TEXT_BYTES + 1), [], new Date()), /10 Mo maximum/i, ) })