feat: initial setup with WhatsApp CRM apps and sync services

This commit is contained in:
2026-04-05 17:29:28 +00:00
parent d983027450
commit e8bb767884
57 changed files with 26156 additions and 0 deletions

View File

@@ -0,0 +1,147 @@
import { initDB, createContact, createTask, getTaskById, getTasksByContactId, getPendingTasksByContactId, getOverdueTasks, updateTask, deleteTask, closeDB } from '@/lib/db'
beforeAll(async () => {
await initDB()
})
afterAll(() => {
closeDB()
})
beforeEach(() => {
const db = require('@/lib/db').getDB()
db.run('DELETE FROM tasks')
db.run('DELETE FROM messages')
db.run('DELETE FROM contacts')
})
describe('Task Management', () => {
describe('5.1 Task Creation Tests', () => {
it('test_create_task_with_required_fields', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999999' })
const task = createTask({
contact_id: contact.id,
title: 'Follow up call',
due_date: '2026-04-10',
})
expect(task).toBeDefined()
expect(task.id).toBeGreaterThan(0)
expect(task.contact_id).toBe(contact.id)
expect(task.title).toBe('Follow up call')
expect(task.due_date).toBe('2026-04-10')
expect(task.status).toBe('pending')
expect(task.completed_at).toBeNull()
})
it('test_create_task_missing_due_date', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999998' })
expect(() => {
createTask({
contact_id: contact.id,
title: 'Follow up call',
due_date: '',
})
}).toThrow('Title and due date are required')
})
it('test_create_task_missing_title', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999997' })
expect(() => {
createTask({
contact_id: contact.id,
title: '',
due_date: '2026-04-10',
})
}).toThrow('Title and due date are required')
})
})
describe('5.2 Task Updates Tests', () => {
it('test_mark_task_completed', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999996' })
const task = createTask({
contact_id: contact.id,
title: 'Follow up call',
due_date: '2026-04-10',
})
const updated = updateTask(task.id, { status: 'completed' })
expect(updated).toBeDefined()
expect(updated?.status).toBe('completed')
expect(updated?.completed_at).not.toBeNull()
})
it('test_update_task_due_date', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999995' })
const task = createTask({
contact_id: contact.id,
title: 'Follow up call',
due_date: '2026-04-10',
})
const updated = updateTask(task.id, { due_date: '2026-04-15' })
expect(updated).toBeDefined()
expect(updated?.due_date).toBe('2026-04-15')
})
})
describe('5.3 Task Queries Tests', () => {
it('test_list_pending_tasks_for_contact', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999994' })
createTask({ contact_id: contact.id, title: 'Task 1', due_date: '2026-04-10' })
createTask({ contact_id: contact.id, title: 'Task 2', due_date: '2026-04-12' })
const completedTask = createTask({ contact_id: contact.id, title: 'Task 3', due_date: '2026-04-08' })
updateTask(completedTask.id, { status: 'completed' })
const pendingTasks = getPendingTasksByContactId(contact.id)
expect(pendingTasks).toHaveLength(2)
expect(pendingTasks.every(t => t.status === 'pending')).toBe(true)
})
it('test_list_overdue_tasks', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999993' })
createTask({ contact_id: contact.id, title: 'Overdue Task', due_date: '2020-01-01' })
createTask({ contact_id: contact.id, title: 'Future Task', due_date: '2030-01-01' })
const overdueTasks = getOverdueTasks()
expect(overdueTasks.length).toBeGreaterThan(0)
expect(overdueTasks.every(t => t.status === 'pending' && t.due_date < new Date().toISOString().split('T')[0])).toBe(true)
})
it('test_create_task_without_contact', async () => {
expect(() => {
createTask({
contact_id: 99999,
title: 'Follow up call',
due_date: '2026-04-10',
})
}).toThrow('Contact not found')
})
it('test_get_task_by_id', async () => {
const contact = createContact({ name: 'Test Contact', phone: '+5511999999992' })
const task = createTask({
contact_id: contact.id,
title: 'Test Task',
due_date: '2026-04-15',
})
const found = getTaskById(task.id)
expect(found).toBeDefined()
expect(found?.id).toBe(task.id)
expect(found?.title).toBe('Test Task')
})
})
})