import { test, after } from 'node:test'; import assert from 'node:assert/strict'; import { newApp } from './helpers.js'; test('sites: full CRUD', async (t) => { const app = await newApp(); after(() => app.close()); const empty = await app.inject({ method: 'GET', url: '/api/sites' }); assert.deepEqual(JSON.parse(empty.body), []); const created = await app.inject({ method: 'POST', url: '/api/sites', payload: { name: 'DC1' }, }); assert.equal(created.statusCode, 201); const site = JSON.parse(created.body); assert.equal(site.name, 'DC1'); const list = await app.inject({ method: 'GET', url: '/api/sites' }); assert.equal(JSON.parse(list.body).length, 1); const upd = await app.inject({ method: 'PUT', url: `/api/sites/${site.id}`, payload: { name: 'DC2' }, }); assert.equal(upd.statusCode, 200); assert.equal(JSON.parse(upd.body).name, 'DC2'); const del = await app.inject({ method: 'DELETE', url: `/api/sites/${site.id}` }); assert.equal(del.statusCode, 204); }); test('sites: duplicate name returns 409', async (t) => { const app = await newApp(); after(() => app.close()); await app.inject({ method: 'POST', url: '/api/sites', payload: { name: 'A' } }); const dup = await app.inject({ method: 'POST', url: '/api/sites', payload: { name: 'A' } }); assert.equal(dup.statusCode, 409); }); test('sites: cannot delete site that has rooms (409)', async (t) => { const app = await newApp(); after(() => app.close()); const site = JSON.parse((await app.inject({ method: 'POST', url: '/api/sites', payload: { name: 'S' }, })).body); await app.inject({ method: 'POST', url: '/api/rooms', payload: { site_id: site.id, name: 'R' }, }); const r = await app.inject({ method: 'DELETE', url: `/api/sites/${site.id}` }); assert.equal(r.statusCode, 409); });