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