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