Skip to content

Commit d8f4e6b

Browse files
[CHA-2354] Add ParsedPredefinedFilterResponse to ChannelListResponse
Add class and response field for the new `predefined_filter` property returned in QueryChannels responses when a predefined filter is used. - Added ParsedPredefinedFilterResponse static class - Updated ChannelListResponse to include predefinedFilter field - Added unit tests for JSON deserialization Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 2dc87bc commit d8f4e6b

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

src/main/java/io/getstream/chat/java/models/Channel.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1394,13 +1394,33 @@ public static class ChannelDeleteManyResponse extends StreamResponseObject {
13941394
private String taskId;
13951395
}
13961396

1397+
@Data
1398+
@NoArgsConstructor
1399+
public static class ParsedPredefinedFilterResponse {
1400+
@Nullable
1401+
@JsonProperty("name")
1402+
private String name;
1403+
1404+
@Nullable
1405+
@JsonProperty("filter")
1406+
private Map<String, Object> filter;
1407+
1408+
@Nullable
1409+
@JsonProperty("sort")
1410+
private List<Sort> sort;
1411+
}
1412+
13971413
@Data
13981414
@NoArgsConstructor
13991415
@EqualsAndHashCode(callSuper = true)
14001416
public static class ChannelListResponse extends StreamResponseObject {
14011417
@Nullable
14021418
@JsonProperty("channels")
14031419
private List<ChannelGetResponse> channels;
1420+
1421+
@Nullable
1422+
@JsonProperty("predefined_filter")
1423+
private ParsedPredefinedFilterResponse predefinedFilter;
14041424
}
14051425

14061426
@Data
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package io.getstream.chat.java;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import io.getstream.chat.java.models.Channel.ChannelListResponse;
5+
import io.getstream.chat.java.models.Channel.ParsedPredefinedFilterResponse;
6+
import org.junit.jupiter.api.Assertions;
7+
import org.junit.jupiter.api.DisplayName;
8+
import org.junit.jupiter.api.Test;
9+
10+
public class ParsedPredefinedFilterResponseTest {
11+
12+
private static final ObjectMapper objectMapper = new ObjectMapper();
13+
14+
@DisplayName("Can deserialize ParsedPredefinedFilterResponse from JSON")
15+
@Test
16+
void whenDeserializingPredefinedFilterResponse_thenCorrectlyParsed() throws Exception {
17+
String json = """
18+
{
19+
"channels": [],
20+
"predefined_filter": {
21+
"name": "user_messaging",
22+
"filter": {"type": "messaging", "members": {"$in": ["user123"]}},
23+
"sort": [{"field": "last_message_at", "direction": -1}]
24+
},
25+
"duration": "0.01s"
26+
}
27+
""";
28+
29+
ChannelListResponse response = objectMapper.readValue(json, ChannelListResponse.class);
30+
31+
Assertions.assertNotNull(response.getPredefinedFilter());
32+
Assertions.assertEquals("user_messaging", response.getPredefinedFilter().getName());
33+
Assertions.assertNotNull(response.getPredefinedFilter().getFilter());
34+
Assertions.assertEquals("messaging", response.getPredefinedFilter().getFilter().get("type"));
35+
Assertions.assertNotNull(response.getPredefinedFilter().getSort());
36+
Assertions.assertEquals(1, response.getPredefinedFilter().getSort().size());
37+
Assertions.assertEquals("last_message_at", response.getPredefinedFilter().getSort().get(0).getField());
38+
}
39+
40+
@DisplayName("Can deserialize response without predefined_filter")
41+
@Test
42+
void whenDeserializingResponseWithoutPredefinedFilter_thenNullField() throws Exception {
43+
String json = """
44+
{
45+
"channels": [],
46+
"duration": "0.01s"
47+
}
48+
""";
49+
50+
ChannelListResponse response = objectMapper.readValue(json, ChannelListResponse.class);
51+
52+
Assertions.assertNull(response.getPredefinedFilter());
53+
}
54+
55+
@DisplayName("Can deserialize predefined_filter without sort")
56+
@Test
57+
void whenDeserializingPredefinedFilterWithoutSort_thenSortIsNull() throws Exception {
58+
String json = """
59+
{
60+
"channels": [],
61+
"predefined_filter": {
62+
"name": "simple_filter",
63+
"filter": {"type": "messaging"}
64+
},
65+
"duration": "0.01s"
66+
}
67+
""";
68+
69+
ChannelListResponse response = objectMapper.readValue(json, ChannelListResponse.class);
70+
71+
Assertions.assertNotNull(response.getPredefinedFilter());
72+
Assertions.assertEquals("simple_filter", response.getPredefinedFilter().getName());
73+
Assertions.assertNull(response.getPredefinedFilter().getSort());
74+
}
75+
}

0 commit comments

Comments
 (0)