Skip to content

Commit e41f5c9

Browse files
author
Matt Carroll
committed
project_config getAudiencesForExperiment: look for audiences in
projectConfig.typedAudiences first, then fall back to projectConfig.audiences
1 parent 5df14b4 commit e41f5c9

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

packages/optimizely-sdk/lib/core/project_config/index.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ module.exports = {
4040
fns.forEach(projectConfig.audiences, function(audience) {
4141
audience.conditions = JSON.parse(audience.conditions);
4242
});
43+
projectConfig.audienceIdMap = fns.keyBy(projectConfig.audiences, 'id');
44+
fns.forEach(projectConfig.typedAudiences, function(audience) {
45+
audience.conditions = JSON.parse(audience.conditions);
46+
});
47+
projectConfig.typedAudienceIdMap = fns.keyBy(projectConfig.typedAudiences, 'id');
4348

4449
projectConfig.attributeKeyMap = fns.keyBy(projectConfig.attributes, 'key');
4550
projectConfig.eventKeyMap = fns.keyBy(projectConfig.events, 'key');
@@ -215,8 +220,16 @@ module.exports = {
215220

216221
var audienceIds = experiment.audienceIds;
217222
var audiencesInExperiment = [];
218-
var audiencesInExperiment = fns.filter(projectConfig.audiences, function(audience) {
219-
return audienceIds.indexOf(audience.id) !== -1;
223+
fns.forEach(audienceIds, function(audienceId) {
224+
var typedAudience = projectConfig.typedAudienceIdMap[audienceId];
225+
if (typedAudience) {
226+
audiencesInExperiment.push(typedAudience);
227+
return;
228+
}
229+
var audience = projectConfig.audienceIdMap[audienceId];
230+
if (audience) {
231+
audiencesInExperiment.push(audience);
232+
}
220233
});
221234
return audiencesInExperiment;
222235
},

packages/optimizely-sdk/lib/core/project_config/index.tests.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,19 @@ describe('lib/core/project_config', function() {
531531
});
532532
});
533533
});
534+
535+
describe('audience match types', function() {
536+
beforeEach(function() {
537+
configObj = projectConfig.createProjectConfig(testDatafile.getTestProjectConfigWithFeatures());
538+
});
539+
540+
it('should retrieve audiences in getAudiencesForExperiment by checking first in typedAudiences, and then second in audiences', function() {
541+
assert.deepEqual(
542+
projectConfig.getAudiencesForExperiment(configObj, 'typed_audience_experiment'),
543+
testDatafile.parsedTypedAudiences
544+
);
545+
});
546+
});
534547
});
535548

536549
describe('#getForcedVariation', function() {

0 commit comments

Comments
 (0)