|
4 | 4 | import com.launchdarkly.sdk.EvaluationReason.ErrorKind; |
5 | 5 | import com.launchdarkly.sdk.LDValue; |
6 | 6 | import com.launchdarkly.sdk.LDValueType; |
| 7 | +import com.launchdarkly.sdk.json.JsonSerialization; |
7 | 8 | import com.launchdarkly.sdk.server.DataModel.FeatureFlag; |
8 | 9 | import com.launchdarkly.sdk.server.subsystems.DataStoreTypes.DataKind; |
9 | 10 | import com.launchdarkly.sdk.server.subsystems.DataStoreTypes.ItemDescriptor; |
@@ -154,6 +155,24 @@ public void errorResultOfOverrideFlagKeepsMarkingWithCallerDefault() { |
154 | 155 | assertEquals(EvaluationReason.error(ErrorKind.MALFORMED_FLAG).withOverrideAffected(true), result.getResult().getReason()); |
155 | 156 | } |
156 | 157 |
|
| 158 | + @Test |
| 159 | + public void allFlagsStateMarksTheExceptionResultOfAnOverrideFlagAndTurnsOffItsTracking() { |
| 160 | + FeatureFlag marked = flagWithPrerequisite("marked").markedAsOverride(); |
| 161 | + FeatureFlag plain = flagWithPrerequisite("plain"); |
| 162 | + FeatureFlagsState state = evaluatorOver(storeFailingOn("prereq", marked, plain)) |
| 163 | + .allFlagsState(BASE_USER, FlagsStateOption.WITH_REASONS); |
| 164 | + LDValue flagsState = LDValue.parse(JsonSerialization.serialize(state)).get("$flagsState"); |
| 165 | + |
| 166 | + assertEquals(EvaluationReason.ErrorKind.EXCEPTION, state.getFlagReason("marked").getErrorKind()); |
| 167 | + assertTrue(state.getFlagReason("marked").isOverrideAffected()); |
| 168 | + assertTrue(flagsState.get("marked").get("trackEvents").isNull()); |
| 169 | + |
| 170 | + // A flag that did not come from the override store keeps its unmarked reason and tracking. |
| 171 | + assertEquals(EvaluationReason.ErrorKind.EXCEPTION, state.getFlagReason("plain").getErrorKind()); |
| 172 | + assertFalse(state.getFlagReason("plain").isOverrideAffected()); |
| 173 | + assertEquals(LDValue.of(true), flagsState.get("plain").get("trackEvents")); |
| 174 | + } |
| 175 | + |
157 | 176 | @Test |
158 | 177 | public void allFlagsStateKeepsMarkedReason() { |
159 | 178 | FeatureFlag marked = flagBuilder("marked").on(false).offVariation(0).variations(LDValue.of("x")).build() |
|
0 commit comments