gongxiangp2/lib/__tests__/material-preview-url.test.ts
2026-08-02 01:04:11 +08:00

34 lines
1.3 KiB
TypeScript

import {
normalizeMaterialPreviewUrl,
pickFirstMaterialPreviewUrl,
} from '@/lib/material-preview-url'
describe('material-preview-url', () => {
test('URL 字段只保留非空字符串', () => {
expect(normalizeMaterialPreviewUrl('/uploads/preview.webp')).toBe('/uploads/preview.webp')
expect(normalizeMaterialPreviewUrl(' https://cdn.example.com/cover.jpg '))
.toBe('https://cdn.example.com/cover.jpg')
expect(normalizeMaterialPreviewUrl(true)).toBeNull()
expect(normalizeMaterialPreviewUrl(false)).toBeNull()
expect(normalizeMaterialPreviewUrl(null)).toBeNull()
expect(normalizeMaterialPreviewUrl(1)).toBeNull()
expect(normalizeMaterialPreviewUrl({ url: '/not-a-string.jpg' })).toBeNull()
expect(normalizeMaterialPreviewUrl(' ')).toBeNull()
})
test('合法相对地址和带签名的绝对地址保持兼容', () => {
const signedUrl = 'https://cdn.example.com/preview.webp?token=a%2Bb&expires=999'
expect(normalizeMaterialPreviewUrl('/uploads/preview.webp')).toBe('/uploads/preview.webp')
expect(normalizeMaterialPreviewUrl(signedUrl)).toBe(signedUrl)
})
test('异常布尔值或空值不会挡住后续合法预览图', () => {
expect(pickFirstMaterialPreviewUrl(
true,
null,
'',
' /uploads/from-display-images.webp ',
)).toBe('/uploads/from-display-images.webp')
})
})