Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
headers_test.js 2.05 KiB
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': {
        'config.yaml': `baseUrls:
          - http://localhost:${port}`
      }
    })
    app = createApp()
  })

  afterAll(() => {
    mockfs.restore()
  })

  beforeEach(async () => {
    mockserver = await createMockServer({ port })
    mockserver.respondWith({
      '/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')
  })
})