From 952be9b0370a8d8ac2c32e9443066e4b18aa96db Mon Sep 17 00:00:00 2001 From: Rory Kelly Date: Mon, 30 Mar 2026 19:00:28 +0100 Subject: [PATCH 1/2] Send `[]` when an empty user list is provided for a `usergroups.users.update` request. --- .../java/com/slack/api/methods/RequestFormBuilder.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java b/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java index 2ca47afe1..83cd09697 100644 --- a/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java +++ b/slack-api-client/src/main/java/com/slack/api/methods/RequestFormBuilder.java @@ -3086,7 +3086,12 @@ public static FormBody.Builder toForm(UsergroupsUsersUpdateRequest req) { FormBody.Builder form = new FormBody.Builder(); setIfNotNull("usergroup", req.getUsergroup(), form); if (req.getUsers() != null) { - setIfNotNull("users", req.getUsers().stream().collect(joining(",")), form); + if (!req.getUsers().isEmpty()) { + setIfNotNull("users", req.getUsers().stream().collect(joining(",")), form); + } + else { + setIfNotNull("users", "[]", form); + } } setIfNotNull("include_count", req.isIncludeCount(), form); setIfNotNull("team_id", req.getTeamId(), form); From 0a4265ca8026267e5b391aef8f2db3793d80fde4 Mon Sep 17 00:00:00 2001 From: Rory Kelly Date: Mon, 30 Mar 2026 19:02:02 +0100 Subject: [PATCH 2/2] Update relevant Java test classes. --- .../api/methods/UsergroupsTest.java | 11 ++++++ .../methods/usergroups_Test.java | 39 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/slack-api-client/src/test/java/test_locally/api/methods/UsergroupsTest.java b/slack-api-client/src/test/java/test_locally/api/methods/UsergroupsTest.java index 2baf3154e..fa0c35811 100644 --- a/slack-api-client/src/test/java/test_locally/api/methods/UsergroupsTest.java +++ b/slack-api-client/src/test/java/test_locally/api/methods/UsergroupsTest.java @@ -7,6 +7,9 @@ import org.junit.Test; import util.MockSlackApiServer; +import java.util.stream.Collectors; +import java.util.stream.Stream; + import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static util.MockSlackApi.ValidToken; @@ -44,6 +47,10 @@ public void test() throws Exception { .isOk(), is(true)); assertThat(slack.methods(ValidToken).usergroupsUsersUpdate(r -> r.usergroup("xxx")) .isOk(), is(true)); + assertThat(slack.methods(ValidToken).usergroupsUsersUpdate(r -> r.usergroup("xxx").users(Stream.of().collect(Collectors.toList()))) + .isOk(), is(true)); + assertThat(slack.methods(ValidToken).usergroupsUsersUpdate(r -> r.usergroup("xxx").users(Stream.of("user").collect(Collectors.toList()))) + .isOk(), is(true)); } @Test @@ -62,6 +69,10 @@ public void test_async() throws Exception { .get().isOk(), is(true)); assertThat(slack.methodsAsync(ValidToken).usergroupsUsersUpdate(r -> r.usergroup("xxx")) .get().isOk(), is(true)); + assertThat(slack.methodsAsync(ValidToken).usergroupsUsersUpdate(r -> r.usergroup("xxx").users(Stream.of().collect(Collectors.toList()))) + .get().isOk(), is(true)); + assertThat(slack.methodsAsync(ValidToken).usergroupsUsersUpdate(r -> r.usergroup("xxx").users(Stream.of("user").collect(Collectors.toList()))) + .get().isOk(), is(true)); } } diff --git a/slack-api-client/src/test/java/test_with_remote_apis/methods/usergroups_Test.java b/slack-api-client/src/test/java/test_with_remote_apis/methods/usergroups_Test.java index ef861178d..298cb28f4 100644 --- a/slack-api-client/src/test/java/test_with_remote_apis/methods/usergroups_Test.java +++ b/slack-api-client/src/test/java/test_with_remote_apis/methods/usergroups_Test.java @@ -2,6 +2,7 @@ import com.slack.api.Slack; import com.slack.api.methods.request.usergroups.users.UsergroupsUsersListRequest; +import com.slack.api.methods.request.usergroups.users.UsergroupsUsersUpdateRequest; import com.slack.api.methods.response.usergroups.*; import com.slack.api.methods.response.usergroups.users.UsergroupsUsersListResponse; import com.slack.api.methods.response.usergroups.users.UsergroupsUsersUpdateResponse; @@ -17,6 +18,8 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.assertThat; @@ -147,4 +150,40 @@ public void users_failure() throws Exception { assertThat(response.getError(), is("no_such_subteam")); } + @Test + public void usergroups_users_update_null_property() throws Exception { + UsergroupsCreateResponse creation = slack.methods().usergroupsCreate(r -> r + .token(userToken) + .name("usergroup-" + System.currentTimeMillis()) + .description("Something wrong")); + assertThat(creation.getError(), is(nullValue())); + final Usergroup usergroup = creation.getUsergroup(); + + UsergroupsUsersUpdateResponse response = slack.methods().usergroupsUsersUpdate( + UsergroupsUsersUpdateRequest.builder() + .token(userToken) + .usergroup(usergroup.getId()) + .build()); + assertThat(response.isOk(), is(false)); + assertThat(response.getError(), is("missing_required_argument")); + } + + @Test + public void usergroups_users_update_empty_list() throws Exception { + UsergroupsCreateResponse creation = slack.methods().usergroupsCreate(r -> r + .token(userToken) + .name("usergroup-" + System.currentTimeMillis()) + .description("Should have 0 members")); + assertThat(creation.getError(), is(nullValue())); + final Usergroup usergroup = creation.getUsergroup(); + + UsergroupsUsersUpdateResponse response = slack.methods().usergroupsUsersUpdate( + UsergroupsUsersUpdateRequest.builder() + .token(userToken) + .usergroup(usergroup.getId()) + .users(Stream.of().collect(Collectors.toList())) + .build()); + assertThat(response.getError(), is(nullValue())); + } + }