Files
FileHost/server/utils/upload-policy.test.ts
T
2026-10-17 16:09:31 +08:00

73 lines
2.3 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
DEFAULT_UPLOAD_MAX_FILE_SIZE_MB,
normalizeAllowedMimeTypes,
normalizeAllowedVideoExtensions,
normalizeForbiddenFileExtensions,
parseLoginRateMax,
parsePreserveOriginalUpload,
parseUploadMaxFileSizeMb,
parseUploadRateIpMax,
serializeAllowedMimeTypes,
serializeAllowedVideoExtensions,
serializeForbiddenFileExtensions,
serializePreserveOriginalUpload
} from './upload-policy'
describe('upload-policy parsers', () => {
it('parses upload max file size mb', () => {
expect(parseUploadMaxFileSizeMb('10')).toBe(10)
expect(parseUploadMaxFileSizeMb('0')).toBeNull()
expect(parseUploadMaxFileSizeMb('101')).toBeNull()
})
it('normalizes allowed mime types', () => {
expect(normalizeAllowedMimeTypes('image/png, image/jpeg, image/png')).toEqual([
'image/png',
'image/jpeg'
])
expect(normalizeAllowedMimeTypes('image/bmp')).toEqual([])
})
it('serializes allowed mime types in canonical order', () => {
expect(serializeAllowedMimeTypes(['image/webp', 'image/jpeg'])).toBe('image/jpeg,image/webp')
})
it('normalizes and serializes allowed video extensions', () => {
expect(normalizeAllowedVideoExtensions('.MOV, mp4,mkv,mp4,ts')).toEqual([
'mov',
'mp4',
'mkv'
])
expect(serializeAllowedVideoExtensions(['mkv', 'mp4'])).toBe('mp4,mkv')
})
it('normalizes and serializes forbidden file extensions', () => {
expect(normalizeForbiddenFileExtensions('.HTML, exe,php,exe,bad/ext')).toEqual([
'html',
'exe',
'php'
])
expect(serializeForbiddenFileExtensions(['php', 'svg', 'html']))
.toBe('html,svg,php')
})
it('parses rate limit values', () => {
expect(parseUploadRateIpMax('60')).toBe(60)
expect(parseLoginRateMax('10')).toBe(10)
expect(parseUploadRateIpMax('0')).toBeNull()
})
it('defaults max file size mb constant matches legacy 10MB', () => {
expect(DEFAULT_UPLOAD_MAX_FILE_SIZE_MB).toBe(10)
})
it('parses preserve original upload flag', () => {
expect(parsePreserveOriginalUpload('true')).toBe(true)
expect(parsePreserveOriginalUpload('0')).toBe(false)
expect(parsePreserveOriginalUpload('')).toBeNull()
expect(serializePreserveOriginalUpload(true)).toBe('true')
})
})