diff --git a/core-api/src/main/java/com/optimizely/ab/Optimizely.java b/core-api/src/main/java/com/optimizely/ab/Optimizely.java index c3e035e2c..f06af8082 100644 --- a/core-api/src/main/java/com/optimizely/ab/Optimizely.java +++ b/core-api/src/main/java/com/optimizely/ab/Optimizely.java @@ -237,7 +237,7 @@ private void sendImpression(@Nonnull ProjectConfig projectConfig, @Nonnull Map filteredAttributes, @Nonnull Variation variation, @Nonnull String ruleType) { - sendImpression(projectConfig, experiment, userId, filteredAttributes, variation, "", ruleType); + sendImpression(projectConfig, experiment, userId, filteredAttributes, variation, "", ruleType, true); } /** @@ -257,7 +257,8 @@ private void sendImpression(@Nonnull ProjectConfig projectConfig, @Nonnull Map filteredAttributes, @Nonnull Variation variation, @Nonnull String flagKey, - @Nonnull String ruleType) { + @Nonnull String ruleType, + @Nonnull boolean enabled) { UserEvent userEvent = UserEventFactory.createImpressionEvent( projectConfig, @@ -266,7 +267,8 @@ private void sendImpression(@Nonnull ProjectConfig projectConfig, userId, filteredAttributes, flagKey, - ruleType); + ruleType, + enabled); if (userEvent == null) { return; @@ -430,7 +432,8 @@ private Boolean isFeatureEnabled(@Nonnull ProjectConfig projectConfig, copiedAttributes, featureDecision.variation, featureKey, - decisionSource.toString()); + decisionSource.toString(), + featureEnabled); if (featureDecision.variation != null) { // This information is only necessary for feature tests. diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/UserEventFactory.java b/core-api/src/main/java/com/optimizely/ab/event/internal/UserEventFactory.java index 74457922e..20d771033 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/UserEventFactory.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/UserEventFactory.java @@ -37,7 +37,8 @@ public static ImpressionEvent createImpressionEvent(@Nonnull ProjectConfig proje @Nonnull String userId, @Nonnull Map attributes, @Nonnull String flagKey, - @Nonnull String ruleType) { + @Nonnull String ruleType, + @Nonnull boolean enabled) { if ((FeatureDecision.DecisionSource.ROLLOUT.toString().equals(ruleType) || variation == null) && !projectConfig.getSendFlagDecisions()) { @@ -69,6 +70,7 @@ public static ImpressionEvent createImpressionEvent(@Nonnull ProjectConfig proje .setRuleKey(experimentKey) .setRuleType(ruleType) .setVariationKey(variationKey) + .setEnabled(enabled) .build(); return new ImpressionEvent.Builder() diff --git a/core-api/src/main/java/com/optimizely/ab/event/internal/payload/DecisionMetadata.java b/core-api/src/main/java/com/optimizely/ab/event/internal/payload/DecisionMetadata.java index f5120b230..8189dae72 100644 --- a/core-api/src/main/java/com/optimizely/ab/event/internal/payload/DecisionMetadata.java +++ b/core-api/src/main/java/com/optimizely/ab/event/internal/payload/DecisionMetadata.java @@ -29,16 +29,19 @@ public class DecisionMetadata { String ruleType; @JsonProperty("variation_key") String variationKey; + @JsonProperty("enabled") + boolean enabled; @VisibleForTesting public DecisionMetadata() { } - public DecisionMetadata(String flagKey, String ruleKey, String ruleType, String variationKey) { + public DecisionMetadata(String flagKey, String ruleKey, String ruleType, String variationKey, boolean enabled) { this.flagKey = flagKey; this.ruleKey = ruleKey; this.ruleType = ruleType; this.variationKey = variationKey; + this.enabled = enabled; } public String getRuleType() { @@ -49,6 +52,10 @@ public String getRuleKey() { return ruleKey; } + public boolean getEnabled() { + return enabled; + } + public String getFlagKey() { return flagKey; } @@ -67,6 +74,7 @@ public boolean equals(Object o) { if (!ruleType.equals(that.ruleType)) return false; if (!ruleKey.equals(that.ruleKey)) return false; if (!flagKey.equals(that.flagKey)) return false; + if (enabled != that.enabled) return false; return variationKey.equals(that.variationKey); } @@ -85,6 +93,12 @@ public static class Builder { private String ruleKey; private String flagKey; private String variationKey; + private boolean enabled; + + public Builder setEnabled(boolean enabled) { + this.enabled = enabled; + return this; + } public Builder setRuleType(String ruleType) { this.ruleType = ruleType; @@ -107,7 +121,7 @@ public Builder setVariationKey(String variationKey) { } public DecisionMetadata build() { - return new DecisionMetadata(flagKey, ruleKey, ruleType, variationKey); + return new DecisionMetadata(flagKey, ruleKey, ruleType, variationKey, enabled); } } } diff --git a/core-api/src/test/java/com/optimizely/ab/event/internal/EventFactoryTest.java b/core-api/src/test/java/com/optimizely/ab/event/internal/EventFactoryTest.java index f4be1b965..acb0cc5a4 100644 --- a/core-api/src/test/java/com/optimizely/ab/event/internal/EventFactoryTest.java +++ b/core-api/src/test/java/com/optimizely/ab/event/internal/EventFactoryTest.java @@ -103,7 +103,7 @@ public void createImpressionEventPassingUserAgentAttribute() throws Exception { Map attributeMap = new HashMap(); attributeMap.put(attribute.getKey(), "value"); attributeMap.put(ControlAttribute.USER_AGENT_ATTRIBUTE.toString(), "Chrome"); - DecisionMetadata metadata = new DecisionMetadata(activatedExperiment.getKey(), activatedExperiment.getKey(), ruleType, "variationKey"); + DecisionMetadata metadata = new DecisionMetadata(activatedExperiment.getKey(), activatedExperiment.getKey(), ruleType, "variationKey", true); Decision expectedDecision = new Decision.Builder() .setCampaignId(activatedExperiment.getLayerId()) .setExperimentId(activatedExperiment.getId()) @@ -1062,7 +1062,8 @@ public static LogEvent createImpressionEvent(ProjectConfig projectConfig, userId, attributes, activatedExperiment.getKey(), - "experiment"); + "experiment", + true); return EventFactory.createLogEvent(userEvent); diff --git a/core-api/src/test/java/com/optimizely/ab/event/internal/UserEventFactoryTest.java b/core-api/src/test/java/com/optimizely/ab/event/internal/UserEventFactoryTest.java index 87b667658..a7739bb73 100644 --- a/core-api/src/test/java/com/optimizely/ab/event/internal/UserEventFactoryTest.java +++ b/core-api/src/test/java/com/optimizely/ab/event/internal/UserEventFactoryTest.java @@ -67,7 +67,7 @@ public class UserEventFactoryTest { public void setUp() { experiment = new Experiment(EXPERIMENT_ID, EXPERIMENT_KEY, LAYER_ID); variation = new Variation(VARIATION_ID, VARIATION_KEY); - decisionMetadata = new DecisionMetadata("", EXPERIMENT_KEY, "experiment", VARIATION_KEY); + decisionMetadata = new DecisionMetadata("", EXPERIMENT_KEY, "experiment", VARIATION_KEY, true); } @Test @@ -80,7 +80,8 @@ public void createImpressionEventNull() { USER_ID, ATTRIBUTES, EXPERIMENT_KEY, - "rollout" + "rollout", + false ); assertNull(actual); } @@ -94,7 +95,8 @@ public void createImpressionEvent() { USER_ID, ATTRIBUTES, "", - "experiment" + "experiment", + true ); assertTrue(actual.getTimestamp() > 0);