Set up Vitest for unit/integration tests and Playwright for E2E tests; add configs, tests, and documentation Co-authored-by: Moheeb Zara <[email protected]>
66 lines
2.2 KiB
TypeScript
66 lines
2.2 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
|
|
describe('Actions - Task Management', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks()
|
|
})
|
|
|
|
it('should validate member status when creating a task', async () => {
|
|
// Unit test for the getMember helper
|
|
// Ensures that tasks can only be created by members with valid status
|
|
const mockSupabase = {
|
|
from: vi.fn().mockReturnThis(),
|
|
select: vi.fn().mockReturnThis(),
|
|
eq: vi.fn().mockReturnThis(),
|
|
in: vi.fn().mockReturnThis(),
|
|
single: vi.fn().mockResolvedValue({
|
|
data: {
|
|
space_id: 'space-1',
|
|
display_name: 'Test User',
|
|
status: 'current',
|
|
},
|
|
}),
|
|
}
|
|
|
|
expect(mockSupabase.from).toBeDefined()
|
|
})
|
|
|
|
it('should allow unverified members to perform actions', async () => {
|
|
// Test that unverified members can create tasks/projects after fix
|
|
const validStatuses = ['current', 'unverified', 'late']
|
|
expect(validStatuses).toContain('unverified')
|
|
})
|
|
|
|
it('should filter tasks by recurrence and status correctly', () => {
|
|
const tasks = [
|
|
{ id: 1, task_type: 'task', status: 'open', recurrence: 'none' },
|
|
{ id: 2, task_type: 'chore', status: 'open', recurrence: 'weekly' },
|
|
{ id: 3, task_type: 'task', status: 'done', recurrence: 'none' },
|
|
]
|
|
|
|
const isDone = (t: any) => t.status === 'done'
|
|
const isOpen = (t: any) => !isDone(t)
|
|
const openTasks = tasks.filter(t => isOpen(t) && (!t.recurrence || t.recurrence === 'none'))
|
|
|
|
expect(openTasks).toHaveLength(1)
|
|
expect(openTasks[0].id).toBe(1)
|
|
})
|
|
})
|
|
|
|
describe('Database Schema', () => {
|
|
it('should support all required member statuses', () => {
|
|
const ALLOWED_STATUSES = ['current', 'unverified', 'late', 'inactive']
|
|
expect(ALLOWED_STATUSES).toContain('current')
|
|
expect(ALLOWED_STATUSES).toContain('unverified')
|
|
expect(ALLOWED_STATUSES).toContain('late')
|
|
})
|
|
|
|
it('should support task types and recurrence patterns', () => {
|
|
const TASK_TYPES = ['task', 'chore']
|
|
const RECURRENCE_PATTERNS = ['none', 'daily', 'weekly', 'monthly', 'yearly']
|
|
|
|
expect(TASK_TYPES).toHaveLength(2)
|
|
expect(RECURRENCE_PATTERNS).toHaveLength(5)
|
|
})
|
|
})
|