Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions DOCS.md
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,19 @@ Channel.getOrCreate("messaging", "red-general")
.request();
```

Create a channel with filter tags

```java
Channel.getOrCreate("messaging", "support-channel")
.data(
ChannelRequestObject.builder()
.filterTag("important")
.filterTag("urgent")
.createdBy(UserRequestObject.builder().id("myuserid").build())
.build())
.request();
```

**Get or create channel (type)**

```java
Expand Down Expand Up @@ -486,6 +499,12 @@ Remove overrides and go back to default settings
Channel.partialUpdate(type, id).setValue("config_overrides", Collections.EMPTY_MAP).request();
```

Set filter tags

```java
Channel.partialUpdate(type, id).setValue("filter_tags", List.of("tag1", "tag2")).request();
```

**Update channel**
Full update (overwrite)

Expand Down Expand Up @@ -539,6 +558,16 @@ Channel.update(type, id).addModerator("thierry").addModerator("josh").request();
Channel.update(type, id).demoteModerator("tommaso").request();
```

Add/remove filter tags

```java
// Add filter tags to a channel
Channel.update(type, id).addFilterTag("important").addFilterTag("urgent").request();

// Remove filter tags from a channel
Channel.update(type, id).removeFilterTag("urgent").request();
```

Inviting users

