35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import {
|
|
buildConversationAcceptList,
|
|
classifyConversationFileMimeType,
|
|
detectConversationFileKind,
|
|
isSupportedConversationFileMimeType,
|
|
} from './conversationFileTypes.js';
|
|
|
|
describe('conversationFileTypes', () => {
|
|
it('classifies conversation file kinds from mime type and filename', () => {
|
|
expect(classifyConversationFileMimeType('image/png')).toBe('image');
|
|
expect(classifyConversationFileMimeType('audio/mpeg')).toBe('audio');
|
|
expect(classifyConversationFileMimeType('application/pdf')).toBe('document');
|
|
|
|
expect(detectConversationFileKind({ filename: 'paper.pdf', mimeType: null })).toBe('document');
|
|
expect(detectConversationFileKind({ filename: 'photo.webp', mimeType: null })).toBe('image');
|
|
expect(detectConversationFileKind({ filename: 'voice.mp3', mimeType: null })).toBe('audio');
|
|
expect(detectConversationFileKind({ filename: 'unknown.bin', mimeType: null })).toBe('unknown');
|
|
});
|
|
|
|
it('keeps supported mime and accept list rules in one place', () => {
|
|
expect(isSupportedConversationFileMimeType('application/pdf')).toBe(true);
|
|
expect(isSupportedConversationFileMimeType('image/jpeg')).toBe(true);
|
|
expect(isSupportedConversationFileMimeType('audio/wav')).toBe(true);
|
|
expect(isSupportedConversationFileMimeType('application/octet-stream')).toBe(false);
|
|
|
|
expect(buildConversationAcceptList({
|
|
document: true,
|
|
image: true,
|
|
audio: false,
|
|
})).toBe('.pdf,.txt,.md,.markdown,.json,image/*');
|
|
});
|
|
});
|