Skip to content

Commit

Permalink
Fix: 기존 그룹이 아닌 새 그룹에 배정이 안되는 버그 수정 (#132)
Browse files Browse the repository at this point in the history
  • Loading branch information
zionhann committed Sep 13, 2023
1 parent ca59b4d commit 0a4a63f
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 9 deletions.
9 changes: 9 additions & 0 deletions src/main/java/edu/handong/csee/histudy/domain/StudyGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ public StudyGroup(Integer tag, List<User> members) {
join(members);
}

public StudyGroup(Integer tag) {
this.tag = tag;
}

public void increase(long totalMinutes) {
this.totalMinutes += totalMinutes;
}
Expand Down Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,17 @@

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;

@Repository
public interface StudyGroupRepository extends JpaRepository<StudyGroup, Long> {
Optional<StudyGroup> findByTag(int tag);

@Modifying
@Query("delete from StudyGroup s where s.tag = -1")
void deleteEmptyGroup();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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())
Expand All @@ -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());
}
}

0 comments on commit 0a4a63f

Please sign in to comment.