From c2081c4d0949f0e6ff4507a5b9d2fc56600b1be2 Mon Sep 17 00:00:00 2001 From: javierdfm Date: Mon, 18 Aug 2025 16:05:24 +0200 Subject: [PATCH 1/7] [CHA-1155] Add channel message count --- src/main/java/io/getstream/chat/java/models/Channel.java | 8 ++++++++ 1 file changed, 8 insertions(+) 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..bd0b19f60 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("messages_count") + private Integer messagesCount; + @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 From d42b1c0dcd6e3956d7d6cc9a65fd20466389d3f9 Mon Sep 17 00:00:00 2001 From: javierdfm Date: Mon, 25 Aug 2025 12:06:25 +0200 Subject: [PATCH 2/7] Added file with tests --- .../getstream/chat/java/MessageCountTest.java | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/test/java/io/getstream/chat/java/MessageCountTest.java 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..eed627828 --- /dev/null +++ b/src/test/java/io/getstream/chat/java/MessageCountTest.java @@ -0,0 +1,96 @@ +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 absent when feature disabled") + @Test + void whenCountMessagesDisabled_thenNoMessagesCount() { + // Create a fresh channel with default configuration (count_messages disabled 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()); + + // The messages_count field should be null / absent when the feature is disabled + Assertions.assertNull( + refreshed.getChannel().getMessagesCount(), + "messages_count should be null when count_messages is disabled"); + } + + @DisplayName("Message count is returned when feature enabled") + @Test + void whenCountMessagesEnabled_thenMessagesCountPresent() { + // 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(); + + // Enable count_messages via partial update (config_overrides) + Map overrides = new HashMap<>(); + overrides.put("count_messages", true); + Assertions.assertDoesNotThrow( + () -> Channel.partialUpdate(type, id).setValue("config_overrides", overrides).request()); + + // Post a message so the channel has activity to count + 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().getMessagesCount(); + Assertions.assertNotNull( + messagesCount, "messages_count should be present when count_messages is enabled"); + Assertions.assertTrue( + messagesCount >= 1, + "messages_count should be at least 1 after sending a message when the feature is enabled"); + } +} From 944d33c05127bd9361f95bfb398a0cb3cd51dcf1 Mon Sep 17 00:00:00 2001 From: javierdfm Date: Mon, 25 Aug 2025 16:47:55 +0200 Subject: [PATCH 3/7] Removed tests --- .../getstream/chat/java/MessageCountTest.java | 96 ------------------- 1 file changed, 96 deletions(-) delete mode 100644 src/test/java/io/getstream/chat/java/MessageCountTest.java diff --git a/src/test/java/io/getstream/chat/java/MessageCountTest.java b/src/test/java/io/getstream/chat/java/MessageCountTest.java deleted file mode 100644 index eed627828..000000000 --- a/src/test/java/io/getstream/chat/java/MessageCountTest.java +++ /dev/null @@ -1,96 +0,0 @@ -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 absent when feature disabled") - @Test - void whenCountMessagesDisabled_thenNoMessagesCount() { - // Create a fresh channel with default configuration (count_messages disabled 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()); - - // The messages_count field should be null / absent when the feature is disabled - Assertions.assertNull( - refreshed.getChannel().getMessagesCount(), - "messages_count should be null when count_messages is disabled"); - } - - @DisplayName("Message count is returned when feature enabled") - @Test - void whenCountMessagesEnabled_thenMessagesCountPresent() { - // 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(); - - // Enable count_messages via partial update (config_overrides) - Map overrides = new HashMap<>(); - overrides.put("count_messages", true); - Assertions.assertDoesNotThrow( - () -> Channel.partialUpdate(type, id).setValue("config_overrides", overrides).request()); - - // Post a message so the channel has activity to count - 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().getMessagesCount(); - Assertions.assertNotNull( - messagesCount, "messages_count should be present when count_messages is enabled"); - Assertions.assertTrue( - messagesCount >= 1, - "messages_count should be at least 1 after sending a message when the feature is enabled"); - } -} From c166df3ee5bc08231d812482532a25f497e195e6 Mon Sep 17 00:00:00 2001 From: javierdfm Date: Mon, 25 Aug 2025 17:18:45 +0200 Subject: [PATCH 4/7] Added tests again --- .../getstream/chat/java/MessageCountTest.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 src/test/java/io/getstream/chat/java/MessageCountTest.java 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..0004764a9 --- /dev/null +++ b/src/test/java/io/getstream/chat/java/MessageCountTest.java @@ -0,0 +1,95 @@ +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()); + + System.out.printf("%s", refreshed.getChannel()); + + 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(); + System.out.printf("[count_enabled] Channel CID: %s%n", channelGetResponse.getChannel().getCId()); + + // 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"); + } + +} From 69b07350acf33a5eec523313d93838cb40a7057e Mon Sep 17 00:00:00 2001 From: javierdfm Date: Mon, 25 Aug 2025 17:19:09 +0200 Subject: [PATCH 5/7] Updated property name --- src/main/java/io/getstream/chat/java/models/Channel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 bd0b19f60..b1bc35f2e 100644 --- a/src/main/java/io/getstream/chat/java/models/Channel.java +++ b/src/main/java/io/getstream/chat/java/models/Channel.java @@ -81,8 +81,8 @@ public class Channel { private List messages; @Nullable - @JsonProperty("messages_count") - private Integer messagesCount; + @JsonProperty("message_count") + private Integer messageCount; @Nullable @JsonProperty("read") From b7b1b293d3cf719f39a7ebdbd5f56667b485a9f7 Mon Sep 17 00:00:00 2001 From: javierdfm Date: Mon, 25 Aug 2025 17:21:54 +0200 Subject: [PATCH 6/7] Removed debug logging --- src/test/java/io/getstream/chat/java/MessageCountTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/test/java/io/getstream/chat/java/MessageCountTest.java b/src/test/java/io/getstream/chat/java/MessageCountTest.java index 0004764a9..17cfc9f99 100644 --- a/src/test/java/io/getstream/chat/java/MessageCountTest.java +++ b/src/test/java/io/getstream/chat/java/MessageCountTest.java @@ -44,8 +44,6 @@ void whenCountMessagesEnabled_thenMessagesCount() { ChannelGetResponse refreshed = Assertions.assertDoesNotThrow(() -> Channel.getOrCreate(type, id).request()); - System.out.printf("%s", refreshed.getChannel()); - Assertions.assertTrue( refreshed.getChannel().getMessageCount() == 1, "messages_count should be 1 when count_messages is enabled"); @@ -68,7 +66,6 @@ void whenCountMessagesDisabled_thenNoMessageCountPresent() { String type = channelGetResponse.getChannel().getType(); String id = channelGetResponse.getChannel().getId(); - System.out.printf("[count_enabled] Channel CID: %s%n", channelGetResponse.getChannel().getCId()); // Disable count_messages via partial update (config_overrides) Map overrides = new HashMap<>(); From fdca23dd77985fe5f3c9cbe4a55c036ef9465650 Mon Sep 17 00:00:00 2001 From: javierdfm Date: Mon, 25 Aug 2025 17:25:47 +0200 Subject: [PATCH 7/7] Format --- src/test/java/io/getstream/chat/java/MessageCountTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/java/io/getstream/chat/java/MessageCountTest.java b/src/test/java/io/getstream/chat/java/MessageCountTest.java index 17cfc9f99..132cf564d 100644 --- a/src/test/java/io/getstream/chat/java/MessageCountTest.java +++ b/src/test/java/io/getstream/chat/java/MessageCountTest.java @@ -73,7 +73,6 @@ void whenCountMessagesDisabled_thenNoMessageCountPresent() { Assertions.assertDoesNotThrow( () -> Channel.partialUpdate(type, id).setValue("config_overrides", overrides).request()); - MessageRequestObject messageRequest = MessageRequestObject.builder() .text("test message") @@ -86,7 +85,7 @@ void whenCountMessagesDisabled_thenNoMessageCountPresent() { 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"); + Assertions.assertNull( + messagesCount, "messages_count should not be present when count_messages is disabled"); } - }