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 { join } from 'path'
|
||||||
import { createApp } from '../../server.js'
|
import { createApp } from '../../server.js'
|
||||||
|
|
||||||
// Usiamo una dist temporanea con file marcatori, così il test non dipende da
|
// Usiamo una dist e una cartella spot temporanee con file marcatori, così il
|
||||||
// una build reale ed è deterministico.
|
// test non dipende da una build reale ed è deterministico.
|
||||||
let server
|
let server
|
||||||
let baseUrl
|
let baseUrl
|
||||||
let distDir
|
let distDir
|
||||||
|
let spotDir
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
distDir = mkdtempSync(join(tmpdir(), 'segnapunti-dist-'))
|
distDir = mkdtempSync(join(tmpdir(), 'segnapunti-dist-'))
|
||||||
@@ -16,7 +17,12 @@ beforeAll(async () => {
|
|||||||
writeFileSync(join(distDir, 'controller.html'), 'CONTROLLER_MARKER')
|
writeFileSync(join(distDir, 'controller.html'), 'CONTROLLER_MARKER')
|
||||||
writeFileSync(join(distDir, 'app.js'), 'ASSET_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) => {
|
await new Promise((resolve) => {
|
||||||
server = app.listen(0, () => {
|
server = app.listen(0, () => {
|
||||||
baseUrl = `http://127.0.0.1:${server.address().port}`
|
baseUrl = `http://127.0.0.1:${server.address().port}`
|
||||||
@@ -28,6 +34,7 @@ beforeAll(async () => {
|
|||||||
afterAll(async () => {
|
afterAll(async () => {
|
||||||
await new Promise((resolve) => server.close(resolve))
|
await new Promise((resolve) => server.close(resolve))
|
||||||
rmSync(distDir, { recursive: true, force: true })
|
rmSync(distDir, { recursive: true, force: true })
|
||||||
|
rmSync(spotDir, { recursive: true, force: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
async function get(path) {
|
async function get(path) {
|
||||||
@@ -63,4 +70,30 @@ describe('Routing server (server.js)', () => {
|
|||||||
expect(status).toBe(200)
|
expect(status).toBe(200)
|
||||||
expect(body).toBe('ASSET_MARKER')
|
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