diff --git a/src/main/java/io/getstream/chat/java/models/Channel.java b/src/main/java/io/getstream/chat/java/models/Channel.java index 4a796a2e5..b1bc35f2e 100644 --- a/src/main/java/io/getstream/chat/java/models/Channel.java +++ b/src/main/java/io/getstream/chat/java/models/Channel.java @@ -80,6 +80,10 @@ public class Channel { @JsonProperty("messages") private List messages; + @Nullable + @JsonProperty("message_count") + private Integer messageCount; + @Nullable @JsonProperty("read") private List read; @@ -427,6 +431,10 @@ public static class ConfigOverridesRequestObject { @Nullable @JsonProperty("shared_locations") private Boolean sharedLocations; + + @Nullable + @JsonProperty("count_messages") + private Boolean countMessages; } @Builder diff --git a/src/test/java/io/getstream/chat/java/MessageCountTest.java b/src/test/java/io/getstream/chat/java/MessageCountTest.java new file mode 100644 index 000000000..132cf564d --- /dev/null +++ b/src/test/java/io/getstream/chat/java/MessageCountTest.java @@ -0,0 +1,91 @@ +package io.getstream.chat.java; + +import io.getstream.chat.java.models.Channel; +import io.getstream.chat.java.models.Channel.ChannelGetResponse; +import io.getstream.chat.java.models.Channel.ChannelRequestObject; +import io.getstream.chat.java.models.Message; +import io.getstream.chat.java.models.Message.MessageRequestObject; +import java.util.HashMap; +import java.util.Map; +import org.apache.commons.lang3.RandomStringUtils; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +public class MessageCountTest extends BasicTest { + + @DisplayName("Message count is present when feature enabled") + @Test + void whenCountMessagesEnabled_thenMessagesCount() { + // Create a fresh channel with default configuration (count_messages enabled by default) + ChannelGetResponse channelGetResponse = + Assertions.assertDoesNotThrow( + () -> + Channel.getOrCreate("team", RandomStringUtils.randomAlphabetic(12)) + .data( + ChannelRequestObject.builder() + .createdBy(testUserRequestObject) + .members(buildChannelMembersList()) + .build()) + .request()); + + String type = channelGetResponse.getChannel().getType(); + String id = channelGetResponse.getChannel().getId(); + + // Post a message so the channel has at least one message + MessageRequestObject messageRequest = + MessageRequestObject.builder() + .text("test message") + .userId(testUserRequestObject.getId()) + .build(); + Assertions.assertDoesNotThrow(() -> Message.send(type, id).message(messageRequest).request()); + + // Retrieve the channel again to inspect server response + ChannelGetResponse refreshed = + Assertions.assertDoesNotThrow(() -> Channel.getOrCreate(type, id).request()); + + Assertions.assertTrue( + refreshed.getChannel().getMessageCount() == 1, + "messages_count should be 1 when count_messages is enabled"); + } + + @DisplayName("Message count is not returned when feature disabled") + @Test + void whenCountMessagesDisabled_thenNoMessageCountPresent() { + // Create a fresh channel first + ChannelGetResponse channelGetResponse = + Assertions.assertDoesNotThrow( + () -> + Channel.getOrCreate("team", RandomStringUtils.randomAlphabetic(12)) + .data( + ChannelRequestObject.builder() + .createdBy(testUserRequestObject) + .members(buildChannelMembersList()) + .build()) + .request()); + + String type = channelGetResponse.getChannel().getType(); + String id = channelGetResponse.getChannel().getId(); + + // Disable count_messages via partial update (config_overrides) + Map overrides = new HashMap<>(); + overrides.put("count_messages", false); + Assertions.assertDoesNotThrow( + () -> Channel.partialUpdate(type, id).setValue("config_overrides", overrides).request()); + + MessageRequestObject messageRequest = + MessageRequestObject.builder() + .text("test message") + .userId(testUserRequestObject.getId()) + .build(); + Assertions.assertDoesNotThrow(() -> Message.send(type, id).message(messageRequest).request()); + + // Retrieve the channel again + ChannelGetResponse refreshed = + Assertions.assertDoesNotThrow(() -> Channel.getOrCreate(type, id).request()); + + Integer messagesCount = refreshed.getChannel().getMessageCount(); + Assertions.assertNull( + messagesCount, "messages_count should not be present when count_messages is disabled"); + } +}