test(server): copri l'endpoint /spot/list e il serving statico dei video
Aggiunge una cartella spot temporanea ai fixture del routing: elenco ordinato dei soli .mp4, file serviti da /spot/<file>, [] se la cartella non esiste.
This commit is contained in:
@@ -4,11 +4,12 @@ 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.
|
||||
// Usiamo una dist e una cartella spot temporanee con file marcatori, così il
|
||||
// test non dipende da una build reale ed è deterministico.
|
||||
let server
|
||||
let baseUrl
|
||||
let distDir
|
||||
let spotDir
|
||||
|
||||
beforeAll(async () => {
|
||||
distDir = mkdtempSync(join(tmpdir(), 'segnapunti-dist-'))
|
||||
@@ -16,7 +17,12 @@ beforeAll(async () => {
|
||||
writeFileSync(join(distDir, 'controller.html'), 'CONTROLLER_MARKER')
|
||||
writeFileSync(join(distDir, 'app.js'), 'ASSET_MARKER')
|
||||
|
||||
const app = createApp(distDir)
|
||||
spotDir = mkdtempSync(join(tmpdir(), 'segnapunti-spot-'))
|
||||
writeFileSync(join(spotDir, 'b.mp4'), 'VIDEO_B')
|
||||
writeFileSync(join(spotDir, 'a.mp4'), 'VIDEO_A')
|
||||
writeFileSync(join(spotDir, 'note.txt'), 'NON_VIDEO')
|
||||
|
||||
const app = createApp(distDir, spotDir)
|
||||
await new Promise((resolve) => {
|
||||
server = app.listen(0, () => {
|
||||
baseUrl = `http://127.0.0.1:${server.address().port}`
|
||||
@@ -28,6 +34,7 @@ beforeAll(async () => {
|
||||
afterAll(async () => {
|
||||
await new Promise((resolve) => server.close(resolve))
|
||||
rmSync(distDir, { recursive: true, force: true })
|
||||
rmSync(spotDir, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
async function get(path) {
|
||||
@@ -63,4 +70,30 @@ describe('Routing server (server.js)', () => {
|
||||
expect(status).toBe(200)
|
||||
expect(body).toBe('ASSET_MARKER')
|
||||
})
|
||||
|
||||
it('GET /spot/list elenca i soli .mp4 in ordine alfabetico', async () => {
|
||||
const res = await fetch(baseUrl + '/spot/list')
|
||||
expect(res.status).toBe(200)
|
||||
expect(await res.json()).toEqual(['a.mp4', 'b.mp4'])
|
||||
})
|
||||
|
||||
it('serve i video staticamente da /spot/<file>', async () => {
|
||||
const { status, body } = await get('/spot/a.mp4')
|
||||
expect(status).toBe(200)
|
||||
expect(body).toBe('VIDEO_A')
|
||||
})
|
||||
|
||||
it('GET /spot/list ritorna [] se la cartella spot non esiste', async () => {
|
||||
const app = createApp(distDir, join(spotDir, 'inesistente'))
|
||||
const srv = await new Promise((resolve) => {
|
||||
const s = app.listen(0, () => resolve(s))
|
||||
})
|
||||
try {
|
||||
const res = await fetch(`http://127.0.0.1:${srv.address().port}/spot/list`)
|
||||
expect(res.status).toBe(200)
|
||||
expect(await res.json()).toEqual([])
|
||||
} finally {
|
||||
await new Promise((resolve) => srv.close(resolve))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user