import { describe, it, expect, beforeAll, afterAll, beforeEach, afterEach } from '@jest/globals' import mockfs from 'mock-fs' import request from 'supertest' import { createApp } from '../src/createApp' import { createMockServer, generateSimpleViteManifest, getRandomPort } from './util.js' describe('Responses contain custom headers', () => { let app let mockserver const port = getRandomPort() beforeAll(() => { mockfs({ './config/manifests': { 'urls.yaml': `manifests: - http://localhost:${port}/api/manifest.json` } }) app = createApp() }) afterAll(() => { mockfs.restore() }) beforeEach(async () => { mockserver = await createMockServer({ port }) mockserver.respondWith({ '/api/manifest.json': generateSimpleViteManifest({ 'example.js': {}, 'main.css': {}, 'index.html': { file: 'index.html.js', isEntry: true, imports: ['example.js'], css: ['main.css'] } }), '/example.js': (req, res) => res.setHeader('content-type', 'application/javascript').status(200).send('this is example'), '/index.html.js': (req, res) => res.setHeader('content-type', 'application/javascript').status(200).send('this is index.html.js'), '/main.css': (req, res) => res.setHeader('content-type', 'text/css').status(200).send('.foo { color: #000; }'), '/index.html': (req, res) => res.setHeader('content-type', 'text/html').status(200).send('<html><head></head><body>it\'s me</body></html>') }) await request(app).get('/ready') }) afterEach(() => { mockserver.close() process.env.CACHE_TTL = 30000 }) it('index.html has version', async () => { const response = await request(app).get('/index.html') expect(response.statusCode).toBe(200) expect(response.headers.version).toMatch(/\d*\.\d*/) }) it('javascript file contains dependencies', async () => { const response = await request(app).get('/index.html.js') expect(response.statusCode).toBe(200) expect(response.headers.dependencies).toEqual('main.css') }) })