@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
JavaScript
;
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);
});
});
});