From 9c1426ab09707dd252c7be2f73335db86dc7de4a Mon Sep 17 00:00:00 2001 From: Richard Walker Date: Thu, 2 Apr 2020 16:22:00 +1300 Subject: [PATCH 1/2] add Podium context invisible getters for convenience and consistency --- __tests__/context.js | 37 +++++++++++++++++++++++++++++++++++++ lib/context.js | 8 ++++++++ 2 files changed, 45 insertions(+) diff --git a/__tests__/context.js b/__tests__/context.js index 96376e7d..f299f0d1 100644 --- a/__tests__/context.js +++ b/__tests__/context.js @@ -185,6 +185,13 @@ test('PodiumContext.middleware() - process a "rich" request - should put parsed expect(result.context['podium-debug']).toEqual('false'); expect(result.context['podium-requested-by']).toEqual('foo'); expect(result.context['podium-public-pathname']).toBeInstanceOf(Function); + expect(result.context.mountOrigin).toEqual('http://localhost:3030'); + expect(result.context.mountPathname).toEqual('/'); + expect(result.context.deviceType).toEqual('mobile'); + expect(result.context.locale).toEqual('en-US'); + expect(result.context.debug).toEqual('false'); + expect(result.context.requestedBy).toEqual('foo'); + expect(result.context.publicPathname).toBeInstanceOf(Function); }); test('PodiumContext.middleware() - process a "minimal" request - should put parsed values into res.locals.podium', async () => { @@ -207,6 +214,36 @@ test('PodiumContext.middleware() - process a "minimal" request - should put pars expect(result.context['podium-debug']).toEqual('false'); expect(result.context['podium-requested-by']).toEqual('foo'); expect(result.context['podium-public-pathname']).toBeInstanceOf(Function); + expect(result.context.mountOrigin).toEqual('http://localhost:3030'); + expect(result.context.mountPathname).toEqual('/'); + expect(result.context.deviceType).toEqual('desktop'); + expect(result.context.locale).toEqual('en-US'); + expect(result.context.debug).toEqual('false'); + expect(result.context.requestedBy).toEqual('foo'); + expect(result.context.publicPathname).toBeInstanceOf(Function); +}); + +test('PodiumContext.middleware() - context object getters not present when serializing', async () => { + const context = new Context({ name: 'foo' }); + const incoming = new HttpIncoming({ + headers: { + host: 'localhost:3030', + }, + hostname: 'localhost', + url: '/some/path', + }); + + const result = await context.process(incoming); + + expect(Object.keys(result.context)).toEqual([ + 'podium-public-pathname', + 'podium-mount-pathname', + 'podium-mount-origin', + 'podium-requested-by', + 'podium-device-type', + 'podium-locale', + 'podium-debug', + ]); }); test('PodiumContext.middleware() - a parser throws - should emit "next()" with Boom Error Object', async () => { diff --git a/lib/context.js b/lib/context.js index 9f728155..97a7a977 100644 --- a/lib/context.js +++ b/lib/context.js @@ -110,6 +110,14 @@ const PodiumContext = class PodiumContext { const key = `${PREFIX}-${parsers[index][0]}`; // eslint-disable-next-line no-param-reassign incoming.context[decamelize(key, '-')] = item; + + Object.defineProperty(incoming.context, parsers[index][0], { + get() { + return incoming.context[decamelize(key, '-')]; + }, + enumerable: false, + configurable: false, + }); }); timer(); From cdc045884edcea8a9bdae580320fd02cdbe6d6d1 Mon Sep 17 00:00:00 2001 From: Richard Walker Date: Thu, 2 Apr 2020 16:23:45 +1300 Subject: [PATCH 2/2] trim unneeded test setup --- __tests__/context.js | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/__tests__/context.js b/__tests__/context.js index f299f0d1..9ca40430 100644 --- a/__tests__/context.js +++ b/__tests__/context.js @@ -225,13 +225,7 @@ test('PodiumContext.middleware() - process a "minimal" request - should put pars test('PodiumContext.middleware() - context object getters not present when serializing', async () => { const context = new Context({ name: 'foo' }); - const incoming = new HttpIncoming({ - headers: { - host: 'localhost:3030', - }, - hostname: 'localhost', - url: '/some/path', - }); + const incoming = new HttpIncoming(); const result = await context.process(incoming);