diff --git a/src/main/java/io/getstream/models/ActivitySelectorConfig.java b/src/main/java/io/getstream/models/ActivitySelectorConfig.java index ed3288db..7f2bbf3f 100644 --- a/src/main/java/io/getstream/models/ActivitySelectorConfig.java +++ b/src/main/java/io/getstream/models/ActivitySelectorConfig.java @@ -42,6 +42,10 @@ public class ActivitySelectorConfig { @JsonProperty("ranking_candidate_limit") private Integer rankingCandidateLimit; + @Nullable + @JsonProperty("time_budget_ms") + private Integer timeBudgetMs; + @Nullable @JsonProperty("sort") private List sort; diff --git a/src/main/java/io/getstream/models/ActivitySelectorConfigResponse.java b/src/main/java/io/getstream/models/ActivitySelectorConfigResponse.java index 1fbeb6e6..ec6b4072 100644 --- a/src/main/java/io/getstream/models/ActivitySelectorConfigResponse.java +++ b/src/main/java/io/getstream/models/ActivitySelectorConfigResponse.java @@ -43,6 +43,10 @@ public class ActivitySelectorConfigResponse { @JsonProperty("ranking_candidate_limit") private Integer rankingCandidateLimit; + @Nullable + @JsonProperty("time_budget_ms") + private Integer timeBudgetMs; + @Nullable @JsonProperty("sort") private List sort; diff --git a/src/main/java/io/getstream/models/GetOrCreateFeedResponse.java b/src/main/java/io/getstream/models/GetOrCreateFeedResponse.java index d94f32bd..d4a56e81 100644 --- a/src/main/java/io/getstream/models/GetOrCreateFeedResponse.java +++ b/src/main/java/io/getstream/models/GetOrCreateFeedResponse.java @@ -58,6 +58,10 @@ public class GetOrCreateFeedResponse { @JsonProperty("prev") private String prev; + @Nullable + @JsonProperty("degraded_selectors") + private List degradedSelectors; + @Nullable @JsonProperty("followers_pagination") private PagerResponse followersPagination; diff --git a/src/test/java/io/getstream/SelectorTimeBudgetTest.java b/src/test/java/io/getstream/SelectorTimeBudgetTest.java new file mode 100644 index 00000000..46df54c2 --- /dev/null +++ b/src/test/java/io/getstream/SelectorTimeBudgetTest.java @@ -0,0 +1,52 @@ +package io.getstream; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.getstream.models.ActivitySelectorConfig; +import io.getstream.models.ActivitySelectorConfigResponse; +import io.getstream.models.GetOrCreateFeedResponse; +import io.getstream.services.framework.StreamHTTPClient; +import java.util.List; +import org.junit.jupiter.api.Test; + +public class SelectorTimeBudgetTest { + + private final ObjectMapper mapper = + new StreamHTTPClient("apiKey", "012345678901234567890123456789ab").getObjectMapper(); + + @Test + void activitySelectorConfigSerializesTimeBudgetMs() throws Exception { + ActivitySelectorConfig config = + ActivitySelectorConfig.builder().type("proximity").timeBudgetMs(250).build(); + + JsonNode payload = mapper.readTree(mapper.writeValueAsString(config)); + + assertEquals("proximity", payload.get("type").asText()); + assertEquals(250, payload.get("time_budget_ms").asInt()); + } + + @Test + void activitySelectorConfigResponseReadsTimeBudgetMs() throws Exception { + ActivitySelectorConfigResponse config = + mapper.readValue( + "{\"type\":\"proximity\",\"time_budget_ms\":250}", + ActivitySelectorConfigResponse.class); + + assertEquals("proximity", config.getType()); + assertEquals(250, config.getTimeBudgetMs()); + } + + @Test + void getOrCreateFeedResponseReadsDegradedSelectors() throws Exception { + GetOrCreateFeedResponse response = + mapper.readValue("{\"degraded_selectors\":[\"proximity\"]}", GetOrCreateFeedResponse.class); + + assertEquals(List.of("proximity"), response.getDegradedSelectors()); + + GetOrCreateFeedResponse complete = mapper.readValue("{}", GetOrCreateFeedResponse.class); + assertNull(complete.getDegradedSelectors()); + } +}