diff --git a/__tests__/context.js b/__tests__/context.js index 96376e7d..9ca40430 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,30 @@ 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(); + + 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();