"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const task_validator_1 = require("../../src/api/validators/task.validator"); describe('Task Validators', () => { describe('CreateTaskSchema', () => { it('should validate a valid task creation request', () => { const validTask = { title: 'Test Task', description: 'Test Description', priority: 'medium', task_type: 'feature', project: '123e4567-e89b-12d3-a456-426614174000' }; const result = task_validator_1.CreateTaskSchema.safeParse(validTask); expect(result.success).toBe(true); if (result.success) { expect(result.data.title).toBe('Test Task'); expect(result.data.priority).toBe('medium'); } }); it('should reject invalid task creation request', () => { const invalidTask = { // Missing required title description: 'Test Description', priority: 'invalid-priority', // Invalid enum value project: 'not-a-uuid' // Invalid UUID }; const result = task_validator_1.CreateTaskSchema.safeParse(invalidTask); expect(result.success).toBe(false); if (!result.success) { expect(result.error.errors).toHaveLength(3); } }); it('should apply default values', () => { const taskWithDefaults = { title: 'Test Task', project: '123e4567-e89b-12d3-a456-426614174000' }; const result = task_validator_1.CreateTaskSchema.safeParse(taskWithDefaults); expect(result.success).toBe(true); if (result.success) { expect(result.data.priority).toBe('medium'); expect(result.data.progress_percentage).toBe(0); expect(result.data.ai_generated).toBe(false); expect(result.data.auto_status_updates).toBe(false); } }); }); describe('UpdateTaskSchema', () => { it('should validate partial update', () => { const partialUpdate = { title: 'Updated Title', priority: 'high' }; const result = task_validator_1.UpdateTaskSchema.safeParse(partialUpdate); expect(result.success).toBe(true); if (result.success) { expect(result.data.title).toBe('Updated Title'); expect(result.data.priority).toBe('high'); } }); it('should accept empty update', () => { const emptyUpdate = {}; const result = task_validator_1.UpdateTaskSchema.safeParse(emptyUpdate); expect(result.success).toBe(true); }); }); describe('TaskQuerySchema', () => { it('should validate query parameters', () => { const validQuery = { page: '2', limit: '50', sort: 'created_at,-priority', search: 'test query' }; const result = task_validator_1.TaskQuerySchema.safeParse(validQuery); expect(result.success).toBe(true); if (result.success) { expect(result.data.page).toBe(2); expect(result.data.limit).toBe(50); expect(result.data.sort).toBe('created_at,-priority'); } }); it('should apply default pagination values', () => { const emptyQuery = {}; const result = task_validator_1.TaskQuerySchema.safeParse(emptyQuery); expect(result.success).toBe(true); if (result.success) { expect(result.data.page).toBe(1); expect(result.data.limit).toBe(20); } }); it('should reject invalid pagination values', () => { const invalidQuery = { page: '0', // Must be positive limit: '200' // Exceeds max limit of 100 }; const result = task_validator_1.TaskQuerySchema.safeParse(invalidQuery); expect(result.success).toBe(false); }); }); describe('BulkCreateTasksSchema', () => { it('should validate bulk create request', () => { const bulkCreate = { tasks: [ { title: 'Task 1', project: '123e4567-e89b-12d3-a456-426614174000' }, { title: 'Task 2', project: '123e4567-e89b-12d3-a456-426614174000' } ] }; const result = task_validator_1.BulkCreateTasksSchema.safeParse(bulkCreate); expect(result.success).toBe(true); if (result.success) { expect(result.data.tasks).toHaveLength(2); } }); it('should reject empty tasks array', () => { const emptyBulk = { tasks: [] }; const result = task_validator_1.BulkCreateTasksSchema.safeParse(emptyBulk); expect(result.success).toBe(false); }); it('should reject more than 100 tasks', () => { const tooManyTasks = { tasks: Array(101).fill({ title: 'Task', project: '123e4567-e89b-12d3-a456-426614174000' }) }; const result = task_validator_1.BulkCreateTasksSchema.safeParse(tooManyTasks); expect(result.success).toBe(false); }); }); describe('BulkUpdateTasksSchema', () => { it('should validate bulk update request', () => { const bulkUpdate = { ids: [ '123e4567-e89b-12d3-a456-426614174000', '123e4567-e89b-12d3-a456-426614174001' ], updates: { priority: 'high', status: '123e4567-e89b-12d3-a456-426614174002' } }; const result = task_validator_1.BulkUpdateTasksSchema.safeParse(bulkUpdate); expect(result.success).toBe(true); }); }); describe('BulkDeleteTasksSchema', () => { it('should validate bulk delete request', () => { const bulkDelete = { ids: [ '123e4567-e89b-12d3-a456-426614174000', '123e4567-e89b-12d3-a456-426614174001' ] }; const result = task_validator_1.BulkDeleteTasksSchema.safeParse(bulkDelete); expect(result.success).toBe(true); }); it('should reject invalid UUIDs', () => { const invalidDelete = { ids: ['not-a-uuid', 'another-invalid-id'] }; const result = task_validator_1.BulkDeleteTasksSchema.safeParse(invalidDelete); expect(result.success).toBe(false); }); }); describe('DuplicateTaskSchema', () => { it('should validate duplicate task request', () => { const duplicateRequest = { taskId: '123e4567-e89b-12d3-a456-426614174000', includeSubtasks: true, includeAttachments: false, overrides: { title: 'Duplicated Task' } }; const result = task_validator_1.DuplicateTaskSchema.safeParse(duplicateRequest); expect(result.success).toBe(true); if (result.success) { expect(result.data.includeSubtasks).toBe(true); expect(result.data.includeAttachments).toBe(false); expect(result.data.includeComments).toBe(false); // Default value } }); }); describe('CreateTemplateFromTaskSchema', () => { it('should validate template creation request', () => { const templateRequest = { taskId: '123e4567-e89b-12d3-a456-426614174000', templateName: 'Feature Template', templateDescription: 'Template for new features', excludeFields: ['notes', 'created_by'] }; const result = task_validator_1.CreateTemplateFromTaskSchema.safeParse(templateRequest); expect(result.success).toBe(true); }); it('should require template name', () => { const invalidRequest = { taskId: '123e4567-e89b-12d3-a456-426614174000' // Missing templateName }; const result = task_validator_1.CreateTemplateFromTaskSchema.safeParse(invalidRequest); expect(result.success).toBe(false); }); }); describe('ApplyTemplateSchema', () => { it('should validate template application request', () => { const applyRequest = { templateId: '123e4567-e89b-12d3-a456-426614174000', projectId: '123e4567-e89b-12d3-a456-426614174001', overrides: { title: 'Custom Title from Template' } }; const result = task_validator_1.ApplyTemplateSchema.safeParse(applyRequest); expect(result.success).toBe(true); }); }); }); //# sourceMappingURL=task.validator.test.js.map