diff --git a/packages/shared/sdk-server/__tests__/LDClient.evaluation.test.ts b/packages/shared/sdk-server/__tests__/LDClient.evaluation.test.ts index 2a7461525e..c37f6dd2d0 100644 --- a/packages/shared/sdk-server/__tests__/LDClient.evaluation.test.ts +++ b/packages/shared/sdk-server/__tests__/LDClient.evaluation.test.ts @@ -34,6 +34,33 @@ describe('given an LDClient with test data', () => { client.close(); }); + it('evaluates a flag which has a fallthrough and a rule', async () => { + const testId = 'abcd'.repeat(8); + const flagKey = 'testFlag'; + await td.update(td.flag(flagKey).booleanFlag().variationForAll(true)); + await td.update(td.flag(flagKey).ifMatch('user', 'testId', testId).thenReturn(false)); + + // Evaluate with no testId + const flagsState = await client.allFlagsState({ + kind: 'user', + key: 'fake', + testId: undefined, + }); + + const features = flagsState.allValues(); + + expect(features[flagKey]).toBeTruthy(); + + const flagsStateWithTenant = await client.allFlagsState({ + kind: 'user', + key: testId, + testId, + }); + + const featuresWithTenant = flagsStateWithTenant.allValues(); + expect(featuresWithTenant[flagKey]).toBeFalsy(); + }); + it('evaluates an existing flag', async () => { td.update(td.flag('flagkey').on(true).variations('a', 'b').fallthroughVariation(1)); expect(await client.variation('flagkey', defaultUser, 'c')).toBe('b'); diff --git a/packages/shared/sdk-server/__tests__/integrations/test_data/TestData.test.ts b/packages/shared/sdk-server/__tests__/integrations/test_data/TestData.test.ts index 5e5e88a155..36eae45713 100644 --- a/packages/shared/sdk-server/__tests__/integrations/test_data/TestData.test.ts +++ b/packages/shared/sdk-server/__tests__/integrations/test_data/TestData.test.ts @@ -167,6 +167,9 @@ describe('given a TestData instance', () => { it('can clone a complex flag configuration', () => { const flag = td .flag('test-flag') + .offVariation(true) + .variationForAll(false) + .variationForUser('billy', true) .ifMatch('user', 'name', 'ben', 'christian') .andNotMatch('user', 'country', 'fr') .thenReturn(true); @@ -199,7 +202,14 @@ describe('given a TestData instance', () => { }, ]; - expect(flagCopy.build(1).rules).toEqual(flagRules); + const builtFlag = flagCopy.build(1); + expect(builtFlag.fallthrough).toEqual({ variation: 1 }); + expect(builtFlag.offVariation).toEqual(0); + expect(builtFlag.variations).toEqual([true, false]); + expect(builtFlag.contextTargets).toEqual([ + { contextKind: 'user', values: ['billy'], variation: 0 }, + ]); + expect(builtFlag.rules).toEqual(flagRules); }); it('defaults a new flag to on', () => { diff --git a/packages/shared/sdk-server/src/integrations/test_data/TestDataFlagBuilder.ts b/packages/shared/sdk-server/src/integrations/test_data/TestDataFlagBuilder.ts index c4bd5b0168..b07600b293 100644 --- a/packages/shared/sdk-server/src/integrations/test_data/TestDataFlagBuilder.ts +++ b/packages/shared/sdk-server/src/integrations/test_data/TestDataFlagBuilder.ts @@ -42,7 +42,7 @@ export default class TestDataFlagBuilder { this.data.offVariation = data.offVariation; } if (data.fallthroughVariation !== undefined) { - this.data.offVariation = data.offVariation; + this.data.fallthroughVariation = data.fallthroughVariation; } if (data.targetsByVariation) { this.data.targetsByVariation = JSON.parse(JSON.stringify(data.targetsByVariation));