Skip to content

Commit 6bf661a

Browse files
[FSSDK-11529] project config issue fix
1 parent 504bb8c commit 6bf661a

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

lib/core/decision_service/index.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,7 +1940,7 @@ describe('DecisionService', () => {
19401940
id: 'holdout_included_id',
19411941
key: 'holdout_included',
19421942
status: 'Running',
1943-
includedFlags: ['flag_1'],
1943+
includedFlags: ['1001'],
19441944
excludedFlags: [],
19451945
audienceIds: ['4002'], // age_40 audience
19461946
audienceConditions: ['or', '4002'],
@@ -1989,7 +1989,7 @@ describe('DecisionService', () => {
19891989
id: 'holdout_included_specific_id',
19901990
key: 'holdout_included_specific',
19911991
status: 'Running',
1992-
includedFlags: ['flag_1'],
1992+
includedFlags: ['1001'],
19931993
excludedFlags: [],
19941994
audienceIds: ['4002'], // age_60 audience (age <= 60)
19951995
audienceConditions: ['or', '4002'],
@@ -2176,7 +2176,7 @@ describe('DecisionService', () => {
21762176
if(holdout.id === 'holdout_running_id') {
21772177
return {
21782178
...holdout,
2179-
excludedFlags: ['flag_1']
2179+
excludedFlags: ['1001']
21802180
}
21812181
}
21822182
return holdout;

lib/project_config/project_config.spec.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,7 @@ const getHoldoutDatafile = () => {
339339
key: 'holdout_2',
340340
status: 'Running',
341341
includedFlags: [],
342-
excludedFlags: ['feature_3'],
342+
excludedFlags: ['44829230000'],
343343
audienceIds: [],
344344
audienceConditions: [],
345345
variations: [
@@ -360,7 +360,7 @@ const getHoldoutDatafile = () => {
360360
id: 'holdout_id_3',
361361
key: 'holdout_3',
362362
status: 'Draft',
363-
includedFlags: ['feature_1'],
363+
includedFlags: ['4482920077'],
364364
excludedFlags: [],
365365
audienceIds: [],
366366
audienceConditions: [],
@@ -420,11 +420,11 @@ describe('createProjectConfig - holdouts, feature toggle is on', () => {
420420
]);
421421

422422
expect(configObj.includedHoldouts).toEqual({
423-
feature_1: [configObj.holdouts[2]], // holdout_3 includes feature_1
423+
feature_1: [configObj.holdouts[2]], // holdout_3 includes feature_1 (ID: 4482920077)
424424
});
425425

426426
expect(configObj.excludedHoldouts).toEqual({
427-
feature_3: [configObj.holdouts[1]] // holdout_2 excludes feature_3
427+
feature_3: [configObj.holdouts[1]] // holdout_2 excludes feature_3 (ID: 44829230000)
428428
});
429429

430430
expect(configObj.flagHoldoutsMap).toEqual({});

lib/project_config/project_config.ts

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,8 @@ const parseHoldoutsConfig = (projectConfig: ProjectConfig): void => {
360360
projectConfig.excludedHoldouts = {};
361361
projectConfig.flagHoldoutsMap = {};
362362

363+
const featureFlagIdMap = keyBy(projectConfig.featureFlags, 'id');
364+
363365
projectConfig.holdouts.forEach((holdout) => {
364366
if (!holdout.includedFlags) {
365367
holdout.includedFlags = [];
@@ -379,19 +381,27 @@ const parseHoldoutsConfig = (projectConfig: ProjectConfig): void => {
379381
if (holdout.includedFlags.length === 0) {
380382
projectConfig.globalHoldouts.push(holdout);
381383

382-
holdout.excludedFlags.forEach((flagKey: string) => {
383-
if (!projectConfig.excludedHoldouts[flagKey]) {
384-
projectConfig.excludedHoldouts[flagKey] = [];
384+
holdout.excludedFlags.forEach((flagId: string) => {
385+
const flag = featureFlagIdMap[flagId];
386+
if (flag) {
387+
const flagKey = flag.key;
388+
if (!projectConfig.excludedHoldouts[flagKey]) {
389+
projectConfig.excludedHoldouts[flagKey] = [];
390+
}
391+
projectConfig.excludedHoldouts[flagKey].push(holdout);
385392
}
386-
projectConfig.excludedHoldouts[flagKey].push(holdout);
387393
});
388394
} else {
389-
holdout.includedFlags.forEach((flagKey: string) => {
390-
if (!projectConfig.includedHoldouts[flagKey]) {
391-
projectConfig.includedHoldouts[flagKey] = [];
395+
holdout.includedFlags.forEach((flagId: string) => {
396+
const flag = featureFlagIdMap[flagId];
397+
if (flag) {
398+
const flagKey = flag.key;
399+
if (!projectConfig.includedHoldouts[flagKey]) {
400+
projectConfig.includedHoldouts[flagKey] = [];
401+
}
402+
projectConfig.includedHoldouts[flagKey].push(holdout);
392403
}
393-
projectConfig.includedHoldouts[flagKey].push(holdout);
394-
});
404+
})
395405
}
396406
});
397407
}

0 commit comments

Comments
 (0)