Skip to content

Commit ccf7dd2

Browse files
committed
improve logic, test coverage
1 parent 96d6ca2 commit ccf7dd2

File tree

2 files changed

+60
-12
lines changed

2 files changed

+60
-12
lines changed

src/main/java/com/flagsmith/mappers/EngineMappers.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.flagsmith.models.FeatureMetadata;
1919
import com.flagsmith.models.Flag;
2020
import com.flagsmith.models.SegmentMetadata;
21+
import com.flagsmith.models.TraitModel;
2122
import com.flagsmith.models.environments.EnvironmentModel;
2223
import com.flagsmith.models.features.FeatureModel;
2324
import com.flagsmith.models.features.FeatureSegmentModel;
@@ -28,6 +29,7 @@
2829
import com.flagsmith.models.segments.SegmentConditionModel;
2930
import com.flagsmith.models.segments.SegmentModel;
3031
import com.flagsmith.models.segments.SegmentRuleModel;
32+
import com.flagsmith.utils.ModelUtils;
3133
import java.util.ArrayList;
3234
import java.util.HashMap;
3335
import java.util.List;
@@ -79,22 +81,16 @@ public static EvaluationContext mapContextAndIdentityDataToContext(
7981
// Create identity context
8082
IdentityContext identityContext = new IdentityContext()
8183
.withIdentifier(identifier)
82-
.withKey(context.getEnvironment().getKey() + "_" + identifier)
83-
.withTraits(new Traits());
84+
.withKey(context.getEnvironment().getKey() + "_" + identifier);
8485

8586
// Map traits if provided
8687
if (traits != null && !traits.isEmpty()) {
87-
for (Map.Entry<String, Object> entry : traits.entrySet()) {
88-
Object traitValue = entry.getValue();
89-
// Handle TraitConfig-like objects (maps with "value" key)
90-
if (traitValue instanceof Map) {
91-
Map<?, ?> traitMap = (Map<?, ?>) traitValue;
92-
if (traitMap.containsKey("value")) {
93-
traitValue = traitMap.get("value");
94-
}
95-
}
96-
identityContext.getTraits().setAdditionalProperty(entry.getKey(), traitValue);
88+
Traits identityTraits = new Traits();
89+
for (TraitModel traitModel : ModelUtils.getTraitModelsFromTraitMap(traits)) {
90+
identityTraits.setAdditionalProperty(
91+
traitModel.getTraitKey(), traitModel.getTraitValue());
9792
}
93+
identityContext.setTraits(identityTraits);
9894
}
9995

10096
// Create new evaluation context with identity
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.flagsmith.flagengine.unit.mappers;
2+
3+
import com.flagsmith.mappers.EngineMappers;
4+
import com.flagsmith.models.TraitConfig;
5+
6+
import static org.junit.jupiter.api.Assertions.assertEquals;
7+
8+
import java.util.Map;
9+
import java.util.stream.Stream;
10+
11+
import org.junit.jupiter.params.ParameterizedTest;
12+
import org.junit.jupiter.params.provider.Arguments;
13+
import org.junit.jupiter.params.provider.MethodSource;
14+
15+
import com.flagsmith.FlagsmithTestHelper;
16+
import com.flagsmith.flagengine.EvaluationContext;
17+
import com.flagsmith.flagengine.Traits;
18+
19+
public class EngineMappersTest {
20+
private static Stream<Arguments> expectedTraitMaps() {
21+
return Stream.of(
22+
Arguments.argumentSet(
23+
"no transiency data",
24+
Map.of("test", 1)
25+
),
26+
Arguments.argumentSet(
27+
"with transiency data",
28+
Map.of("test", TraitConfig.fromObject(1))
29+
)
30+
);
31+
}
32+
33+
@ParameterizedTest
34+
@MethodSource("expectedTraitMaps")
35+
public void testMapContextAndIdentityDataToContext_returnsExpectedContext(
36+
Map<String, Object> expectedTraitMap
37+
) {
38+
// Arrange
39+
final String identifier = "test-identifier";
40+
final EvaluationContext context = FlagsmithTestHelper.evaluationContext();
41+
final Traits expectedTraits = new Traits().withAdditionalProperty("test", 1);
42+
43+
// Act
44+
final EvaluationContext mappedContext = EngineMappers.mapContextAndIdentityDataToContext(
45+
context, identifier, expectedTraitMap);
46+
47+
// Assert
48+
assertEquals(
49+
expectedTraits.getAdditionalProperties(),
50+
mappedContext.getIdentity().getTraits().getAdditionalProperties());
51+
}
52+
}

0 commit comments

Comments
 (0)