nexstream-api / backend /tests /core /contract.test.ts
nexstream-deploy
deploy: nexstream backend (experiment)
2276d59
Raw
History Blame Contribute Delete
3.82 kB
import { describe, it, expect } from 'vitest';
import {
FinalResponseSchema,
SpotifyMetadataSchema,
VideoInfoSchema,
FormatSchema,
} from '../../../shared/schemas/media.schema.js';
describe('Media Contract Hardening', () => {
describe('FormatSchema', () => {
it('should validate a valid format', () => {
const validFormat = {
formatId: '137',
url: 'https://example.com/video.mp4',
extension: 'mp4',
isVideo: true,
height: 1080,
};
const result = FormatSchema.parse(validFormat);
expect(result.isVideo).toBe(true);
expect(result.isAudio).toBe(false); // default
expect(result.isMuxed).toBe(false); // default
});
it('should fail on invalid URL', () => {
const invalidFormat = {
formatId: '137',
url: 'not-a-url',
extension: 'mp4',
};
expect(() => FormatSchema.parse(invalidFormat)).toThrow();
});
});
describe('SpotifyMetadataSchema', () => {
it('should validate valid spotify metadata', () => {
const validSpotify = {
id: 'track123',
title: 'Song Title',
artist: 'Artist Name',
type: 'spotify',
cover: 'https://scdn.co/img.jpg',
duration: 180,
};
const result = SpotifyMetadataSchema.parse(validSpotify);
expect(result.type).toBe('spotify');
expect(result.fromBrain).toBe(false); // default
});
it('should fail if artist is missing', () => {
const invalidSpotify = {
id: 'track123',
title: 'Song Title',
type: 'spotify',
};
expect(() => SpotifyMetadataSchema.parse(invalidSpotify)).toThrow(
/Artist is required/
);
});
});
describe('VideoInfoSchema', () => {
it('should validate valid video info', () => {
const validVideo = {
id: 'vid123',
title: 'Video Title',
uploader: 'Channel Name',
webpageUrl: 'https://youtube.com/watch?v=123',
type: 'video',
thumbnail: 'https://ytimg.com/img.jpg',
};
const result = VideoInfoSchema.parse(validVideo);
expect(result.type).toBe('video');
expect(result.formats).toEqual([]); // default
});
});
describe('FinalResponseSchema', () => {
it('should validate a complete final response', () => {
const payload = {
id: '123',
title: 'Cool Song',
artist: 'Nice Artist',
uploader: 'Nice Artist',
album: 'Best Album',
cover: 'https://example.com/cover.jpg',
thumbnail: '/logo.webp', // local fallback
formats: [],
audioFormats: [],
webpageUrl: 'https://example.com/video',
isPartial: false,
isIsrcMatch: true,
};
const result = FinalResponseSchema.parse(payload);
expect(result.id).toBe('123');
expect(result.thumbnail).toBe('/logo.webp');
expect(result.isPartial).toBe(false);
});
it('should handle data URIs for images', () => {
const payload = {
id: '123',
title: 'Cool Song',
artist: 'Nice Artist',
uploader: 'Nice Artist',
cover:
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==',
thumbnail: 'https://example.com/thumb.jpg',
formats: [],
audioFormats: [],
webpageUrl: 'https://example.com/video',
};
const result = FinalResponseSchema.parse(payload);
expect(result.cover).toMatch(/^data:image\/png/);
});
it('should fail on missing required fields', () => {
const invalidPayload = {
id: '123',
// title missing
artist: 'Artist',
};
expect(() => FinalResponseSchema.parse(invalidPayload)).toThrow();
});
});
});