From 98df96f1118e48e00d02d59039064b8c2b66eb2e Mon Sep 17 00:00:00 2001 From: Austin Jones Date: Mon, 27 Aug 2018 18:55:51 -0400 Subject: [PATCH 1/2] Support conversion from an LDUser to a JsonObject --- src/main/java/com/launchdarkly/client/LDUser.java | 6 ++++++ src/test/java/com/launchdarkly/client/LDUserTest.java | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/java/com/launchdarkly/client/LDUser.java b/src/main/java/com/launchdarkly/client/LDUser.java index 6dc26e836..ff23b7994 100644 --- a/src/main/java/com/launchdarkly/client/LDUser.java +++ b/src/main/java/com/launchdarkly/client/LDUser.java @@ -4,6 +4,7 @@ import com.google.common.collect.ImmutableSet; import com.google.gson.JsonArray; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.gson.TypeAdapter; import com.google.gson.internal.Streams; @@ -143,6 +144,11 @@ JsonElement getCustom(String key) { return null; } + JsonObject toJsonObject(LDConfig config) { + JsonElement tree = config.gson.toJsonTree(this); + return tree.getAsJsonObject(); + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/test/java/com/launchdarkly/client/LDUserTest.java b/src/test/java/com/launchdarkly/client/LDUserTest.java index ca8a9f7f4..bc0ef88b3 100644 --- a/src/test/java/com/launchdarkly/client/LDUserTest.java +++ b/src/test/java/com/launchdarkly/client/LDUserTest.java @@ -92,6 +92,16 @@ public void testInvalidCountryNameDoesNotSetCountry() { assert(user.getCountry() == null); } + @Test + public void testLDJsonObject() { + LDConfig config = LDConfig.DEFAULT; + LDUser user = new LDUser.Builder("key") + .build(); + JsonObject object = user.toJsonObject(config); + + assertEquals("key", object.get("key").getAsString()); + } + @Test public void testLDUserJsonSerializationContainsCountryAsTwoDigitCode() { LDConfig config = LDConfig.DEFAULT; From b3ef33615448ac487025ab975b45d4d799406298 Mon Sep 17 00:00:00 2001 From: Austin Jones Date: Mon, 27 Aug 2018 20:10:56 -0400 Subject: [PATCH 2/2] Fix indentiation and implement privateAttributeName logic. --- .../java/com/launchdarkly/client/LDUser.java | 30 +++++++++-- .../com/launchdarkly/client/LDUserTest.java | 52 ++++++++++++++++--- 2 files changed, 73 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/launchdarkly/client/LDUser.java b/src/main/java/com/launchdarkly/client/LDUser.java index ff23b7994..b3edb2f9f 100644 --- a/src/main/java/com/launchdarkly/client/LDUser.java +++ b/src/main/java/com/launchdarkly/client/LDUser.java @@ -2,6 +2,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; @@ -15,6 +16,8 @@ import org.slf4j.LoggerFactory; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -144,9 +147,30 @@ JsonElement getCustom(String key) { return null; } - JsonObject toJsonObject(LDConfig config) { - JsonElement tree = config.gson.toJsonTree(this); - return tree.getAsJsonObject(); + JsonObject toJsConfig(LDConfig config) { + JsonElement tree = new Gson().toJsonTree(this); + + Set privateAttributeSet = new HashSet<>(); + privateAttributeSet.addAll(this.privateAttributeNames); + privateAttributeSet.addAll(config.privateAttrNames); + + List attrs = new ArrayList<>(); + attrs.addAll(privateAttributeSet); + Collections.sort(attrs); + + JsonArray array = new JsonArray(); + for (String element : attrs) { + array.add(new JsonPrimitive(element)); + } + + JsonObject object = tree.getAsJsonObject(); + object.add("privateAttributeNames", array); + + if (config.allAttributesPrivate) { + object.addProperty("allAttributesPrivate", true); + } + + return object; } @Override diff --git a/src/test/java/com/launchdarkly/client/LDUserTest.java b/src/test/java/com/launchdarkly/client/LDUserTest.java index bc0ef88b3..58d146b16 100644 --- a/src/test/java/com/launchdarkly/client/LDUserTest.java +++ b/src/test/java/com/launchdarkly/client/LDUserTest.java @@ -93,13 +93,53 @@ public void testInvalidCountryNameDoesNotSetCountry() { } @Test - public void testLDJsonObject() { - LDConfig config = LDConfig.DEFAULT; - LDUser user = new LDUser.Builder("key") - .build(); - JsonObject object = user.toJsonObject(config); + public void testLDUserJsConfig() { + LDConfig config = LDConfig.DEFAULT; + LDUser user = new LDUser.Builder("key") + .privateCustom("private-key", "private-value") + .custom("public-key", "public-value") + .build(); + + JsonObject object = user.toJsConfig(config); + + assertEquals("key", object.get("key").getAsString()); + + JsonArray privateAttributeNames = object.get("privateAttributeNames").getAsJsonArray(); + assertEquals(1, privateAttributeNames.size()); + assertEquals("private-key", privateAttributeNames.get(0).getAsString()); + + assertEquals("private-value", object.get("custom").getAsJsonObject().get("private-key").getAsString()); + assertEquals("public-value", object.get("custom").getAsJsonObject().get("public-key").getAsString()); + } + + @Test + public void testLDUserJsConfigAllAttributesPrivate() { + LDConfig config = new LDConfig.Builder() + .allAttributesPrivate(true) + .build(); + LDUser user = new LDUser.Builder("key") + .build(); + + JsonObject object = user.toJsConfig(config); + + assertTrue(object.get("allAttributesPrivate").getAsBoolean()); + } + + @Test + public void testLDUserJsConfigPrivate() { + LDConfig config = new LDConfig.Builder() + .privateAttributeNames("private-key") + .build(); + LDUser user = new LDUser.Builder("key") + .privateCustom("private-key2", "private-value2") + .build(); + + JsonObject object = user.toJsConfig(config); - assertEquals("key", object.get("key").getAsString()); + JsonArray privateAttributeNames = object.get("privateAttributeNames").getAsJsonArray(); + assertEquals(2, privateAttributeNames.size()); + assertEquals("private-key", privateAttributeNames.get(0).getAsString()); + assertEquals("private-key2", privateAttributeNames.get(1).getAsString()); } @Test