From 0a4a63fa9acbd2756ff0fbbcd39096bbb2fe9ec4 Mon Sep 17 00:00:00 2001 From: zionhann Date: Wed, 13 Sep 2023 14:28:22 +0900 Subject: [PATCH] =?UTF-8?q?Fix:=20=EA=B8=B0=EC=A1=B4=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=EC=9D=B4=20=EC=95=84=EB=8B=8C=20=EC=83=88=20=EA=B7=B8=EB=A3=B9?= =?UTF-8?q?=EC=97=90=20=EB=B0=B0=EC=A0=95=EC=9D=B4=20=EC=95=88=EB=90=98?= =?UTF-8?q?=EB=8A=94=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95=20(#132)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../csee/histudy/domain/StudyGroup.java | 9 +++ .../repository/StudyGroupRepository.java | 6 ++ .../csee/histudy/service/UserService.java | 8 ++- .../histudy/admin/AdminControllerTests.java | 68 ++++++++++++++++++- .../ReportGroupCourseControllerTests.java | 1 - .../csee/histudy/user/UserServiceTests.java | 4 +- 6 files changed, 87 insertions(+), 9 deletions(-) diff --git a/src/main/java/edu/handong/csee/histudy/domain/StudyGroup.java b/src/main/java/edu/handong/csee/histudy/domain/StudyGroup.java index 841fcd5..db4ff47 100644 --- a/src/main/java/edu/handong/csee/histudy/domain/StudyGroup.java +++ b/src/main/java/edu/handong/csee/histudy/domain/StudyGroup.java @@ -37,6 +37,10 @@ public StudyGroup(Integer tag, List members) { join(members); } + public StudyGroup(Integer tag) { + this.tag = tag; + } + public void increase(long totalMinutes) { this.totalMinutes += totalMinutes; } @@ -85,6 +89,11 @@ public void updateTotalMinutes() { } protected void assignCommonCourses() { + if (this.members.isEmpty()) { + this.groupCourses.clear(); + this.tag = -1; + return; + } getCommonCourses().stream() .filter(this::isNotInGroupCourse) .forEach(course -> new GroupCourse(this, course)); diff --git a/src/main/java/edu/handong/csee/histudy/repository/StudyGroupRepository.java b/src/main/java/edu/handong/csee/histudy/repository/StudyGroupRepository.java index 9ec4c30..c75cf81 100644 --- a/src/main/java/edu/handong/csee/histudy/repository/StudyGroupRepository.java +++ b/src/main/java/edu/handong/csee/histudy/repository/StudyGroupRepository.java @@ -2,6 +2,8 @@ import edu.handong.csee.histudy.domain.StudyGroup; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -9,4 +11,8 @@ @Repository public interface StudyGroupRepository extends JpaRepository { Optional findByTag(int tag); + + @Modifying + @Query("delete from StudyGroup s where s.tag = -1") + void deleteEmptyGroup(); } \ No newline at end of file diff --git a/src/main/java/edu/handong/csee/histudy/service/UserService.java b/src/main/java/edu/handong/csee/histudy/service/UserService.java index cf312b8..02b0a4e 100644 --- a/src/main/java/edu/handong/csee/histudy/service/UserService.java +++ b/src/main/java/edu/handong/csee/histudy/service/UserService.java @@ -4,6 +4,7 @@ import edu.handong.csee.histudy.controller.form.UserForm; import edu.handong.csee.histudy.domain.Course; import edu.handong.csee.histudy.domain.Role; +import edu.handong.csee.histudy.domain.StudyGroup; import edu.handong.csee.histudy.domain.User; import edu.handong.csee.histudy.dto.ApplyFormDto; import edu.handong.csee.histudy.dto.UserDto; @@ -159,9 +160,12 @@ public UserDto.UserInfo editUser(UserDto.UserEdit form) { tag -> studyGroupRepository .findByTag(tag) - .orElseThrow(StudyGroupNotFoundException::new) + .orElse(new StudyGroup(tag)) .join(List.of(user)), - user::leaveGroup + () -> { + user.leaveGroup(); + studyGroupRepository.deleteEmptyGroup(); + } ); user.edit(form); return new UserDto.UserInfo(user); diff --git a/src/test/java/edu/handong/csee/histudy/admin/AdminControllerTests.java b/src/test/java/edu/handong/csee/histudy/admin/AdminControllerTests.java index 46aae0d..f1f4a9a 100644 --- a/src/test/java/edu/handong/csee/histudy/admin/AdminControllerTests.java +++ b/src/test/java/edu/handong/csee/histudy/admin/AdminControllerTests.java @@ -5,6 +5,7 @@ import edu.handong.csee.histudy.controller.AdminController; import edu.handong.csee.histudy.domain.Course; import edu.handong.csee.histudy.domain.Role; +import edu.handong.csee.histudy.domain.StudyGroup; import edu.handong.csee.histudy.domain.User; import edu.handong.csee.histudy.dto.UserDto; import edu.handong.csee.histudy.interceptor.AuthenticationInterceptor; @@ -19,7 +20,7 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.ActiveProfiles; +import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.MockMvcBuilders; @@ -31,8 +32,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -164,4 +164,66 @@ void AdminControllerTests_122() throws Exception { // Then assertEquals(2, res.size()); } + + @DisplayName("그룹을 새로 생성해 배정할 수 있다") + @Test + void AdminControllerTests_170() throws Exception { + // given + User userA = User.builder() + .sid("201511111") + .name("userA") + .email("userA@test.com") + .role(Role.USER) + .build(); + User userB = User.builder() + .sid("201611111") + .name("userB") + .email("userB@test.com") + .role(Role.USER) + .build(); + Course courseA = Course.builder() + .name("courseA") + .build(); + Course courseB = Course.builder() + .name("courseB") + .build(); + + User save1 = userRepository.save(userA); + User save2 = userRepository.save(userB); + Course savedCourse1 = courseRepository.save(courseA); + Course savedCourse2 = courseRepository.save(courseB); + + Claims claimsB = Jwts.claims(); + claimsB.put("sub", userB.getEmail()); + + save1.selectCourse(List.of(savedCourse1, savedCourse2)); + save2.selectCourse(List.of(savedCourse1, savedCourse2)); + new StudyGroup(1, List.of(save1, save2)); + + Claims claimAdmin = Jwts.claims(); + claimAdmin.put("rol", Role.ADMIN.name()); + + UserDto.UserEdit editForm = UserDto.UserEdit.builder() + .id(save2.getId()) + .team(2) + .build(); + + // when + MvcResult mvcResult = mvc + .perform(post("/api/admin/edit-user") + .requestAttr("claims", claimAdmin) + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(editForm))) + .andExpect(status().isOk()) + .andReturn(); + + UserDto.UserInfo res = mapper.readValue( + mvcResult.getResponse().getContentAsString(), + UserDto.UserInfo.class); + + // then + assertEquals(2, res.getGroup()); + assertEquals(userB.getSid(), res.getSid()); + assertEquals(1, save1.getStudyGroup().getMembers().size()); + } } diff --git a/src/test/java/edu/handong/csee/histudy/group/ReportGroupCourseControllerTests.java b/src/test/java/edu/handong/csee/histudy/group/ReportGroupCourseControllerTests.java index 2e4f775..092a28e 100644 --- a/src/test/java/edu/handong/csee/histudy/group/ReportGroupCourseControllerTests.java +++ b/src/test/java/edu/handong/csee/histudy/group/ReportGroupCourseControllerTests.java @@ -20,7 +20,6 @@ import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.ActiveProfiles; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.MockMvcBuilders; diff --git a/src/test/java/edu/handong/csee/histudy/user/UserServiceTests.java b/src/test/java/edu/handong/csee/histudy/user/UserServiceTests.java index 804d0d2..01d0dd2 100644 --- a/src/test/java/edu/handong/csee/histudy/user/UserServiceTests.java +++ b/src/test/java/edu/handong/csee/histudy/user/UserServiceTests.java @@ -15,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.io.IOException; @@ -273,7 +272,6 @@ public void userEditTest() { User saved = userRepository.save(user); StudyGroup studyGroup = studyGroupRepository.save(new StudyGroup(111, List.of(saved))); - StudyGroup newStudyGroup = studyGroupRepository.save(new StudyGroup(222, List.of())); UserDto.UserEdit dto = UserDto.UserEdit.builder() .id(saved.getId()) @@ -286,6 +284,6 @@ public void userEditTest() { assertThat(edited.getName()).isEqualTo("조용히해라"); assertThat(edited.getSid()).isEqualTo("12345678"); - assertThat(edited.getGroup()).isEqualTo(newStudyGroup.getTag()); + assertThat(edited.getGroup()).isEqualTo(dto.getTeam()); } }