import { describe, it, expect, beforeAll, afterAll } from 'vitest' import { mkdtempSync, writeFileSync, rmSync } from 'fs' import { tmpdir } from 'os' import { join } from 'path' import { createApp } from '../../server.js' // Usiamo una dist temporanea con file marcatori, così il test non dipende da // una build reale ed è deterministico. let server let baseUrl let distDir beforeAll(async () => { distDir = mkdtempSync(join(tmpdir(), 'segnapunti-dist-')) writeFileSync(join(distDir, 'index.html'), 'DISPLAY_MARKER') writeFileSync(join(distDir, 'controller.html'), 'CONTROLLER_MARKER') writeFileSync(join(distDir, 'app.js'), 'ASSET_MARKER') const app = createApp(distDir) await new Promise((resolve) => { server = app.listen(0, () => { baseUrl = `http://127.0.0.1:${server.address().port}` resolve() }) }) }) afterAll(async () => { await new Promise((resolve) => server.close(resolve)) rmSync(distDir, { recursive: true, force: true }) }) async function get(path) { const res = await fetch(baseUrl + path) return { status: res.status, body: await res.text() } } describe('Routing server (server.js)', () => { it('GET / serve la pagina display', async () => { const { status, body } = await get('/') expect(status).toBe(200) expect(body).toBe('DISPLAY_MARKER') }) it('GET /display serve la pagina display', async () => { expect((await get('/display')).body).toBe('DISPLAY_MARKER') }) it('GET /display/qualsiasi serve comunque la pagina display (SPA)', async () => { expect((await get('/display/foo/bar')).body).toBe('DISPLAY_MARKER') }) it('GET /controller serve la pagina controller', async () => { expect((await get('/controller')).body).toBe('CONTROLLER_MARKER') }) it('GET /controller/qualsiasi serve comunque la pagina controller', async () => { expect((await get('/controller/foo')).body).toBe('CONTROLLER_MARKER') }) it('serve gli asset statici dalla dist', async () => { const { status, body } = await get('/app.js') expect(status).toBe(200) expect(body).toBe('ASSET_MARKER') }) })