Skip to content

Commit 9c082a9

Browse files
yasirfolio3Michael Ng
authored andcommitted
fix(audience-conditions): fixed parsing for audience conditions. (#165)
1 parent 168b57c commit 9c082a9

File tree

3 files changed

+53
-3
lines changed

3 files changed

+53
-3
lines changed

pkg/config/datafileprojectconfig/entities/entities.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ type Experiment struct {
4242
TrafficAllocation []TrafficAllocation `json:"trafficAllocation"`
4343
AudienceIds []string `json:"audienceIds"`
4444
ForcedVariations map[string]string `json:"forcedVariations"`
45-
AudienceConditions []interface{} `json:"audienceConditions"`
45+
AudienceConditions interface{} `json:"audienceConditions"`
4646
}
4747

4848
// Group represents an Group object from the Optimizely datafile

pkg/config/datafileprojectconfig/mappers/experiment.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,18 @@ func mapExperiment(rawExperiment datafileEntities.Experiment) entities.Experimen
6161
var err error
6262
if rawExperiment.AudienceConditions == nil && len(rawExperiment.AudienceIds) > 0 {
6363
audienceConditionTree, err = buildAudienceConditionTree(rawExperiment.AudienceIds)
64-
} else if len(rawExperiment.AudienceConditions) > 0 {
65-
audienceConditionTree, err = buildAudienceConditionTree(rawExperiment.AudienceConditions)
64+
} else {
65+
switch audienceConditions := rawExperiment.AudienceConditions.(type) {
66+
case []interface{}:
67+
if len(audienceConditions) > 0 {
68+
audienceConditionTree, err = buildAudienceConditionTree(audienceConditions)
69+
}
70+
case string:
71+
if audienceConditions != "" {
72+
audienceConditionTree, err = buildAudienceConditionTree([]string{audienceConditions})
73+
}
74+
default:
75+
}
6676
}
6777
if err != nil {
6878
// @TODO: handle error

pkg/config/datafileprojectconfig/mappers/experiment_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,46 @@ func TestMapExperiments(t *testing.T) {
117117
assert.Equal(t, expectedExperimentKeyMap, experimentKeyMap)
118118
}
119119

120+
func TestMapExperimentsWithStringAudienceCondition(t *testing.T) {
121+
122+
rawExperiment := datafileEntities.Experiment{
123+
ID: "11111",
124+
AudienceIds: []string{"31111"},
125+
Key: "test_experiment_11111",
126+
AudienceConditions: "31111",
127+
}
128+
129+
rawExperiments := []datafileEntities.Experiment{rawExperiment}
130+
experimentGroupMap := map[string]string{"11111": "15"}
131+
132+
experiments, experimentKeyMap := MapExperiments(rawExperiments, experimentGroupMap)
133+
expectedExperiments := map[string]entities.Experiment{
134+
"11111": {
135+
AudienceIds: []string{"31111"},
136+
ID: "11111",
137+
GroupID: "15",
138+
Key: "test_experiment_11111",
139+
Variations: map[string]entities.Variation{},
140+
TrafficAllocation: []entities.Range{},
141+
AudienceConditionTree: &entities.TreeNode{
142+
Operator: "or",
143+
Nodes: []*entities.TreeNode{
144+
{
145+
Operator: "",
146+
Item: "31111",
147+
},
148+
},
149+
},
150+
},
151+
}
152+
expectedExperimentKeyMap := map[string]string{
153+
"test_experiment_11111": "11111",
154+
}
155+
156+
assert.Equal(t, expectedExperiments, experiments)
157+
assert.Equal(t, expectedExperimentKeyMap, experimentKeyMap)
158+
}
159+
120160
func TestMergeExperiments(t *testing.T) {
121161

122162
rawExperiment := datafileEntities.Experiment{

0 commit comments

Comments
 (0)