Files
ComfyUI_frontend/tests-ui/tests/utils/formatUtil.test.ts
Jin Yi 0b020cfad3 refactor: Apply PR #6112 review feedback for Media Assets feature
- Move composables to platform/assets directory structure
- Extract interface-based abstraction (IAssetsProvider) for cloud/internal implementations
- Move constants to module scope to avoid re-initialization
- Extract helper functions (truncateFilename, assetMappers) for reusability
- Rename getMediaTypeFromFilename to return singular form (image/video/audio)
- Add deprecated plural version for backward compatibility
- Add comprehensive test coverage for new utility functions

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-22 22:56:58 +09:00

148 lines
5.7 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
getMediaTypeFromFilename,
getMediaTypeFromFilenamePlural,
truncateFilename
} from '@/utils/formatUtil'
describe('formatUtil', () => {
describe('truncateFilename', () => {
it('should not truncate short filenames', () => {
expect(truncateFilename('test.png')).toBe('test.png')
expect(truncateFilename('short.jpg', 10)).toBe('short.jpg')
})
it('should truncate long filenames while preserving extension', () => {
const longName = 'this-is-a-very-long-filename-that-needs-truncation.png'
const truncated = truncateFilename(longName, 20)
expect(truncated).toContain('...')
expect(truncated.endsWith('.png')).toBe(true)
expect(truncated.length).toBeLessThanOrEqual(25) // 20 + '...' + extension
})
it('should handle filenames without extensions', () => {
const longName = 'this-is-a-very-long-filename-without-extension'
const truncated = truncateFilename(longName, 20)
expect(truncated).toContain('...')
expect(truncated.length).toBeLessThanOrEqual(23) // 20 + '...'
})
it('should handle empty strings', () => {
expect(truncateFilename('')).toBe('')
expect(truncateFilename('', 10)).toBe('')
})
it('should preserve the start and end of the filename', () => {
const longName = 'ComfyUI_00001_timestamp_2024_01_01.png'
const truncated = truncateFilename(longName, 20)
expect(truncated).toMatch(/^ComfyUI.*01\.png$/)
expect(truncated).toContain('...')
})
it('should handle files with multiple dots', () => {
const filename = 'my.file.with.multiple.dots.txt'
const truncated = truncateFilename(filename, 15)
expect(truncated.endsWith('.txt')).toBe(true)
expect(truncated).toContain('...')
})
})
describe('getMediaTypeFromFilename', () => {
describe('image files', () => {
it('should identify image extensions correctly', () => {
expect(getMediaTypeFromFilename('test.png')).toBe('image')
expect(getMediaTypeFromFilename('photo.jpg')).toBe('image')
expect(getMediaTypeFromFilename('image.jpeg')).toBe('image')
expect(getMediaTypeFromFilename('animation.gif')).toBe('image')
expect(getMediaTypeFromFilename('web.webp')).toBe('image')
expect(getMediaTypeFromFilename('bitmap.bmp')).toBe('image')
})
it('should handle uppercase extensions', () => {
expect(getMediaTypeFromFilename('test.PNG')).toBe('image')
expect(getMediaTypeFromFilename('photo.JPG')).toBe('image')
})
})
describe('video files', () => {
it('should identify video extensions correctly', () => {
expect(getMediaTypeFromFilename('video.mp4')).toBe('video')
expect(getMediaTypeFromFilename('clip.webm')).toBe('video')
expect(getMediaTypeFromFilename('movie.mov')).toBe('video')
expect(getMediaTypeFromFilename('film.avi')).toBe('video')
})
})
describe('audio files', () => {
it('should identify audio extensions correctly', () => {
expect(getMediaTypeFromFilename('song.mp3')).toBe('audio')
expect(getMediaTypeFromFilename('sound.wav')).toBe('audio')
expect(getMediaTypeFromFilename('music.ogg')).toBe('audio')
expect(getMediaTypeFromFilename('audio.flac')).toBe('audio')
})
})
describe('3D files', () => {
it('should identify 3D file extensions correctly', () => {
expect(getMediaTypeFromFilename('model.obj')).toBe('3D')
expect(getMediaTypeFromFilename('scene.fbx')).toBe('3D')
expect(getMediaTypeFromFilename('asset.gltf')).toBe('3D')
expect(getMediaTypeFromFilename('binary.glb')).toBe('3D')
})
})
describe('edge cases', () => {
it('should handle empty strings', () => {
expect(getMediaTypeFromFilename('')).toBe('image')
})
it('should handle files without extensions', () => {
expect(getMediaTypeFromFilename('README')).toBe('image')
})
it('should handle unknown extensions', () => {
expect(getMediaTypeFromFilename('document.pdf')).toBe('image')
expect(getMediaTypeFromFilename('data.json')).toBe('image')
})
it('should handle files with multiple dots', () => {
expect(getMediaTypeFromFilename('my.file.name.png')).toBe('image')
expect(getMediaTypeFromFilename('archive.tar.gz')).toBe('image')
})
it('should handle paths with directories', () => {
expect(getMediaTypeFromFilename('/path/to/image.png')).toBe('image')
expect(getMediaTypeFromFilename('C:\\Windows\\video.mp4')).toBe('video')
})
})
})
describe('getMediaTypeFromFilenamePlural', () => {
it('should return plural form for images', () => {
expect(getMediaTypeFromFilenamePlural('test.png')).toBe('images')
expect(getMediaTypeFromFilenamePlural('photo.jpg')).toBe('images')
})
it('should return plural form for videos', () => {
expect(getMediaTypeFromFilenamePlural('video.mp4')).toBe('videos')
expect(getMediaTypeFromFilenamePlural('clip.webm')).toBe('videos')
})
it('should return plural form for audios', () => {
expect(getMediaTypeFromFilenamePlural('song.mp3')).toBe('audios')
expect(getMediaTypeFromFilenamePlural('sound.wav')).toBe('audios')
})
it('should return 3D as is (no plural)', () => {
expect(getMediaTypeFromFilenamePlural('model.obj')).toBe('3D')
expect(getMediaTypeFromFilenamePlural('scene.fbx')).toBe('3D')
})
it('should default to images for unknown types', () => {
expect(getMediaTypeFromFilenamePlural('document.pdf')).toBe('images')
expect(getMediaTypeFromFilenamePlural('')).toBe('images')
})
})
})