Skip to content

Commit ba6de31

Browse files
Added holdout verification for GsonConfigParserTest
1 parent 9c985ac commit ba6de31

File tree

5 files changed

+81
-26
lines changed

5 files changed

+81
-26
lines changed

core-api/src/main/java/com/optimizely/ab/config/parser/GsonConfigParser.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@
1616
*/
1717
package com.optimizely.ab.config.parser;
1818

19+
import javax.annotation.Nonnull;
20+
1921
import com.google.gson.Gson;
2022
import com.google.gson.GsonBuilder;
21-
import com.optimizely.ab.config.*;
23+
import com.optimizely.ab.config.DatafileProjectConfig;
24+
import com.optimizely.ab.config.Experiment;
25+
import com.optimizely.ab.config.FeatureFlag;
26+
import com.optimizely.ab.config.Group;
27+
import com.optimizely.ab.config.Holdout;
28+
import com.optimizely.ab.config.ProjectConfig;
2229
import com.optimizely.ab.config.audience.Audience;
2330
import com.optimizely.ab.config.audience.TypedAudience;
2431

25-
import javax.annotation.Nonnull;
26-
2732
/**
2833
* {@link Gson}-based config parser implementation.
2934
*/
@@ -35,6 +40,7 @@ public GsonConfigParser() {
3540
.registerTypeAdapter(Audience.class, new AudienceGsonDeserializer())
3641
.registerTypeAdapter(TypedAudience.class, new AudienceGsonDeserializer())
3742
.registerTypeAdapter(Experiment.class, new ExperimentGsonDeserializer())
43+
.registerTypeAdapter(Holdout.class, new HoldoutGsonDeserializer())
3844
.registerTypeAdapter(FeatureFlag.class, new FeatureFlagGsonDeserializer())
3945
.registerTypeAdapter(Group.class, new GroupGsonDeserializer())
4046
.registerTypeAdapter(DatafileProjectConfig.class, new DatafileGsonDeserializer())

core-api/src/main/java/com/optimizely/ab/config/parser/GsonHelpers.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ static Experiment parseExperiment(JsonObject experimentJson, JsonDeserialization
156156
static Holdout parseHoldout(JsonObject holdoutJson, String groupId, JsonDeserializationContext context) {
157157
String id = holdoutJson.get("id").getAsString();
158158
String key = holdoutJson.get("key").getAsString();
159-
JsonElement holdoutStatusJson = holdoutJson.get("status");
160159
String status = holdoutJson.get("status").getAsString();
161160

162161
JsonArray audienceIdsJson = holdoutJson.getAsJsonArray("audienceIds");
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
*
3+
* Copyright 2016-2017, Optimizely and contributors
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package com.optimizely.ab.config.parser;
18+
19+
import java.lang.reflect.Type;
20+
21+
import com.google.gson.JsonDeserializationContext;
22+
import com.google.gson.JsonDeserializer;
23+
import com.google.gson.JsonElement;
24+
import com.google.gson.JsonObject;
25+
import com.google.gson.JsonParseException;
26+
import com.optimizely.ab.config.Holdout;
27+
28+
final class HoldoutGsonDeserializer implements JsonDeserializer<Holdout> {
29+
30+
@Override
31+
public Holdout deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
32+
throws JsonParseException {
33+
34+
JsonObject jsonObject = json.getAsJsonObject();
35+
36+
return GsonHelpers.parseHoldout(jsonObject, context);
37+
}
38+
}

core-api/src/test/java/com/optimizely/ab/config/parser/GsonConfigParserTest.java

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,40 +16,43 @@
1616
*/
1717
package com.optimizely.ab.config.parser;
1818

19-
import com.google.gson.Gson;
20-
import com.google.gson.JsonArray;
21-
import com.google.gson.JsonElement;
22-
import com.google.gson.JsonObject;
23-
import com.google.gson.reflect.TypeToken;
24-
import com.optimizely.ab.config.FeatureFlag;
25-
import com.optimizely.ab.config.FeatureVariable;
26-
import com.optimizely.ab.config.ProjectConfig;
27-
import com.optimizely.ab.config.audience.Audience;
28-
import com.optimizely.ab.config.audience.Condition;
29-
import com.optimizely.ab.config.audience.TypedAudience;
30-
import com.optimizely.ab.internal.InvalidAudienceCondition;
31-
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
32-
import org.junit.Ignore;
33-
import org.junit.Rule;
34-
import org.junit.Test;
35-
import org.junit.rules.ExpectedException;
36-
3719
import java.lang.reflect.Type;
3820
import java.util.HashMap;
3921
import java.util.List;
4022
import java.util.Map;
4123

24+
import static org.junit.Assert.assertEquals;
25+
import static org.junit.Assert.assertNotNull;
26+
import static org.junit.Assert.assertTrue;
27+
import static org.junit.Assert.fail;
28+
import org.junit.Rule;
29+
import org.junit.Test;
30+
import org.junit.rules.ExpectedException;
31+
32+
import com.google.gson.Gson;
33+
import com.google.gson.JsonArray;
34+
import com.google.gson.JsonElement;
35+
import com.google.gson.JsonObject;
36+
import com.google.gson.reflect.TypeToken;
4237
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.nullFeatureEnabledConfigJsonV4;
38+
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validConfigHoldoutJsonV4;
4339
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validConfigJsonV2;
4440
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validConfigJsonV3;
4541
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validConfigJsonV4;
4642
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validProjectConfigV2;
4743
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validProjectConfigV3;
4844
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validProjectConfigV4;
45+
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.validProjectConfigV4_holdout;
4946
import static com.optimizely.ab.config.DatafileProjectConfigTestUtils.verifyProjectConfig;
50-
import static org.junit.Assert.assertEquals;
51-
import static org.junit.Assert.assertNotNull;
52-
import static org.junit.Assert.*;
47+
import com.optimizely.ab.config.FeatureFlag;
48+
import com.optimizely.ab.config.FeatureVariable;
49+
import com.optimizely.ab.config.ProjectConfig;
50+
import com.optimizely.ab.config.audience.Audience;
51+
import com.optimizely.ab.config.audience.Condition;
52+
import com.optimizely.ab.config.audience.TypedAudience;
53+
import com.optimizely.ab.internal.InvalidAudienceCondition;
54+
55+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
5356

5457
/**
5558
* Tests for {@link GsonConfigParser}.
@@ -86,6 +89,15 @@ public void parseProjectConfigV4() throws Exception {
8689
verifyProjectConfig(actual, expected);
8790
}
8891

92+
@Test
93+
public void parseProjectConfigHoldoutV4() throws Exception {
94+
GsonConfigParser parser = new GsonConfigParser();
95+
ProjectConfig actual = parser.parseProjectConfig(validConfigHoldoutJsonV4());
96+
ProjectConfig expected = validProjectConfigV4_holdout();
97+
98+
verifyProjectConfig(actual, expected);
99+
}
100+
89101
@Test
90102
public void parseNullFeatureEnabledProjectConfigV4() throws Exception {
91103
GsonConfigParser parser = new GsonConfigParser();

core-api/src/test/resources/config/holdouts-project-config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@
555555
}
556556
],
557557
"audienceIds": ["3468206643", "3468206644", "3468206646", "3468206645"],
558-
"audienceConditions" : ["or", "3468206643", "3468206644", "3468206646", "3468206645" ],
558+
"audienceConditions" : ["or", "3468206643", "3468206644", "3468206646", "3468206645"]
559559
},
560560
{
561561
"audienceIds": [],

0 commit comments

Comments
 (0)