From fa4c7a8641206b7212f50f7e42d953b3056e762c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Fr=C3=A5nberg?= Date: Thu, 1 Feb 2024 09:32:10 +0100 Subject: [PATCH] fix: allow the full flag to be resolved (#56) * fix: allow the full flag to be resolved --- .../client-http/src/client/Configuration.ts | 4 ++++ .../src/ConfidenceServerProvider.test.ts | 22 +++++++++++++++++ .../src/ConfidenceWebProvider.test.ts | 24 +++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/packages/client-http/src/client/Configuration.ts b/packages/client-http/src/client/Configuration.ts index 15950558..d2309238 100644 --- a/packages/client-http/src/client/Configuration.ts +++ b/packages/client-http/src/client/Configuration.ts @@ -47,6 +47,10 @@ export namespace Configuration { let value: any = flag.value; let schema: FlagSchema = flag.schema; + if (path === '') { + return { value, schema }; + } + for (const part of path.split('.')) { if (typeof schema !== 'object') { throw new Error(`Parse Error. Cannot find path: ${path}. In flag: ${JSON.stringify(flag)}`); diff --git a/packages/openfeature-server-provider/src/ConfidenceServerProvider.test.ts b/packages/openfeature-server-provider/src/ConfidenceServerProvider.test.ts index 714c09bb..1a92a07f 100644 --- a/packages/openfeature-server-provider/src/ConfidenceServerProvider.test.ts +++ b/packages/openfeature-server-provider/src/ConfidenceServerProvider.test.ts @@ -312,6 +312,28 @@ describe('ConfidenceServerProvider', () => { }); }); + it('should resolve a full flag object', async () => { + expect(await instanceUnderTest.resolveObjectEvaluation('testFlag', {}, {}, dummyConsole)).toEqual({ + variant: 'control', + flagMetadata: { + resolveToken: 'before-each', + }, + reason: 'TARGETING_MATCH', + value: { + bool: true, + str: 'control', + int: 3, + dub: 3.5, + obj: { + str: 'obj string', + bool: true, + int: 3, + dub: 3.5, + }, + }, + }); + }); + it('should resolve a full object with partial default', async () => { expect( await instanceUnderTest.resolveObjectEvaluation( diff --git a/packages/openfeature-web-provider/src/ConfidenceWebProvider.test.ts b/packages/openfeature-web-provider/src/ConfidenceWebProvider.test.ts index ccd07959..1e6698bb 100644 --- a/packages/openfeature-web-provider/src/ConfidenceWebProvider.test.ts +++ b/packages/openfeature-web-provider/src/ConfidenceWebProvider.test.ts @@ -600,6 +600,30 @@ describe('ConfidenceProvider', () => { }); }); + it('should resolve the full flag object', async () => { + await instanceUnderTest.initialize(dummyContext); + + expect(instanceUnderTest.resolveObjectEvaluation('testFlag', {}, dummyEvaluationContext, dummyConsole)).toEqual({ + variant: 'control', + flagMetadata: { + resolveToken: 'before-each', + }, + reason: 'TARGETING_MATCH', + value: { + bool: true, + str: 'control', + int: 3, + dub: 3.5, + obj: { + str: 'obj string', + bool: true, + int: 3, + dub: 3.5, + }, + }, + }); + }); + it('should resolve a full object with type mismatch default', async () => { await instanceUnderTest.initialize(dummyContext);