UNPKG

@clipwhisperer/common

Version:

ClipWhisperer Common - Shared library providing core utilities, database schemas, authentication, bucket management, and common functionality across all ClipWhisperer microservices

262 lines (261 loc) 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const content_1 = require("../../src/models/content"); const globals_1 = require("@jest/globals"); (0, globals_1.describe)("Content Models Tests", () => { (0, globals_1.describe)("getVideosInputSchema", () => { (0, globals_1.it)("should validate correct videos input data", () => { const validInput = { limit: 10, offset: 0, sortBy: "title", sortOrder: "asc", }; const result = content_1.getVideosInputSchema.safeParse(validInput); (0, globals_1.expect)(result.success).toBe(true); if (result.success) { (0, globals_1.expect)(result.data).toEqual(validInput); } }); (0, globals_1.it)("should validate input with only some fields", () => { const validInput = { limit: 20, }; const result = content_1.getVideosInputSchema.safeParse(validInput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should validate empty input", () => { const validInput = {}; const result = content_1.getVideosInputSchema.safeParse(validInput); (0, globals_1.expect)(result.success).toBe(true); }); }); (0, globals_1.describe)("getVideosOutputSchema", () => { (0, globals_1.it)("should validate correct videos output data", () => { const validOutput = { success: true, message: "Successfully fetched 2 videos", videos: [ { id: "video-1", title: "Test Video 1", duration: 300, description: "Test description 1", thumbnail: "https://example.com/thumb1.jpg", size: 1024000, likes: 100, views: 1000, published_at: "2024-01-01T00:00:00Z", videoTags: [ { id: "tag1", name: "comedy" }, { id: "tag2", name: "music" }, ], }, { id: "video-2", title: "Test Video 2", duration: 600, description: "Test description 2", thumbnail: "https://example.com/thumb2.jpg", size: 2048000, likes: 200, views: 2000, published_at: "2024-01-02T00:00:00Z", videoTags: [], }, ], pagination: { total: 2, limit: 10, offset: 0, hasMore: false, }, }; const result = content_1.getVideosOutputSchema.safeParse(validOutput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should validate error output data", () => { const validOutput = { success: false, message: "Error fetching videos", videos: [], pagination: { total: 0, limit: 10, offset: 0, hasMore: false, }, }; const result = content_1.getVideosOutputSchema.safeParse(validOutput); (0, globals_1.expect)(result.success).toBe(true); }); }); (0, globals_1.describe)("postVideoInputSchema", () => { (0, globals_1.it)("should validate correct video input data", () => { const validInput = { title: "Test Video", description: "A test video description", youtube_id: "abc123", thumbnail: "https://example.com/thumb.jpg", duration: 300, size: 1024000, likes: 100, views: 1000, published_at: "2024-01-01T00:00:00Z", }; const result = content_1.postVideoInputSchema.safeParse(validInput); (0, globals_1.expect)(result.success).toBe(true); if (result.success) { (0, globals_1.expect)(result.data).toEqual(validInput); } }); (0, globals_1.it)("should reject invalid video input data", () => { const invalidInput = { title: "", // Empty string should be invalid description: "A test video description", youtube_id: "abc123", thumbnail: "https://example.com/thumb.jpg", duration: -1, // Negative duration size: "invalid", // String instead of number likes: 100, views: 1000, published_at: "2024-01-01T00:00:00Z", }; const result = content_1.postVideoInputSchema.safeParse(invalidInput); (0, globals_1.expect)(result.success).toBe(false); }); (0, globals_1.it)("should reject missing required fields", () => { const incompleteInput = { title: "Test Video", // Missing other required fields }; const result = content_1.postVideoInputSchema.safeParse(incompleteInput); (0, globals_1.expect)(result.success).toBe(false); }); }); (0, globals_1.describe)("postVideoOutputSchema", () => { (0, globals_1.it)("should validate correct output data", () => { const validOutput = { success: true, message: "Video created successfully", }; const result = content_1.postVideoOutputSchema.safeParse(validOutput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should reject invalid output data", () => { const invalidOutput = { success: "true", // String instead of boolean message: 123, // Number instead of string }; const result = content_1.postVideoOutputSchema.safeParse(invalidOutput); (0, globals_1.expect)(result.success).toBe(false); }); }); (0, globals_1.describe)("getVideoByTagsInputSchema", () => { (0, globals_1.it)("should validate correct tags input", () => { const validInput = { tags: ["comedy", "music", "tutorial"], }; const result = content_1.getVideoByTagsInputSchema.safeParse(validInput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should validate empty tags array", () => { const validInput = { tags: [], }; const result = content_1.getVideoByTagsInputSchema.safeParse(validInput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should reject invalid tags input", () => { const invalidInput = { tags: "not-an-array", }; const result = content_1.getVideoByTagsInputSchema.safeParse(invalidInput); (0, globals_1.expect)(result.success).toBe(false); }); }); (0, globals_1.describe)("getVideoByTagsOutputSchema", () => { (0, globals_1.it)("should validate correct tags output", () => { const validOutput = { success: true, message: "Videos retrieved successfully", videos: [ { id: "video1", title: "Test Video 1" }, { id: "video2", title: "Test Video 2" }, ], }; const result = content_1.getVideoByTagsOutputSchema.safeParse(validOutput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should validate empty videos array", () => { const validOutput = { success: false, message: "No videos found", videos: [], }; const result = content_1.getVideoByTagsOutputSchema.safeParse(validOutput); (0, globals_1.expect)(result.success).toBe(true); }); }); (0, globals_1.describe)("getVideoByIdInputSchema", () => { (0, globals_1.it)("should validate correct video ID input", () => { const validInput = { id: "video123", }; const result = content_1.getVideoByIdInputSchema.safeParse(validInput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should reject empty ID", () => { const invalidInput = { id: "", }; const result = content_1.getVideoByIdInputSchema.safeParse(invalidInput); (0, globals_1.expect)(result.success).toBe(false); }); }); (0, globals_1.describe)("getVideoByIdOutputSchema", () => { (0, globals_1.it)("should validate complete video output", () => { const validOutput = { success: true, message: "Video retrieved successfully", video: { id: "video123", title: "Test Video", duration: 300, description: "A test video", thumbnail: "https://example.com/thumb.jpg", size: 1024000, likes: 100, views: 1000, published_at: "2024-01-01T00:00:00Z", videoTags: [ { id: "tag1", name: "comedy" }, { id: "tag2", name: "music" }, ], }, }; const result = content_1.getVideoByIdOutputSchema.safeParse(validOutput); (0, globals_1.expect)(result.success).toBe(true); }); (0, globals_1.it)("should validate video with empty tags", () => { const validOutput = { success: true, message: "Video retrieved successfully", video: { id: "video123", title: "Test Video", duration: 300, description: "A test video", thumbnail: "https://example.com/thumb.jpg", size: 1024000, likes: 100, views: 1000, published_at: "2024-01-01T00:00:00Z", videoTags: [], }, }; const result = content_1.getVideoByIdOutputSchema.safeParse(validOutput); (0, globals_1.expect)(result.success).toBe(true); }); }); });