67 lines
2.2 KiB
JavaScript
67 lines
2.2 KiB
JavaScript
|
|
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')
|
||
|
|
})
|
||
|
|
})
|