From 40a144642e84a55d658c515ceb5d5911e6a40ead Mon Sep 17 00:00:00 2001 From: wadii Date: Fri, 8 May 2026 14:36:11 +0200 Subject: [PATCH] fix: handles integer foreign-key priority --- .../models/features/FeatureSegmentModel.java | 9 +++ .../models/FeatureSegmentModelTest.java | 58 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/test/java/com/flagsmith/flagengine/models/FeatureSegmentModelTest.java diff --git a/src/main/java/com/flagsmith/models/features/FeatureSegmentModel.java b/src/main/java/com/flagsmith/models/features/FeatureSegmentModel.java index 619b639f..b99b9b6b 100644 --- a/src/main/java/com/flagsmith/models/features/FeatureSegmentModel.java +++ b/src/main/java/com/flagsmith/models/features/FeatureSegmentModel.java @@ -6,4 +6,13 @@ @Data public class FeatureSegmentModel extends BaseModel { private Integer priority; + + public FeatureSegmentModel() { + } + + // Tolerates the integer foreign-key shape emitted by self-hosted Core/EE + // /api/v1/identities/ — Edge emits {"priority": } instead. + public FeatureSegmentModel(Integer priority) { + this.priority = priority; + } } \ No newline at end of file diff --git a/src/test/java/com/flagsmith/flagengine/models/FeatureSegmentModelTest.java b/src/test/java/com/flagsmith/flagengine/models/FeatureSegmentModelTest.java new file mode 100644 index 00000000..8845c7a0 --- /dev/null +++ b/src/test/java/com/flagsmith/flagengine/models/FeatureSegmentModelTest.java @@ -0,0 +1,58 @@ +package com.flagsmith.flagengine.models; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.flagsmith.MapperFactory; +import com.flagsmith.models.features.FeatureStateModel; +import org.junit.jupiter.api.Test; + +public class FeatureSegmentModelTest { + + @Test + public void deserializesFeatureSegmentAsIntegerForeignKey() throws JsonProcessingException { + String json = "{" + + "\"feature\": {\"id\": 1, \"name\": \"my_feature\", \"type\": \"STANDARD\"}," + + "\"enabled\": true," + + "\"feature_state_value\": \"foo\"," + + "\"feature_segment\": 321" + + "}"; + + FeatureStateModel model = + MapperFactory.getMapper().readValue(json, FeatureStateModel.class); + + assertThat(model.getFeatureSegment()).isNotNull(); + assertThat(model.getFeatureSegment().getPriority()).isEqualTo(321); + } + + @Test + public void deserializesFeatureSegmentAsEngineObject() throws JsonProcessingException { + String json = "{" + + "\"feature\": {\"id\": 1, \"name\": \"my_feature\", \"type\": \"STANDARD\"}," + + "\"enabled\": true," + + "\"feature_state_value\": \"foo\"," + + "\"feature_segment\": {\"priority\": 5}" + + "}"; + + FeatureStateModel model = + MapperFactory.getMapper().readValue(json, FeatureStateModel.class); + + assertThat(model.getFeatureSegment()).isNotNull(); + assertThat(model.getFeatureSegment().getPriority()).isEqualTo(5); + } + + @Test + public void deserializesNullFeatureSegment() throws JsonProcessingException { + String json = "{" + + "\"feature\": {\"id\": 1, \"name\": \"my_feature\", \"type\": \"STANDARD\"}," + + "\"enabled\": true," + + "\"feature_state_value\": \"foo\"," + + "\"feature_segment\": null" + + "}"; + + FeatureStateModel model = + MapperFactory.getMapper().readValue(json, FeatureStateModel.class); + + assertThat(model.getFeatureSegment()).isNull(); + } +}