diff --git a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/domain/GroupMember.java b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/domain/GroupMember.java index ca9a2186..4ec86f55 100644 --- a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/domain/GroupMember.java +++ b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/domain/GroupMember.java @@ -2,6 +2,8 @@ import java.time.LocalDate; +import org.hibernate.annotations.DynamicUpdate; + import com.gamzabat.algohub.feature.group.studygroup.etc.RoleOfGroupMember; import com.gamzabat.algohub.feature.user.domain.User; @@ -22,6 +24,7 @@ @Entity @Getter @NoArgsConstructor +@DynamicUpdate public class GroupMember { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/StudyGroupService.java b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/StudyGroupService.java index 532b47f3..f4e348a7 100644 --- a/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/StudyGroupService.java +++ b/src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/StudyGroupService.java @@ -509,6 +509,10 @@ public void updateGroupMemberRole(User user, Long groupId, UpdateGroupMemberRole () -> new GroupMemberValidationException(HttpStatus.BAD_REQUEST.value(), "해당 스터디 그룹에 참여하지 않은 회원입니다.")); member.updateRole(RoleOfGroupMember.fromValue(request.role())); + + if (RoleOfGroupMember.isOwner(member)) { + owner.updateRole(RoleOfGroupMember.PARTICIPANT); + } log.info("success to update group member role"); } diff --git a/src/test/java/com/gamzabat/algohub/service/StudyGroupServiceTest.java b/src/test/java/com/gamzabat/algohub/service/StudyGroupServiceTest.java index aaf328f4..e13db428 100644 --- a/src/test/java/com/gamzabat/algohub/service/StudyGroupServiceTest.java +++ b/src/test/java/com/gamzabat/algohub/service/StudyGroupServiceTest.java @@ -604,7 +604,7 @@ void updateBookmarkedStudyGroupFailed_2() { @Test @DisplayName("스터디 그룹 멤버 역할 수정 성공") - void updateGroupMemberRole() { + void updateGroupMemberRole_1() { // given UpdateGroupMemberRoleRequest request = new UpdateGroupMemberRoleRequest(2L, "ADMIN"); when(groupMemberRepository.findByUserAndStudyGroup(user, group)).thenReturn(Optional.ofNullable(groupMember1)); @@ -619,6 +619,24 @@ void updateGroupMemberRole() { assertThat(groupMember2.getRole()).isEqualTo(RoleOfGroupMember.ADMIN); } + @Test + @DisplayName("스터디 그룹 멤버 역할 수정 성공 : OWNER로 수정") + void updateGroupMemberRole_2() { + // given + UpdateGroupMemberRoleRequest request = new UpdateGroupMemberRoleRequest(2L, "OWNER"); + when(groupMemberRepository.findByUserAndStudyGroup(user, group)).thenReturn(Optional.ofNullable(groupMember1)); + when(groupMemberRepository.findByUserAndStudyGroup(user2, group)).thenReturn(Optional.ofNullable(groupMember2)); + when(studyGroupRepository.findById(groupId)).thenReturn(Optional.ofNullable(group)); + when(userRepository.findById(anyLong())).thenReturn(Optional.ofNullable(user2)); + // when + studyGroupService.updateGroupMemberRole(user, groupId, request); + // then + assertThat(groupMember2.getUser()).isEqualTo(user2); + assertThat(groupMember2.getStudyGroup()).isEqualTo(group); + assertThat(groupMember2.getRole()).isEqualTo(RoleOfGroupMember.OWNER); + assertThat(groupMember1.getRole()).isEqualTo(RoleOfGroupMember.PARTICIPANT); + } + @Test @DisplayName("스터디 그룹 멤버 역할 수정 실패 : 존재하지 않는 그룹") void updateGroupMemberRoleFailed_1() {