import { expect, test } from '@playwright/test' import { queryScalar, resetDatabases, seedQuestions, sqlLiteral } from './helpers/stack' const apiBase = process.env.FULLSTACK_API_BASE_URL ?? 'http://127.0.0.1:18096' test.describe('full-stack admin question CRUD integration', () => { test.beforeEach(() => { resetDatabases() seedQuestions() }) test('create/update/delete question persists expected DB state', async ({ request }) => { const createResp = await request.post(`${apiBase}/api/v1/admin/questions`, { data: { theme: 'Science', text: 'Quelle est la planète la plus chaude du système solaire ?', answer: 'Vénus', hint: 'Pas la plus proche du Soleil', difficulty: 'medium', }, }) expect(createResp.status()).toBe(201) const createBody = await createResp.json() expect(createBody.success).toBeTruthy() const createdID = createBody.data.id as string expect(createdID).toBeTruthy() const createdText = queryScalar( 'questions', `SELECT text FROM questions WHERE id = ${sqlLiteral(createdID)};` ) expect(createdText).toContain('planète la plus chaude') const updateResp = await request.put(`${apiBase}/api/v1/admin/questions/${createdID}`, { data: { theme: 'Science', text: 'Quelle planète est la plus chaude du système solaire ?', answer: 'Vénus', hint: 'Atmosphère très dense', difficulty: 'hard', is_active: true, }, }) expect(updateResp.ok()).toBeTruthy() const updateText = queryScalar( 'questions', `SELECT text FROM questions WHERE id = ${sqlLiteral(createdID)};` ) expect(updateText).toContain('la plus chaude du système solaire') const deleteResp = await request.delete(`${apiBase}/api/v1/admin/questions/${createdID}`) expect(deleteResp.status()).toBe(204) const isActive = queryScalar( 'questions', `SELECT is_active::text FROM questions WHERE id = ${sqlLiteral(createdID)};` ) expect(isActive).toBe('false') }) })