You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.0 KiB
TypeScript

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')
})
})