import request from 'supertest' import { generateSimpleViteManifest, mockApp, mockConfig, mockFetch, mockRedis } from './util.js' import { expect } from 'chai' import * as td from 'testdouble' import RedisMock from 'ioredis-mock' describe('JS files with dependencies contain events', function () { let app let mockFetchConfig beforeEach(async function () { mockConfig({ baseUrls: ['http://ui-server/'] }) mockRedis() mockFetch(mockFetchConfig = { 'http://ui-server': { '/manifest.json': generateSimpleViteManifest({ 'example.js': {}, 'main.css': {}, 'index.html': { file: 'index.html.js', isEntry: true, imports: ['example.js'], css: ['main.css'] } }), '/example.js': () => new Response('this is example', { headers: { 'content-type': 'application/javascript' } }), '/index.html.js': () => new Response('console.log("this is index.html.js")', { headers: { 'content-type': 'application/javascript' } }), '/index.html': () => new Response('<html><head></head><body>it\'s me</body></html>', { headers: { 'content-type': 'text/html' } }), '/main.css': () => new Response('.foo { color: #000; }', { headers: { 'content-type': 'text/css' } }) } }) app = await mockApp() }) afterEach(async function () { await new RedisMock().flushdb() await app.close() td.reset() }) it('javascript file contains dispatcher for dependencies', async function () { const response = await request(app.server).get('/index.html.js') expect(response.statusCode).to.equal(200) expect(response.headers.dependencies).to.equal('main.css') expect(response.text).to.equal('console.log("this is index.html.js")\n/*injected by ui-middleware*/document.dispatchEvent(new CustomEvent("load-css",{detail:{css:["main.css"]}}))') }) it('javascript files from different versions have correct dependencies', async function () { const r1 = await request(app.server).get('/index.html.js') expect(r1.headers.dependencies).to.equal('main.css') mockFetchConfig['http://ui-server']['/manifest.json'] = generateSimpleViteManifest({ 'example.js': {}, 'other.css': {}, 'index.html': { file: 'index.html.js', isEntry: true, imports: ['example.js'], css: ['other.css'] } }) await import('../src/version.js').then(async ({ updateVersionProcessor }) => { // need to process two times to actually trigger the update await updateVersionProcessor() await updateVersionProcessor() }) const r2 = await request(app.server).get('/index.html.js') expect(r2.headers.dependencies).to.equal('other.css') const r3 = await request(app.server).get('/index.html.js').set('version', r1.headers.version) expect(r3.headers.dependencies).to.equal('main.css') const r4 = await request(app.server).get('/index.html.js').set('version', r2.headers.version) expect(r4.headers.dependencies).to.equal('other.css') const r5 = await request(app.server).get('/index.html.js') expect(r5.headers.dependencies).to.equal('other.css') }) })