```java
Expand Down
23 changes: 23 additions & 0 deletions src/main/java/io/getstream/chat/java/models/Channel.java
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,10 @@ public class Channel {
@JsonProperty("truncated_by")
private User truncatedBy;

@Nullable
@JsonProperty("filter_tags")
private List<String> filterTags;

@NotNull @JsonIgnore private Map<String, Object> additionalFields = new HashMap<>();

@JsonAnyGetter
Expand Down Expand Up @@ -289,6 +293,11 @@ public static class ChannelRequestObject {
@JsonProperty("config_overrides")
private ConfigOverridesRequestObject configOverrides;

@Singular
@Nullable
@JsonProperty("filter_tags")
private List<String> filterTags;

@Singular @Nullable @JsonIgnore private Map<String, Object> additionalFields;

@JsonAnyGetter
Expand All @@ -315,6 +324,7 @@ private ChannelRequestObject(
@Nullable List<ChannelMemberRequestObject> members,
@Nullable List<ChannelMemberRequestObject> invites,
@Nullable ConfigOverridesRequestObject configOverrides,
@Nullable List<String> filterTags,
Map<String, Object> additionalFields) {
this.createdBy = createdBy;
this.team = team;
Expand All @@ -324,6 +334,7 @@ private ChannelRequestObject(
this.members = members;
this.invites = invites;
this.configOverrides = configOverrides;
this.filterTags = filterTags;
this.additionalFields = new HashMap<String, Object>(additionalFields);
}
}
Expand Down Expand Up @@ -577,6 +588,18 @@ public static class ChannelUpdateRequestData {
@JsonProperty("invites")
private List<String> invites;

// Singular is required because cannot be null
@Singular
@Nullable
@JsonProperty("add_filter_tags")
private List<String> addFilterTags;

// Singular is required because cannot be null
@Singular
@Nullable
@JsonProperty("remove_filter_tags")
private List<String> removeFilterTags;

@Nullable
@JsonProperty("cooldown")
private Integer cooldown;
Expand Down
110 changes: 110 additions & 0 deletions src/test/java/io/getstream/chat/java/ChannelTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,116 @@ void whenUpdatingTeamWithPartialUpdate_thenIsUpdated() {
Assertions.assertEquals(updatedTeam, updateChannel.getTeam());
}

@DisplayName("Can add filter tags to a channel")
@Test
void whenAddingFilterTags_thenHasFilterTags() {
// Create a fresh channel to not modify testChannel
ChannelGetResponse channelGetResponse =
Assertions.assertDoesNotThrow(() -> createRandomChannel());
Channel channel = channelGetResponse.getChannel();

// Add filter tags
ChannelUpdateResponse channelUpdateResponse =
Assertions.assertDoesNotThrow(
() ->
Channel.update(channel.getType(), channel.getId())
.user(testUserRequestObject)
.addFilterTag("tag1")
.addFilterTag("tag2")
.request());

Channel updatedChannel = channelUpdateResponse.getChannel();
Assertions.assertNotNull(updatedChannel.getFilterTags());
Assertions.assertEquals(2, updatedChannel.getFilterTags().size());
Assertions.assertTrue(updatedChannel.getFilterTags().contains("tag1"));
Assertions.assertTrue(updatedChannel.getFilterTags().contains("tag2"));
}

@DisplayName("Can remove filter tags from a channel")
@Test
void whenRemovingFilterTags_thenFilterTagsRemoved() {
// Create a channel and add filter tags via update
ChannelGetResponse channelGetResponse =
Assertions.assertDoesNotThrow(() -> createRandomChannel());
Channel channel = channelGetResponse.getChannel();

// First add filter tags using update
ChannelUpdateResponse addResponse =
Assertions.assertDoesNotThrow(
() ->
Channel.update(channel.getType(), channel.getId())
.user(testUserRequestObject)
.addFilterTag("tag1")
.addFilterTag("tag2")
.addFilterTag("tag3")
.request());

Channel channelWithTags = addResponse.getChannel();
Assertions.assertNotNull(channelWithTags.getFilterTags());
Assertions.assertEquals(3, channelWithTags.getFilterTags().size());

// Now remove some filter tags
ChannelUpdateResponse removeResponse =
Assertions.assertDoesNotThrow(
() ->
Channel.update(channel.getType(), channel.getId())
.user(testUserRequestObject)
.removeFilterTag("tag1")
.removeFilterTag("tag2")
.request());

Channel updatedChannel = removeResponse.getChannel();
Assertions.assertNotNull(updatedChannel.getFilterTags());
Assertions.assertEquals(1, updatedChannel.getFilterTags().size());
Assertions.assertTrue(updatedChannel.getFilterTags().contains("tag3"));
}

@DisplayName("Can create channel with filter tags")
@Test
void whenCreatingChannelWithFilterTags_thenHasFilterTags() {
var channelReq =
ChannelRequestObject.builder()
.createdBy(testUserRequestObject)
.members(buildChannelMembersList())
.filterTag("important")
.filterTag("urgent")
.build();
var channelType = "messaging";
var channelId = RandomStringUtils.randomAlphabetic(12);

ChannelGetResponse channelGetResponse =
Assertions.assertDoesNotThrow(
() -> Channel.getOrCreate(channelType, channelId).data(channelReq).request());

Channel channel = channelGetResponse.getChannel();
Assertions.assertNotNull(channel.getFilterTags());
Assertions.assertEquals(2, channel.getFilterTags().size());
Assertions.assertTrue(channel.getFilterTags().contains("important"));
Assertions.assertTrue(channel.getFilterTags().contains("urgent"));
}

@DisplayName("Can set filter tags using partial update")
@Test
void whenSettingFilterTagsWithPartialUpdate_thenFilterTagsSet() {
// Create a fresh channel
Channel channel = Assertions.assertDoesNotThrow(() -> createRandomChannel()).getChannel();

// Set filter tags using partial update
Channel updatedChannel =
Assertions.assertDoesNotThrow(
() ->
Channel.partialUpdate(channel.getType(), channel.getId())
.setValue("filter_tags", List.of("partial1", "partial2"))
.user(testUserRequestObject)
.request()
.getChannel());

Assertions.assertNotNull(updatedChannel.getFilterTags());
Assertions.assertEquals(2, updatedChannel.getFilterTags().size());
Assertions.assertTrue(updatedChannel.getFilterTags().contains("partial1"));
Assertions.assertTrue(updatedChannel.getFilterTags().contains("partial2"));
}

@DisplayName("Can assign roles")
@Test
void whenAssigningRole_throwsNoError() {
Expand Down