Skip to content

Commit

Permalink
[refactor] #215
Browse files Browse the repository at this point in the history
Entity 삭제 방지, 통합 테스트 코드 작성
  • Loading branch information
HYG committed Feb 13, 2024
1 parent 619b90c commit 7fc157e
Show file tree
Hide file tree
Showing 3 changed files with 152 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/main/java/com/dmarket/service/AdminService.java
Original file line number Diff line number Diff line change
Expand Up @@ -791,7 +791,7 @@ public UserResDto.TotalAdminResDto getAdminUserDetails() {
}

// 관리자 권한 별 관리자 수 집계
private int adminCount(List<User> users, Role role) {
public int adminCount(List<User> users, Role role) {
return (int) users.stream().filter(user -> user.getUserRole() == role).count();
}

Expand Down
59 changes: 48 additions & 11 deletions src/test/java/com/dmarket/TestUtility.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@
import com.dmarket.constant.MileageContents;
import com.dmarket.constant.MileageReqState;
import com.dmarket.constant.Role;
import com.dmarket.domain.board.Notice;
import com.dmarket.domain.user.MileageReq;
import com.dmarket.domain.user.User;
import com.dmarket.dto.common.MileageCommonDto;
import com.dmarket.dto.request.NoticeReqDto;
import com.dmarket.dto.response.NoticeResDto;

import java.time.*;

Expand Down Expand Up @@ -79,19 +82,53 @@ public static User createTestSM() {
return testUser;
}

public static MileageCommonDto.MileageReqListDto createTestMileageReq() {
MileageCommonDto.MileageReqListDto testMileageReq = MileageCommonDto.MileageReqListDto.builder()
.mileageReqId(1L)
.mileageReqDate(LocalDateTime.now())
.userId(1L)
.userName("testName")
.userEmail("testEmail")
.mileageReqReason(MileageContents.PURCHASE)
.mileageReqAmount(100000)
.mileageReqState(MileageReqState.PROCESSING)
.build();
public static MileageCommonDto.MileageReqListDto createTestMileageReqDto() {
MileageCommonDto.MileageReqListDto testMileageReqDto = MileageCommonDto.MileageReqListDto.builder()
.mileageReqId(1L)
.mileageReqDate(LocalDateTime.now())
.userId(1L)
.userName("testName")
.userEmail("testEmail")
.mileageReqReason(MileageContents.PURCHASE)
.mileageReqAmount(100000)
.mileageReqState(MileageReqState.PROCESSING)
.build();
return testMileageReqDto;
}

public static MileageReq createTestMileageReq() {
MileageReq testMileageReq = MileageReq.builder()
.userId(1L)
.mileageReqReason(MileageContents.PURCHASE)
.mileageReqAmount(100000)
.mileageReqState(MileageReqState.PROCESSING)
.build();
return testMileageReq;
}

public static NoticeResDto createTestNoticeResDto() {
Notice notice = Notice.builder()
.userId(1L)
.noticeTitle("testTitle")
.noticeContents("testContents")
.build();
NoticeResDto noticeResDto = new NoticeResDto(notice);
return noticeResDto;
}

public static NoticeReqDto createTestNoticeReqDto() {
NoticeReqDto noticeReqDto = new NoticeReqDto(1L, "testTitle", "testContents");
return noticeReqDto;
}

public static Notice createTestNotice() {
Notice notice = Notice.builder()
.userId(1L)
.noticeTitle("testTitle")
.noticeContents("testContents")
.build();

return notice;
}

}
112 changes: 103 additions & 9 deletions src/test/java/com/dmarket/integrationTest/AdminIntegrationTest.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.dmarket.integrationTest;

import com.dmarket.constant.MileageContents;
import com.dmarket.constant.Role;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
Expand All @@ -24,13 +25,20 @@
import org.springframework.web.bind.annotation.RequestMapping;

import com.dmarket.TestUtility;
import com.dmarket.domain.board.Notice;
import com.dmarket.domain.user.Mileage;
import com.dmarket.domain.user.MileageReq;
import com.dmarket.domain.user.User;
import com.dmarket.dto.common.MileageCommonDto;
import com.dmarket.dto.common.UserCommonDto;
import com.dmarket.dto.request.NoticeReqDto;
import com.dmarket.dto.request.UserReqDto;
import com.dmarket.dto.response.AdminResDto;
import com.dmarket.dto.response.NoticeResDto;
import com.dmarket.dto.response.UserResDto;
import com.dmarket.jwt.JWTUtil;
import com.dmarket.repository.board.NoticeRepository;
import com.dmarket.repository.user.MileageRepository;
import com.dmarket.repository.user.MileageReqRepository;
import com.dmarket.repository.user.UserRepository;
import com.dmarket.service.AdminService;
Expand Down Expand Up @@ -72,9 +80,15 @@ public class AdminIntegrationTest {
@MockBean
private UserRepository userRepository;

@MockBean
private MileageRepository mileageRepository;

@MockBean
private MileageReqRepository mileageReqRepository;

@MockBean
private NoticeRepository noticeRepository;

@MockBean
private JWTUtil jwtUtil;

Expand All @@ -99,9 +113,6 @@ private String createTestToken() {
.sign(Algorithm.HMAC512("testSecret"));
}

private int adminCount(List<User> users, Role role) {
return (int) users.stream().filter(user -> user.getUserRole() == role).count();
}

@Test
@DisplayName("관리자 검색")
Expand Down Expand Up @@ -133,9 +144,9 @@ public void getAdmins_withoutDktNum() throws Exception {
User testSM = TestUtility.createTestSM();
List<User> testManagers = List.of(testGM, testPM, testSM);
given(userRepository.findAllByUserRoleIsNot(any(Role.class))).willReturn(testManagers);
int gmCount = adminCount(testManagers, Role.ROLE_GM);
int smCount = adminCount(testManagers, Role.ROLE_SM);
int pmCount = adminCount(testManagers, Role.ROLE_PM);
int gmCount = adminService.adminCount(testManagers, Role.ROLE_GM);
int smCount = adminService.adminCount(testManagers, Role.ROLE_SM);
int pmCount = adminService.adminCount(testManagers, Role.ROLE_PM);

mockMvc.perform(get("/api/admin/admin-users")
.header("Authorization", token)
Expand Down Expand Up @@ -192,8 +203,6 @@ public void getUser() throws Exception {
.param("q", "testEmail")
.contentType("application/json"))
.andExpect(status().isOk())
.andDo(MockMvcRestDocumentation.document("get-user"))
.andDo(MockMvcResultHandlers.print())
.andExpect(jsonPath("$.data[0].userId").value(testUser.getUserId()))
.andExpect(jsonPath("$.data[0].userName").value(testUser.getUserName()))
.andExpect(jsonPath("$.data[0].userEmail").value(testUser.getUserEmail()))
Expand Down Expand Up @@ -225,7 +234,7 @@ public void deleteUser() throws Exception {
@Test
@DisplayName("마일리지 충전 요청/처리 내역 조회")
public void getMileageRequests() throws Exception {
MileageCommonDto.MileageReqListDto testMileageReq = TestUtility.createTestMileageReq();
MileageCommonDto.MileageReqListDto testMileageReq = TestUtility.createTestMileageReqDto();
Pageable pageable = PageRequest.of(0, 10, Sort.by(Sort.Direction.DESC, "mileageReqDate"));
Page<MileageCommonDto.MileageReqListDto> dtos;
List<MileageCommonDto.MileageReqListDto> list = Arrays.asList(testMileageReq);
Expand All @@ -243,4 +252,89 @@ public void getMileageRequests() throws Exception {
.andDo(MockMvcRestDocumentation.document("get-mileage-requests"))
.andDo(MockMvcResultHandlers.print());
}

@Test
@DisplayName("마일리지 요청 승인")
public void approveMileageReq() throws Exception {
MileageReq testMileageReq = TestUtility.createTestMileageReq();
given(mileageReqRepository.findById(any(Long.class))).willReturn(Optional.of(testMileageReq));
User testUser = TestUtility.createTestUser();
given(userRepository.findById(any(Long.class))).willReturn(Optional.of(testUser));
Long mileageReqId = 1L;

mockMvc.perform(put("/api/admin/users/mileage/approval/" + mileageReqId)
.header("Authorization", token)
.contentType("application/json"))
.andExpect(status().isOk())
.andDo(MockMvcRestDocumentation.document("approve-mileage-req"))
.andDo(MockMvcResultHandlers.print());

verify(mileageRepository, times(1)).save(any(Mileage.class));
}

@Test
@DisplayName("마일리지 요청 거부")
public void refusalMileageReq() throws Exception {
MileageReq testMileageReq = TestUtility.createTestMileageReq();
given(mileageReqRepository.findById(any(Long.class))).willReturn(Optional.of(testMileageReq));
User testUser = TestUtility.createTestUser();
given(userRepository.findById(any(Long.class))).willReturn(Optional.of(testUser));
Long mileageReqId = 1L;

mockMvc.perform(put("/api/admin/users/mileage/refusal/" + mileageReqId)
.header("Authorization", token)
.contentType("application/json"))
.andExpect(status().isOk())
.andDo(MockMvcRestDocumentation.document("refusal-mileage-req"))
.andDo(MockMvcResultHandlers.print());

verify(userRepository, times(1)).findById(any(Long.class));
}

@Test
@DisplayName("공지사항 목록 조회")
public void getNotices() throws Exception {
NoticeResDto testDto = TestUtility.createTestNoticeResDto();
Pageable pageable = PageRequest.of(0, 10);
Page<NoticeResDto> dtos;
List<NoticeResDto> list = Arrays.asList(testDto);
dtos = new PageImpl<>(list, pageable, list.size());


given(noticeRepository.getNotices(any(Pageable.class))).willReturn(dtos);

mockMvc.perform(get("/api/admin/board/notices")
.header("Authorization", token)
.contentType("application/json"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.data.totalElements").value(1))
.andExpect(jsonPath("$.data.content[0].noticeTitle").value("testTitle"))
.andDo(MockMvcRestDocumentation.document("get-notices"))
.andDo(MockMvcResultHandlers.print());
}

@Test
@DisplayName("공지사항 작성")
public void postNotice() throws Exception {
NoticeReqDto testNoticeReqDto = TestUtility.createTestNoticeReqDto();
Notice testNotice = TestUtility.createTestNotice();
Pageable pageable = PageRequest.of(0, 10);
Page<Notice> dtos;
List<Notice> list = Arrays.asList(testNotice);
dtos = new PageImpl<>(list, pageable, list.size());

given(noticeRepository.findAll(any(Pageable.class))).willReturn(dtos);

mockMvc.perform(post("/api/admin/board/notice")
.header("Authorization", token)
.content(objectMapper.writeValueAsString(testNoticeReqDto))
.contentType("application/json"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.data.totalElements").value(1))
.andExpect(jsonPath("$.data.content[0].noticeTitle").value("testTitle"))
.andDo(MockMvcRestDocumentation.document("post-notice"))
.andDo(MockMvcResultHandlers.print());

verify(noticeRepository, times(1)).save(any(Notice.class));
}
}

0 comments on commit 7fc157e

Please sign in to comment.