From 0131ccb563d06ccfc91574b0d8eedd866fac98f0 Mon Sep 17 00:00:00 2001
From: Richard Petersen <richard.petersen@open-xchange.com>
Date: Thu, 5 May 2022 10:54:11 +0200
Subject: [PATCH] fixed: OXUIB-1621 /meta does not work with disabled redis

---
 spec/meta_test.js | 33 +++++++++++++++++++++++++++++++++
 src/cache.js      |  6 ++++++
 src/meta.js       |  6 +++---
 3 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/spec/meta_test.js b/spec/meta_test.js
index 264e8d2..4ff9221 100644
--- a/spec/meta_test.js
+++ b/spec/meta_test.js
@@ -73,6 +73,7 @@ describe('Responses contain custom headers', function () {
     })
 
     it('does not have metadata from ui service when unavailable', async function () {
+      await import('../src/cache.js').then(({ clear }) => clear())
       const response = await request(app).get('/meta')
       expect(response.statusCode).to.equal(200)
       expect(response.body).to.not.deep.contain({
@@ -81,4 +82,36 @@ describe('Responses contain custom headers', function () {
       })
     })
   })
+
+  describe('without redis disabled', function () {
+    let prevConfig
+
+    beforeEach(async function () {
+      td.reset()
+      mockConfig({ urls: ['http://ui-server/'] })
+      mockFetch(fetchConfig = {
+        'http://ui-server': {
+          '/manifest.json': generateSimpleViteManifest({
+            'example.js': {}
+          }),
+          '/example.js': () => new Response('this is example', { headers: { 'content-type': 'application/javascript' } }),
+          '/meta.json': { name: 'sample-service', version: '1.0' }
+        }
+      })
+      app = await mockApp()
+    })
+
+    afterEach(function () {
+      fetchConfig['http://ui-server'] = prevConfig
+    })
+
+    it('has metadata', async function () {
+      const response = await request(app).get('/meta')
+      expect(response.statusCode).to.equal(200)
+      expect(response.body).to.deep.contain({
+        name: 'sample-service',
+        version: '1.0'
+      })
+    })
+  })
 })
diff --git a/src/cache.js b/src/cache.js
index 523b798..a781e29 100644
--- a/src/cache.js
+++ b/src/cache.js
@@ -14,6 +14,12 @@ export async function getBuffer (key) {
   return get(key, { method: 'getBuffer' })
 }
 
+export async function clear () {
+  for (const prop of Object.getOwnPropertyNames(cache)) {
+    delete cache[prop]
+  }
+}
+
 export async function get (key, { method = 'get' } = {}) {
   if (cache[key]) return cache[key]
 
diff --git a/src/meta.js b/src/meta.js
index 5aadcc1..3bc63ab 100644
--- a/src/meta.js
+++ b/src/meta.js
@@ -1,10 +1,10 @@
 import { config } from './config.js'
 import fetch from 'node-fetch'
-import { client } from './redis.js'
+import * as cache from './cache.js'
 import { getRedisKey } from './util.js'
 
 export async function getMergedMetadata ({ version }) {
-  const metadata = await client.get(getRedisKey({ version, name: 'mergedMetadata' }))
+  const metadata = await cache.get(getRedisKey({ version, name: 'mergedMetadata' }))
   if (metadata) return JSON.parse(metadata)
 
   await config.load()
@@ -29,6 +29,6 @@ export async function getMergedMetadata ({ version }) {
 
   // only return when contains data
   const filtered = newMetadata.filter(Boolean)
-  await client.set(getRedisKey({ version, name: 'mergedMetadata' }), JSON.stringify(filtered))
+  await cache.set(getRedisKey({ version, name: 'mergedMetadata' }), JSON.stringify(filtered))
   return filtered
 }
-- 
GitLab