import assert from 'node:assert/strict' import test from 'node:test' import { fileNameFromUrl, parseContentDispositionFileName, sanitizeFileName } from '../src/fileName' test('fileNameFromUrl handles encoded names, query strings, and fallbacks', () => { assert.equal(fileNameFromUrl('https://example.test/files/%E6%8A%A5%E5%91%8A.pdf?x=1'), '报告.pdf') assert.equal(fileNameFromUrl('https://example.test/'), 'download') assert.equal(fileNameFromUrl('not a url/file.txt#preview'), 'file.txt') }) test('parseContentDispositionFileName prefers RFC 5987 and sanitizes names', () => { assert.equal( parseContentDispositionFileName("attachment; filename*=UTF-8''%E6%8A%A5%E5%91%8A.pdf"), '报告.pdf', ) assert.equal(parseContentDispositionFileName('attachment; filename="a:b.pdf"'), 'a_b.pdf') assert.equal(parseContentDispositionFileName('inline'), null) assert.equal(sanitizeFileName(' a / b.txt '), 'a _ b.txt') })