Spaces:
Runtime error
Runtime error
| import { test, expect } from '@playwright/test' | |
| import { API_KEY_HEADER, createTestTask, deleteTestTask } from './helpers' | |
| test.describe('Notifications', () => { | |
| const cleanup: number[] = [] | |
| test.afterEach(async ({ request }) => { | |
| for (const id of cleanup) { | |
| await deleteTestTask(request, id).catch(() => {}) | |
| } | |
| cleanup.length = 0 | |
| }) | |
| // ββ GET /api/notifications βββββββββββββββββββ | |
| test('GET returns notifications for recipient', async ({ request }) => { | |
| // Create a task assigned to an agent (triggers notification) | |
| const { id } = await createTestTask(request, { assigned_to: 'notif-agent' }) | |
| cleanup.push(id) | |
| const res = await request.get('/api/notifications?recipient=notif-agent', { | |
| headers: API_KEY_HEADER, | |
| }) | |
| expect(res.status()).toBe(200) | |
| const body = await res.json() | |
| expect(body.notifications).toBeDefined() | |
| expect(Array.isArray(body.notifications)).toBe(true) | |
| expect(body).toHaveProperty('total') | |
| expect(body).toHaveProperty('unreadCount') | |
| }) | |
| test('GET returns 400 without recipient param', async ({ request }) => { | |
| const res = await request.get('/api/notifications', { headers: API_KEY_HEADER }) | |
| expect(res.status()).toBe(400) | |
| }) | |
| test('GET filters by unread_only', async ({ request }) => { | |
| const res = await request.get('/api/notifications?recipient=notif-agent&unread_only=true', { | |
| headers: API_KEY_HEADER, | |
| }) | |
| expect(res.status()).toBe(200) | |
| const body = await res.json() | |
| // All returned notifications should be unread (read_at is null) | |
| for (const n of body.notifications) { | |
| expect(n.read_at).toBeNull() | |
| } | |
| }) | |
| // ββ POST /api/notifications ββββββββββββββββββ | |
| test('POST marks notifications as delivered', async ({ request }) => { | |
| // Create assignment to trigger a notification | |
| const { id } = await createTestTask(request, { assigned_to: 'deliver-agent' }) | |
| cleanup.push(id) | |
| const res = await request.post('/api/notifications', { | |
| headers: API_KEY_HEADER, | |
| data: { action: 'mark-delivered', agent: 'deliver-agent' }, | |
| }) | |
| expect(res.status()).toBe(200) | |
| const body = await res.json() | |
| expect(body.success).toBe(true) | |
| }) | |
| test('POST rejects missing agent', async ({ request }) => { | |
| const res = await request.post('/api/notifications', { | |
| headers: API_KEY_HEADER, | |
| data: { action: 'mark-delivered' }, | |
| }) | |
| expect(res.status()).toBe(400) | |
| }) | |
| // ββ PUT /api/notifications βββββββββββββββββββ | |
| test('PUT marks specific notification ids as read', async ({ request }) => { | |
| // Create assignment | |
| const { id: taskId } = await createTestTask(request, { assigned_to: 'read-agent' }) | |
| cleanup.push(taskId) | |
| // Get the notification id | |
| const listRes = await request.get('/api/notifications?recipient=read-agent', { | |
| headers: API_KEY_HEADER, | |
| }) | |
| const listBody = await listRes.json() | |
| const notifIds = listBody.notifications.map((n: any) => n.id) | |
| if (notifIds.length > 0) { | |
| const res = await request.put('/api/notifications', { | |
| headers: API_KEY_HEADER, | |
| data: { ids: notifIds }, | |
| }) | |
| expect(res.status()).toBe(200) | |
| const body = await res.json() | |
| expect(body.success).toBe(true) | |
| } | |
| }) | |
| test('PUT marks all as read for recipient', async ({ request }) => { | |
| const res = await request.put('/api/notifications', { | |
| headers: API_KEY_HEADER, | |
| data: { recipient: 'read-agent', markAllRead: true }, | |
| }) | |
| expect(res.status()).toBe(200) | |
| const body = await res.json() | |
| expect(body.success).toBe(true) | |
| }) | |
| }) | |