Spaces:
Running
Running
| /** | |
| * Unit tests for Validators - SafeTensors support | |
| * Validates: Requirements 36.1, 36.3, 36.5 | |
| */ | |
| import { describe, it, expect, beforeEach } from 'vitest'; | |
| // βββ Re-implement the pure validation logic for testability ββ | |
| function isValidSafeTensorsFile(file) { | |
| if (!file) { | |
| return { valid: false, error: 'No file provided.' }; | |
| } | |
| const name = file.name || ''; | |
| if (!name.toLowerCase().endsWith('.safetensors')) { | |
| return { | |
| valid: false, | |
| error: `Invalid file type "${name}". Only .safetensors files are accepted.`, | |
| }; | |
| } | |
| if (file.size === 0) { | |
| return { valid: false, error: 'The file is empty.' }; | |
| } | |
| return { valid: true }; | |
| } | |
| function isValidModelPath(path) { | |
| if (!path || typeof path !== 'string' || path.trim() === '') { | |
| return { valid: false, error: 'Model path must be a non-empty string.' }; | |
| } | |
| const lower = path.toLowerCase(); | |
| if (!lower.endsWith('.onnx') && !lower.endsWith('.safetensors')) { | |
| return { valid: false, error: 'Model path must point to an .onnx or .safetensors file.' }; | |
| } | |
| return { valid: true }; | |
| } | |
| // βββ Helper ββ | |
| function fakeFile(name, size) { | |
| return { name, size }; | |
| } | |
| // βββ Tests ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| describe('isValidSafeTensorsFile', () => { | |
| it('should accept a valid .safetensors file (Req 36.1)', () => { | |
| const result = isValidSafeTensorsFile(fakeFile('model.safetensors', 1024)); | |
| expect(result.valid).toBe(true); | |
| }); | |
| it('should reject null file', () => { | |
| const result = isValidSafeTensorsFile(null); | |
| expect(result.valid).toBe(false); | |
| expect(result.error).toContain('No file provided'); | |
| }); | |
| it('should reject non-.safetensors extension (Req 36.3)', () => { | |
| const result = isValidSafeTensorsFile(fakeFile('model.onnx', 1024)); | |
| expect(result.valid).toBe(false); | |
| expect(result.error).toContain('Invalid file type'); | |
| }); | |
| it('should reject empty file', () => { | |
| const result = isValidSafeTensorsFile(fakeFile('model.safetensors', 0)); | |
| expect(result.valid).toBe(false); | |
| expect(result.error).toContain('empty'); | |
| }); | |
| it('should accept large files without size limit', () => { | |
| const hugeSize = 10 * 1024 * 1024 * 1024; // 10 GB | |
| const result = isValidSafeTensorsFile(fakeFile('model.safetensors', hugeSize)); | |
| expect(result.valid).toBe(true); | |
| }); | |
| it('should be case-insensitive for extension', () => { | |
| const result = isValidSafeTensorsFile(fakeFile('Model.SAFETENSORS', 512)); | |
| expect(result.valid).toBe(true); | |
| }); | |
| }); | |
| describe('isValidModelPath', () => { | |
| it('should accept .onnx paths', () => { | |
| expect(isValidModelPath('models/model.onnx').valid).toBe(true); | |
| }); | |
| it('should accept .safetensors paths', () => { | |
| expect(isValidModelPath('models/model.safetensors').valid).toBe(true); | |
| }); | |
| it('should reject unsupported extensions', () => { | |
| const result = isValidModelPath('models/model.pt'); | |
| expect(result.valid).toBe(false); | |
| expect(result.error).toContain('.onnx or .safetensors'); | |
| }); | |
| it('should reject empty/null paths', () => { | |
| expect(isValidModelPath('').valid).toBe(false); | |
| expect(isValidModelPath(null).valid).toBe(false); | |
| }); | |
| it('should be case-insensitive', () => { | |
| expect(isValidModelPath('model.ONNX').valid).toBe(true); | |
| expect(isValidModelPath('model.SafeTensors').valid).toBe(true); | |
| }); | |
| }); | |