Skip to content

Commit 4027210

Browse files
bug: fix json variation value handling (#26)
* handle json variant value unmarshalling correctly; add shared test files; rename getJSON to getJSONString (FF-883, FF-902) * use correct valueType in e2e test
1 parent 3b6b8c4 commit 4027210

File tree

4 files changed

+74
-18
lines changed

4 files changed

+74
-18
lines changed

Makefile

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,20 @@ help: Makefile
1212
@echo "usage: make <target>"
1313
@sed -n 's/^##//p' $<
1414

15+
## test-data
1516
testDataDir := eppoclient/test-data/
17+
tempDir := ${testDataDir}temp/
18+
gitDataDir := ${tempDir}sdk-test-data/
19+
branchName := main
20+
githubRepoLink := https://github.com/Eppo-exp/sdk-test-data.git
1621
.PHONY: test-data
1722
test-data:
1823
rm -rf $(testDataDir)
19-
mkdir -p $(testDataDir)
20-
gsutil cp gs://sdk-test-data/rac-experiments-v3.json $(testDataDir)
21-
gsutil cp -r gs://sdk-test-data/assignment-v2 $(testDataDir)
24+
mkdir -p $(tempDir)
25+
git clone -b ${branchName} --depth 1 --single-branch ${githubRepoLink} ${gitDataDir}
26+
cp ${gitDataDir}rac-experiments-v3.json ${testDataDir}
27+
cp -r ${gitDataDir}assignment-v2 ${testDataDir}
28+
rm -rf ${tempDir}
2229

2330
test: test-data
2431
go test ./...

eppoclient/client.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (ec *EppoClient) GetStringAssignment(subjectKey string, flagKey string, sub
4848
return variation.stringValue, err
4949
}
5050

51-
func (ec *EppoClient) GetJSONAssignment(subjectKey string, flagKey string, subjectAttributes dictionary) (string, error) {
51+
func (ec *EppoClient) GetJSONStringAssignment(subjectKey string, flagKey string, subjectAttributes dictionary) (string, error) {
5252
variation, err := ec.getAssignment(subjectKey, flagKey, subjectAttributes, StringType)
5353
return variation.stringValue, err
5454
}

eppoclient/eppoclient_e2e_test.go

Lines changed: 59 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,58 +30,103 @@ func Test_e2e(t *testing.T) {
3030
for _, experiment := range tstData {
3131
expName := experiment.Experiment
3232

33-
assignments := []string{}
33+
booleanAssignments := []bool{}
34+
jsonAssignments := []string{}
3435
numericAssignments := []float64{}
36+
stringAssignments := []string{}
3537

3638
for _, subject := range experiment.SubjectsWithAttributes {
37-
if experiment.ValueType == "numeric" {
39+
switch experiment.ValueType {
40+
case "boolean":
41+
booleanAssignment, err := client.GetBoolAssignment(subject.SubjectKey, expName, subject.SubjectAttributes)
42+
if err == nil {
43+
assert.Nil(t, err)
44+
}
45+
46+
booleanAssignments = append(booleanAssignments, booleanAssignment)
47+
case "numeric":
3848
numericAssignment, err := client.GetNumericAssignment(subject.SubjectKey, expName, subject.SubjectAttributes)
3949
if err == nil {
4050
assert.Nil(t, err)
4151
}
4252

4353
numericAssignments = append(numericAssignments, numericAssignment)
44-
} else {
45-
assignment, err := client.GetStringAssignment(subject.SubjectKey, expName, subject.SubjectAttributes)
46-
if assignment != "" {
54+
case "json":
55+
jsonAssignment, err := client.GetJSONStringAssignment(subject.SubjectKey, expName, subject.SubjectAttributes)
56+
if err == nil {
57+
assert.Nil(t, err)
58+
}
59+
60+
jsonAssignments = append(jsonAssignments, jsonAssignment)
61+
case "string":
62+
stringAssignment, err := client.GetStringAssignment(subject.SubjectKey, expName, subject.SubjectAttributes)
63+
if err == nil {
4764
assert.Nil(t, err)
4865
}
4966

50-
assignments = append(assignments, assignment)
67+
stringAssignments = append(stringAssignments, stringAssignment)
5168
}
5269
}
5370

5471
for _, subject := range experiment.Subjects {
55-
if experiment.ValueType == "numeric" {
72+
switch experiment.ValueType {
73+
case "boolean":
74+
booleanAssignment, err := client.GetBoolAssignment(subject, expName, dictionary{})
75+
if err == nil {
76+
assert.Nil(t, err)
77+
}
78+
79+
booleanAssignments = append(booleanAssignments, booleanAssignment)
80+
case "json":
81+
jsonAssignment, err := client.GetJSONStringAssignment(subject, expName, dictionary{})
82+
if err == nil {
83+
assert.Nil(t, err)
84+
}
85+
86+
jsonAssignments = append(jsonAssignments, jsonAssignment)
87+
case "numeric":
5688
numericAssignment, err := client.GetNumericAssignment(subject, expName, dictionary{})
5789
if err == nil {
5890
assert.Nil(t, err)
5991
}
6092

6193
numericAssignments = append(numericAssignments, numericAssignment)
62-
} else {
63-
assignment, err := client.GetStringAssignment(subject, expName, dictionary{})
94+
case "string":
95+
stringAssignment, err := client.GetStringAssignment(subject, expName, dictionary{})
6496

65-
if assignment != "" {
97+
if err == nil {
6698
assert.Nil(t, err)
6799
}
68100

69-
assignments = append(assignments, assignment)
101+
stringAssignments = append(stringAssignments, stringAssignment)
70102
}
71103
}
72104

73-
if experiment.ValueType == "numeric" {
105+
switch experiment.ValueType {
106+
case "boolean":
107+
expectedAssignments := []bool{}
108+
for _, assignment := range experiment.ExpectedAssignments {
109+
expectedAssignments = append(expectedAssignments, assignment.boolValue)
110+
}
111+
assert.Equal(t, expectedAssignments, booleanAssignments)
112+
case "json":
113+
expectedAssignments := []string{}
114+
for _, assignment := range experiment.ExpectedAssignments {
115+
expectedAssignments = append(expectedAssignments, assignment.stringValue)
116+
}
117+
assert.Equal(t, expectedAssignments, jsonAssignments)
118+
case "numeric":
74119
expectedAssignments := []float64{}
75120
for _, assignment := range experiment.ExpectedAssignments {
76121
expectedAssignments = append(expectedAssignments, assignment.numericValue)
77122
}
78123
assert.Equal(t, expectedAssignments, numericAssignments)
79-
} else {
124+
case "string":
80125
expectedAssignments := []string{}
81126
for _, assignment := range experiment.ExpectedAssignments {
82127
expectedAssignments = append(expectedAssignments, assignment.stringValue)
83128
}
84-
assert.Equal(t, expectedAssignments, assignments)
129+
assert.Equal(t, expectedAssignments, stringAssignments)
85130
}
86131
}
87132
}

eppoclient/value.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func (receiver *Value) UnmarshalJSON(data []byte) error {
4242
return err
4343
}
4444
*receiver = castInterfaceToValue(valueInterface)
45+
4546
return nil
4647
}
4748

@@ -64,6 +65,9 @@ func castInterfaceToValue(valueInterface interface{}) Value {
6465
return Null()
6566
}
6667
return Bool(*v)
68+
case map[string]interface{}:
69+
out, _ := json.Marshal(&v)
70+
return String(string(out))
6771
case string:
6872
return String(v)
6973
case *string:

0 commit comments

Comments
 (0)