import { describe, it, expect, vi, afterEach } from 'vitest'; import { createTask } from '@app/features/tasks/data-access/models/task.model'; describe('task.model', () => { afterEach(() => { vi.useRealTimers(); }); describe('createTask', () => { it('should create task with all provided values', () => { vi.useFakeTimers(); vi.setSystemTime(new Date('2026-05-13')); const dto = { title: 'My Task', description: 'My description', dueDate: '2026-12-01' }; const task = createTask(dto); expect(task.title).toBe('My Task'); expect(task.description).toBe('My description'); expect(task.dueDate).toBe('2026-12-01'); expect(task.stateHistory).toEqual([{ state: 'new', date: '2026-05-13' }]); expect(task.notes).toEqual([]); expect(task.id).toBeDefined(); }); it('should create task with default values when optional fields are missing', () => { vi.useFakeTimers(); vi.setSystemTime(new Date('2026-05-13')); const dto = { title: 'Minimal Task' }; const task = createTask(dto); expect(task.title).toBe('Minimal Task'); expect(task.description).toBe(''); expect(task.dueDate).toBe('2026-05-13'); }); it('should generate unique ids for different tasks', () => { const dto = { title: 'Task' }; const task1 = createTask(dto); const task2 = createTask(dto); expect(task1.id).not.toBe(task2.id); }); }); });