Files
plex-playlist/frontend/src/validation.test.ts
Cliff Hill eb8802eea2
Some checks failed
Tests / Build and Push CICD Image (push) Successful in 46m49s
Tests / YAML Syntax Check (push) Successful in 7m40s
Tests / TOML Syntax Check (push) Successful in 53s
Tests / Mixed Line Ending Check (push) Successful in 54s
Tests / TOML Formatting Check (push) Successful in 52s
Tests / Ruff Linting (push) Successful in 55s
Tests / Ruff Format Check (push) Successful in 59s
Tests / Trailing Whitespace Check (push) Successful in 9m41s
Tests / Pyright Type Check (push) Successful in 1m9s
Tests / No Docstring Types Check (push) Successful in 57s
Tests / Darglint Docstring Check (push) Successful in 1m16s
Tests / ESLint Check (push) Successful in 1m6s
Tests / Prettier Format Check (push) Successful in 1m14s
Tests / TypeScript Type Check (push) Successful in 1m12s
Tests / Backend Tests (push) Successful in 1m3s
Tests / TSDoc Lint Check (push) Successful in 1m37s
Tests / Frontend Tests (push) Successful in 1m23s
Tests / Backend Doctests (push) Successful in 1m7s
Tests / End of File Check (push) Successful in 13m53s
Tests / Integration Tests (push) Successful in 6m23s
Tests / End-to-End Tests (push) Has been cancelled
Fixing frontend coverage.
Signed-off-by: Cliff Hill <xlorep@darkhelm.org>
2025-10-30 14:15:13 -04:00

145 lines
3.5 KiB
TypeScript

import { describe, it, expect } from 'vitest';
import { PlaylistSchema, UserSchema, type Playlist, type User } from './validation';
describe('PlaylistSchema', () => {
it('should validate a valid playlist', () => {
const validPlaylist = {
id: '123e4567-e89b-12d3-a456-426614174000',
name: 'My Playlist',
description: 'A great playlist',
tracks: ['track1', 'track2'],
};
const result = PlaylistSchema.parse(validPlaylist);
expect(result).toEqual(validPlaylist);
});
it('should validate playlist with minimal required fields', () => {
const minimalPlaylist = {
id: '123e4567-e89b-12d3-a456-426614174000',
name: 'My Playlist',
};
const result = PlaylistSchema.parse(minimalPlaylist);
expect(result).toEqual({
id: '123e4567-e89b-12d3-a456-426614174000',
name: 'My Playlist',
description: undefined,
tracks: [],
});
});
it('should reject playlist with invalid UUID', () => {
const invalidPlaylist = {
id: 'invalid-uuid',
name: 'My Playlist',
};
expect(() => PlaylistSchema.parse(invalidPlaylist)).toThrow();
});
it('should reject playlist with empty name', () => {
const invalidPlaylist = {
id: '123e4567-e89b-12d3-a456-426614174000',
name: '',
};
expect(() => PlaylistSchema.parse(invalidPlaylist)).toThrow();
});
});
describe('UserSchema', () => {
it('should validate a valid user', () => {
const validUser = {
id: 123,
username: 'testuser',
email: 'test@example.com',
preferences: {
theme: 'dark' as const,
notifications: false,
},
};
const result = UserSchema.parse(validUser);
expect(result).toEqual(validUser);
});
it('should validate user with default preferences', () => {
const minimalUser = {
id: 123,
username: 'testuser',
email: 'test@example.com',
};
const result = UserSchema.parse(minimalUser);
expect(result).toEqual({
id: 123,
username: 'testuser',
email: 'test@example.com',
preferences: {
theme: 'light',
notifications: true,
},
});
});
it('should reject user with invalid email', () => {
const invalidUser = {
id: 123,
username: 'testuser',
email: 'invalid-email',
};
expect(() => UserSchema.parse(invalidUser)).toThrow();
});
it('should reject user with empty username', () => {
const invalidUser = {
id: 123,
username: '',
email: 'test@example.com',
};
expect(() => UserSchema.parse(invalidUser)).toThrow();
});
it('should reject user with invalid theme', () => {
const invalidUser = {
id: 123,
username: 'testuser',
email: 'test@example.com',
preferences: {
theme: 'invalid' as any,
notifications: true,
},
};
expect(() => UserSchema.parse(invalidUser)).toThrow();
});
});
describe('Type exports', () => {
it('should export correct TypeScript types', () => {
// Type-only test - compilation is the validation
const playlist: Playlist = {
id: '123e4567-e89b-12d3-a456-426614174000',
name: 'Test',
description: 'Test description',
tracks: ['track1'],
};
const user: User = {
id: 1,
username: 'test',
email: 'test@example.com',
preferences: {
theme: 'light',
notifications: true,
},
};
expect(playlist.id).toBeDefined();
expect(user.username).toBeDefined();
});
});