34 lines
1.3 KiB
TypeScript
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')
|
|
})
|
|
})
|