From 454482cbfbb5271ad6fd5a205218440917e04cbc Mon Sep 17 00:00:00 2001 From: Richard Petersen <richard.petersen@open-xchange.com> Date: Tue, 7 Sep 2021 16:48:15 +0200 Subject: [PATCH] Fix unit tests --- jest.config.js | 1 + spec/server_test.js | 60 ++++++++++++++++++++------------------------- spec/util.js | 11 +++++++++ src/manifests.js | 4 +-- 4 files changed, 41 insertions(+), 35 deletions(-) diff --git a/jest.config.js b/jest.config.js index 7775d67..bba2d6d 100644 --- a/jest.config.js +++ b/jest.config.js @@ -70,6 +70,7 @@ export default { // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. // maxWorkers: "50%", + maxWorkers: 1, // An array of directory names to be searched recursively up from the requiring module's location // moduleDirectories: [ diff --git a/spec/server_test.js b/spec/server_test.js index 2012925..9c7ac5c 100644 --- a/spec/server_test.js +++ b/spec/server_test.js @@ -2,7 +2,7 @@ import { describe, it, expect, beforeAll, afterAll, beforeEach, afterEach } from import mockfs from 'mock-fs' import request from 'supertest' import { createApp } from '../src/createApp' -import { createMockServer, getRandomPort } from './util.js' +import { createMockServer, generateSimpleViteManifest, getRandomPort } from './util.js' describe('Manifest service', () => { let app @@ -26,13 +26,13 @@ describe('Manifest service', () => { beforeEach(async () => { mockserver = await createMockServer({ port }) mockserver.respondWith({ - '/api/manifest.json': { some: 'thing' } + '/api/manifest.json': generateSimpleViteManifest({ 'example.js': 'test' }) }) }) afterEach(() => { mockserver.close() - app.timeout = 30000 + process.env.CACHE_TTL = 30000 }) it('is healthy', async () => { @@ -43,53 +43,47 @@ describe('Manifest service', () => { it('fetches manifest data', async () => { const response = await request(app).get('/api/manifest.json') expect(response.statusCode).toBe(200) - expect(response.body).toEqual([{ some: 'thing' }]) + expect(response.body).toEqual([{ namespace: 'test', path: 'example' }]) }) it('caches manifest data', async () => { - await request(app) - .get('/api/manifest.json') - .then(response => { - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([{ some: 'thing' }]) - }) + const response = await request(app).get('/api/manifest.json') + expect(response.statusCode).toBe(200) + expect(response.body).toEqual([{ namespace: 'test', path: 'example' }]) mockserver.close() mockserver = await createMockServer({ port }) - mockserver.respondWith({ '/api/manifest.json': { some: 'different' } }) + mockserver.respondWith({ + '/api/manifest.json': generateSimpleViteManifest({ 'example.js': 'other' }) + }) - await new Promise((resolve, reject) => setTimeout(resolve, 150)) + await new Promise(resolve => setTimeout(resolve, 150)) - await request(app) - .get('/api/manifest.json') - .then(response => { - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([{ some: 'thing' }]) - }) + const response2 = await request(app).get('/api/manifest.json') + expect(response2.statusCode).toBe(200) + expect(response2.body).toEqual([{ namespace: 'test', path: 'example' }]) }) it('refreshes manifest data after caching timeout', async () => { - app.timeout = 100 + process.env.CACHE_TTL = 1 + app = createApp() - await request(app) - .get('/api/manifest.json') - .then(response => { - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([{ some: 'thing' }]) - }) + const response = await request(app).get('/api/manifest.json') + expect(response.statusCode).toBe(200) + expect(response.body).toEqual([{ namespace: 'test', path: 'example' }]) mockserver.close() mockserver = await createMockServer({ port }) - mockserver.respondWith({ '/api/manifest.json': { some: 'different' } }) + mockserver.respondWith({ + '/api/manifest.json': generateSimpleViteManifest({ 'example.js': 'other' }) + }) - await new Promise((resolve, reject) => setTimeout(resolve, 150)) + // wait some time + await new Promise(resolve => setTimeout(resolve, 10)) - await request(app) - .get('/api/manifest.json') - .then(response => { - expect(response.statusCode).toBe(200) - expect(response.body).toEqual([{ some: 'different' }]) - }) + const response2 = await request(app).get('/api/manifest.json') + expect(response2.statusCode).toBe(200) + expect(response2.body).toEqual([{ namespace: 'other', path: 'example' }]) }) it.skip('can load multiple configurations', async () => { diff --git a/spec/util.js b/spec/util.js index 7fe1ae9..cd78917 100644 --- a/spec/util.js +++ b/spec/util.js @@ -16,3 +16,14 @@ export async function createMockServer ({ port }) { } return server } + +export function generateSimpleViteManifest (mapping) { + const viteManifest = {} + for (const [file, namespace] of Object.entries(mapping)) { + viteManifest[file] = { + file, + meta: namespace ? { manifests: [{ namespace }] } : {} + } + } + return viteManifest +} diff --git a/src/manifests.js b/src/manifests.js index d84d783..5a3f3ac 100644 --- a/src/manifests.js +++ b/src/manifests.js @@ -3,13 +3,13 @@ import yaml from 'js-yaml' import fetch from 'node-fetch' import path from 'path' -const CACHE_TTL = parseInt(process.env.CACHE_TTL) - export const loadViteManifests = (() => { let cache let lastCacheTime return async function loadViteManifests ({ useCache = true } = {}) { + const CACHE_TTL = parseInt(process.env.CACHE_TTL) + if (!cache || useCache === false || +new Date() > lastCacheTime + CACHE_TTL) { const urlsSource = await fs.readFile('./config/manifests/urls.yaml', 'utf8') const urls = yaml.load(urlsSource).manifests -- GitLab