diff --git a/src/main/java/io/getstream/chat/java/models/Message.java b/src/main/java/io/getstream/chat/java/models/Message.java index 3d10d71ea..3dbadd3fe 100644 --- a/src/main/java/io/getstream/chat/java/models/Message.java +++ b/src/main/java/io/getstream/chat/java/models/Message.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.*; import io.getstream.chat.java.exceptions.StreamException; +import io.getstream.chat.java.models.Channel.ChannelMember; import io.getstream.chat.java.models.Flag.FlagCreateRequestData.FlagCreateRequest; import io.getstream.chat.java.models.Flag.FlagDeleteRequestData.FlagDeleteRequest; import io.getstream.chat.java.models.Flag.FlagMessageQueryRequestData.FlagMessageQueryRequest; @@ -172,6 +173,10 @@ public class Message { @JsonProperty("shared_location") private SharedLocation sharedLocation; + @Nullable + @JsonProperty("member") + private ChannelMember member; + @NotNull @JsonIgnore private Map additionalFields = new HashMap<>(); @JsonAnyGetter diff --git a/src/test/java/io/getstream/chat/java/ChannelMemberRoleMessageTest.java b/src/test/java/io/getstream/chat/java/ChannelMemberRoleMessageTest.java new file mode 100644 index 000000000..fb01d853d --- /dev/null +++ b/src/test/java/io/getstream/chat/java/ChannelMemberRoleMessageTest.java @@ -0,0 +1,99 @@ +package io.getstream.chat.java; + +import io.getstream.chat.java.models.Channel; +import io.getstream.chat.java.models.Channel.*; +import io.getstream.chat.java.models.Message; +import io.getstream.chat.java.models.Message.MessageRequestObject; +import io.getstream.chat.java.models.User.UserRequestObject; +import java.util.List; +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 ChannelMemberRoleMessageTest extends BasicTest { + + @DisplayName("Messages include channel member role") + @Test + void whenSendingMessages_thenMemberRoleIsIncluded() { + String customRole = "custom_role"; + + UserRequestObject userWithCustomRole = testUsersRequestObjects.get(0); + UserRequestObject userWithDefaultRole = testUsersRequestObjects.get(1); + + var channelResp = + Assertions.assertDoesNotThrow( + () -> + Channel.getOrCreate("team", RandomStringUtils.randomAlphabetic(12)) + .data( + ChannelRequestObject.builder() + .createdBy(testUserRequestObject) + .member( + ChannelMemberRequestObject.builder() + .user(userWithCustomRole) + .channelRole(customRole) + .build()) + .member( + ChannelMemberRequestObject.builder() + .user(userWithDefaultRole) + .build()) + .build()) + .request()); + var channel = channelResp.getChannel(); + + Message messageWithRole = + Assertions.assertDoesNotThrow( + () -> + Message.send(channel.getType(), channel.getId()) + .message( + MessageRequestObject.builder() + .text("Message from user with role") + .userId(userWithCustomRole.getId()) + .build()) + .request()) + .getMessage(); + + Message messageWithoutRole = + Assertions.assertDoesNotThrow( + () -> + Message.send(channel.getType(), channel.getId()) + .message( + MessageRequestObject.builder() + .text("Message from user without role") + .userId(userWithDefaultRole.getId()) + .build()) + .request()) + .getMessage(); + + Assertions.assertNotNull(messageWithRole.getMember()); + Assertions.assertEquals(customRole, messageWithRole.getMember().getChannelRole()); + + Assertions.assertNotNull(messageWithoutRole.getMember()); + Assertions.assertEquals("channel_member", messageWithoutRole.getMember().getChannelRole()); + + var channelState = + Assertions.assertDoesNotThrow( + () -> Channel.getOrCreate(channel.getType(), channel.getId()).state(true).request()); + + List messages = channelState.getMessages(); + Assertions.assertNotNull(messages); + Message storedWithRole = + messages.stream() + .filter(m -> m.getId().equals(messageWithRole.getId())) + .findFirst() + .orElse(null); + Message storedWithoutRole = + messages.stream() + .filter(m -> m.getId().equals(messageWithoutRole.getId())) + .findFirst() + .orElse(null); + + Assertions.assertNotNull(storedWithRole); + Assertions.assertNotNull(storedWithRole.getMember()); + Assertions.assertEquals(customRole, storedWithRole.getMember().getChannelRole()); + + Assertions.assertNotNull(storedWithoutRole); + Assertions.assertNotNull(storedWithoutRole.getMember()); + Assertions.assertEquals("channel_member", storedWithoutRole.getMember().getChannelRole()); + } +}