From e4cc39a8e95db538ff1d79a3e8119cd4f543fa13 Mon Sep 17 00:00:00 2001 From: Lennart Kuijs Date: Thu, 27 Mar 2025 13:41:23 +0100 Subject: [PATCH 1/4] support for team based roles --- .../io/getstream/chat/java/models/User.java | 11 +++ .../java/io/getstream/chat/java/UserTest.java | 68 +++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/src/main/java/io/getstream/chat/java/models/User.java b/src/main/java/io/getstream/chat/java/models/User.java index f62bbb221..f12be03d7 100644 --- a/src/main/java/io/getstream/chat/java/models/User.java +++ b/src/main/java/io/getstream/chat/java/models/User.java @@ -59,6 +59,9 @@ public class User { @JsonProperty("teams") private List teams; + @JsonProperty("teams_role") + private Map teamsRole; + @NotNull @JsonProperty("online") private Boolean online; @@ -219,6 +222,10 @@ public static class OwnUser { @JsonProperty("role") private String role; + @Nullable + @JsonProperty("teams_role") + private Map teamsRole; + @Nullable @JsonProperty("roles") private List roles; @@ -361,6 +368,10 @@ public static class UserRequestObject { @JsonProperty("teams") private List teams; + @Nullable + @JsonProperty("teams_role") + private Map teamsRole; + @Singular @Nullable @JsonIgnore private Map additionalFields; @JsonAnyGetter diff --git a/src/test/java/io/getstream/chat/java/UserTest.java b/src/test/java/io/getstream/chat/java/UserTest.java index b158164a6..7567aa3a3 100644 --- a/src/test/java/io/getstream/chat/java/UserTest.java +++ b/src/test/java/io/getstream/chat/java/UserTest.java @@ -71,6 +71,30 @@ void whenParsingNotDefinedLanguage_thenUnknown() { Assertions.assertEquals(lang, Language.UNKNOWN); } + @DisplayName("Can create a user with team and teams_role") + @Test + void whenCreatingUserWithTeam_thenNoException() { + var id = RandomStringUtils.randomAlphabetic(10); + var team = "blue"; + var role = "admin"; + + // Create user with team and teams_role + UserUpsertResponse response = Assertions.assertDoesNotThrow( + () -> User.upsert() + .user(UserRequestObject.builder() + .id(id) + .teams(Collections.singletonList(team)) + .teamsRole(Collections.singletonMap(team, role)) + .build()) + .request()); + + // Verify the user was created with correct team and role + User createdUser = response.getUsers().get(id); + Assertions.assertNotNull(createdUser); + Assertions.assertEquals(team, createdUser.getTeams().get(0)); + Assertions.assertEquals(role, createdUser.getTeamsRole().get(team)); + } + @DisplayName("Can partial update a user") @Test void whenPartiallyUpdatingUser_thenNoException() { @@ -109,6 +133,50 @@ void whenPartiallyUpdatingUser_thenNoException() { Assertions.assertEquals(addedValue, updatedUser.getAdditionalFields().get(addedKey)); } + @DisplayName("Can partial update a user with team and teams_role") + @Test + void whenPartiallyUpdatingUserWithTeam_thenNoException() { + // First create a basic user + UserUpsertRequest usersUpsertRequest = User.upsert(); + User user = + Assertions.assertDoesNotThrow( + () -> + usersUpsertRequest + .user( + UserRequestObject.builder() + .id(RandomStringUtils.randomAlphabetic(10)) + .name("Test User") + .build()) + .request()) + .getUsers() + .values() + .iterator() + .next(); + + // Partially update the user with team and teams_role + UserPartialUpdateRequestObject userPartialUpdateRequestObject = + UserPartialUpdateRequestObject.builder() + .id(user.getId()) + .setValue("team", "blue") + .setValue("teams_role", Collections.singletonMap("blue", "admin")) + .build(); + + User updatedUser = + Assertions.assertDoesNotThrow( + () -> + User.partialUpdate() + .users(Arrays.asList(userPartialUpdateRequestObject)) + .request()) + .getUsers() + .get(user.getId()); + + // Verify the changes + Assertions.assertEquals("blue", updatedUser.getAdditionalFields().get("team")); + @SuppressWarnings("unchecked") + Map teamsRole = (Map) updatedUser.getAdditionalFields().get("teams_role"); + Assertions.assertEquals("admin", teamsRole.get("blue")); + } + @DisplayName("Can ban user") @Test void whenBanUser_thenIsBanned() { From 48f57571458539c85483bd051410dca93706320d Mon Sep 17 00:00:00 2001 From: Lennart Kuijs Date: Thu, 27 Mar 2025 13:56:43 +0100 Subject: [PATCH 2/4] removed commit linter --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 556177fc0..488193681 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,9 +16,6 @@ jobs: with: fetch-depth: 0 - - name: Commit message lint - uses: wagoid/commitlint-github-action@v4 - - name: Test env: STREAM_KEY: ${{ secrets.STREAM_KEY }} From a8993b529f9f4b323e4a79db3be287b7f8a02e66 Mon Sep 17 00:00:00 2001 From: Lennart Kuijs Date: Thu, 27 Mar 2025 14:11:46 +0100 Subject: [PATCH 3/4] fixed format_with_docker --- Dockerfile | 14 +++++++++++ Makefile | 3 ++- .../java/io/getstream/chat/java/UserTest.java | 24 +++++++++++-------- 3 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..66c4a01e1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +FROM amazoncorretto:11 + +WORKDIR /code + +# Copy the Gradle wrapper files +COPY gradlew . +COPY gradle gradle/ +COPY build.gradle . +COPY settings.gradle . + +# Make gradlew executable +RUN chmod +x gradlew + +CMD ["sh", "-c", "./gradlew :spotlessApply"] \ No newline at end of file diff --git a/Makefile b/Makefile index 36ad68153..c4d77014d 100644 --- a/Makefile +++ b/Makefile @@ -11,4 +11,5 @@ test_with_docker: docker run -t -i -w /code -v $(PWD):/code --env-file .env amazoncorretto:17 sh -c "sh ./gradlew test" format_with_docker: - docker run -t -i -w /code -v $(PWD):/code amazoncorretto:17 sh -c "sh ./gradlew :spotlessApply" + docker build -t stream-chat-java-formatter . && \ + docker run -v $(PWD):/code stream-chat-java-formatter diff --git a/src/test/java/io/getstream/chat/java/UserTest.java b/src/test/java/io/getstream/chat/java/UserTest.java index 7567aa3a3..79ebf3060 100644 --- a/src/test/java/io/getstream/chat/java/UserTest.java +++ b/src/test/java/io/getstream/chat/java/UserTest.java @@ -77,16 +77,19 @@ void whenCreatingUserWithTeam_thenNoException() { var id = RandomStringUtils.randomAlphabetic(10); var team = "blue"; var role = "admin"; - + // Create user with team and teams_role - UserUpsertResponse response = Assertions.assertDoesNotThrow( - () -> User.upsert() - .user(UserRequestObject.builder() - .id(id) - .teams(Collections.singletonList(team)) - .teamsRole(Collections.singletonMap(team, role)) - .build()) - .request()); + UserUpsertResponse response = + Assertions.assertDoesNotThrow( + () -> + User.upsert() + .user( + UserRequestObject.builder() + .id(id) + .teams(Collections.singletonList(team)) + .teamsRole(Collections.singletonMap(team, role)) + .build()) + .request()); // Verify the user was created with correct team and role User createdUser = response.getUsers().get(id); @@ -173,7 +176,8 @@ void whenPartiallyUpdatingUserWithTeam_thenNoException() { // Verify the changes Assertions.assertEquals("blue", updatedUser.getAdditionalFields().get("team")); @SuppressWarnings("unchecked") - Map teamsRole = (Map) updatedUser.getAdditionalFields().get("teams_role"); + Map teamsRole = + (Map) updatedUser.getAdditionalFields().get("teams_role"); Assertions.assertEquals("admin", teamsRole.get("blue")); } From c1973a5f36d8d553c7f16ada420a0d6a39f7b673 Mon Sep 17 00:00:00 2001 From: Lennart Kuijs Date: Fri, 28 Mar 2025 09:44:15 +0100 Subject: [PATCH 4/4] fixing tests --- src/test/java/io/getstream/chat/java/UserTest.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/test/java/io/getstream/chat/java/UserTest.java b/src/test/java/io/getstream/chat/java/UserTest.java index 79ebf3060..afc61d5c6 100644 --- a/src/test/java/io/getstream/chat/java/UserTest.java +++ b/src/test/java/io/getstream/chat/java/UserTest.java @@ -160,7 +160,7 @@ void whenPartiallyUpdatingUserWithTeam_thenNoException() { UserPartialUpdateRequestObject userPartialUpdateRequestObject = UserPartialUpdateRequestObject.builder() .id(user.getId()) - .setValue("team", "blue") + .setValue("teams", Collections.singletonList("blue")) .setValue("teams_role", Collections.singletonMap("blue", "admin")) .build(); @@ -174,11 +174,8 @@ void whenPartiallyUpdatingUserWithTeam_thenNoException() { .get(user.getId()); // Verify the changes - Assertions.assertEquals("blue", updatedUser.getAdditionalFields().get("team")); - @SuppressWarnings("unchecked") - Map teamsRole = - (Map) updatedUser.getAdditionalFields().get("teams_role"); - Assertions.assertEquals("admin", teamsRole.get("blue")); + Assertions.assertEquals("blue", updatedUser.getTeams().get(0)); + Assertions.assertEquals("admin", updatedUser.getTeamsRole().get("blue")); } @DisplayName("Can ban user")