47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
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,
|
|
)
|
|
})
|