diff --git a/src/main/java/com/nooblol/global/config/LetterTypeCheckAspect.java b/src/main/java/com/nooblol/global/config/LetterTypeCheckAspect.java index 594c76ac..a288fa2e 100644 --- a/src/main/java/com/nooblol/global/config/LetterTypeCheckAspect.java +++ b/src/main/java/com/nooblol/global/config/LetterTypeCheckAspect.java @@ -2,8 +2,7 @@ import com.nooblol.global.exception.ExceptionMessage; import com.nooblol.global.utils.SessionUtils; -import com.nooblol.user.utils.LetterConstants; -import java.util.Arrays; +import com.nooblol.user.utils.LetterType; import javax.servlet.http.HttpSession; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; @@ -36,8 +35,7 @@ public void letterTypeValidation(JoinPoint jp, String type) throws Throwable { } private boolean typeValid(String type) { - return Arrays.stream(LetterConstants.LETTER_DELETE_TYPE_ARR) - .anyMatch(constantType -> constantType.equals(type)); + return LetterType.isExistsType(type); } private String getSessionInUserId(JoinPoint jp) { diff --git a/src/main/java/com/nooblol/global/config/WebConfig.java b/src/main/java/com/nooblol/global/config/WebConfig.java new file mode 100644 index 00000000..d053a737 --- /dev/null +++ b/src/main/java/com/nooblol/global/config/WebConfig.java @@ -0,0 +1,15 @@ +package com.nooblol.global.config; + +import com.nooblol.global.utils.enumhandle.EnumConvertFactoryUtils; +import org.springframework.context.annotation.Configuration; +import org.springframework.format.FormatterRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; + +@Configuration +public class WebConfig extends WebMvcConfigurationSupport { + + @Override + protected void addFormatters(FormatterRegistry registry) { + registry.addConverterFactory(new EnumConvertFactoryUtils()); + } +} diff --git a/src/main/java/com/nooblol/global/utils/enumhandle/EnumConvertFactoryUtils.java b/src/main/java/com/nooblol/global/utils/enumhandle/EnumConvertFactoryUtils.java new file mode 100644 index 00000000..524ad0bf --- /dev/null +++ b/src/main/java/com/nooblol/global/utils/enumhandle/EnumConvertFactoryUtils.java @@ -0,0 +1,51 @@ +package com.nooblol.global.utils.enumhandle; + + +import java.util.Arrays; +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.converter.ConverterFactory; + +/** + * 소문자로 EnumType이 들어오는 경우 대문자로 치환해서 타입을 전달해 주기 위한 셋팅 + *

+ * Reference : https://kapentaz.github.io/java/spring/Enum-and-@RequestParam-in-Spring/# + */ +public class EnumConvertFactoryUtils implements + ConverterFactory> { + + @Override + public > Converter getConverter( + Class targetType) { + return new StringToEnumConvertUtils<>(targetType); + } + + private static final class StringToEnumConvertUtils> implements + Converter { + + private final Class enumType; + private final boolean constantEnum; + + public StringToEnumConvertUtils(Class enumType) { + this.enumType = enumType; + this.constantEnum = Arrays.stream(enumType.getInterfaces()) + .anyMatch(i -> i == EnumConvertUtils.class); + } + + @Override + public T convert(String source) { + if (source.isEmpty()) { + return null; + } + + source = source.toUpperCase(); + + T[] constants = enumType.getEnumConstants(); + for (T c : constants) { + if (constantEnum && c.name().equals(source.trim())) { + return c; + } + } + return null; + } + } +} diff --git a/src/main/java/com/nooblol/global/utils/enumhandle/EnumConvertUtils.java b/src/main/java/com/nooblol/global/utils/enumhandle/EnumConvertUtils.java new file mode 100644 index 00000000..198c7df9 --- /dev/null +++ b/src/main/java/com/nooblol/global/utils/enumhandle/EnumConvertUtils.java @@ -0,0 +1,5 @@ +package com.nooblol.global.utils.enumhandle; + +public interface EnumConvertUtils { + +} diff --git a/src/main/java/com/nooblol/user/controller/LetterController.java b/src/main/java/com/nooblol/user/controller/LetterController.java index 76eb34b1..852bf3d8 100644 --- a/src/main/java/com/nooblol/user/controller/LetterController.java +++ b/src/main/java/com/nooblol/user/controller/LetterController.java @@ -11,6 +11,8 @@ import com.nooblol.user.dto.LetterSearchDto; import com.nooblol.user.service.LetterService; import com.nooblol.user.utils.LetterConstants; +import com.nooblol.user.utils.LetterStatus; +import com.nooblol.user.utils.LetterType; import javax.servlet.http.HttpSession; import javax.validation.Valid; import javax.validation.constraints.NotBlank; @@ -73,13 +75,13 @@ public ResponseDto getLetter( @LetterTypeValidation @GetMapping("/list/{type}") public ResponseDto getLetterToList( - @PathVariable String type, + @PathVariable LetterType type, @RequestParam(value = "page", required = false, defaultValue = "0") int pageNum, @RequestParam(value = "limit", required = false, defaultValue = "30") int limitNum, HttpSession session ) { LetterSearchDto searchParameterDto = makeLetterListSearchDto( - SessionUtils.getSessionUserId(session), pageNum, limitNum, type.toUpperCase() + SessionUtils.getSessionUserId(session), pageNum, limitNum, type ); //Data 가 Null인경우 CommonUtils에선 NotFound로 보내버려서 직접 설정함. @@ -115,7 +117,7 @@ public ResponseDto insertLetter( @LetterTypeValidation @DeleteMapping("/{type}/{letterId}") public ResponseDto deleteLetter( - @PathVariable @NotBlank(message = LetterConstants.LETTER_TYPE_NULL) String type, + @PathVariable @NotBlank(message = LetterConstants.LETTER_TYPE_NULL) LetterType type, @PathVariable @NotNull(message = LetterConstants.LETTER_ID_NULL) int letterId, HttpSession session ) { @@ -139,11 +141,19 @@ public ResponseDto deleteLetter( * @return */ private LetterSearchDto makeLetterListSearchDto( - String userId, int pageNum, int limitNum, String type + String userId, int pageNum, int limitNum, LetterType type ) { + String searchListStr = ""; + for (int i = 0; i < LetterStatus.SEARCH_STATUS_ARR.length; i++) { + searchListStr += "\'" + LetterStatus.SEARCH_STATUS_ARR[i] + "\'"; + if (i != LetterStatus.SEARCH_STATUS_ARR.length - 1) { + searchListStr += ","; + } + } + return LetterSearchDto.builder() .userId(userId) - .statusArr(LetterConstants.LETTER_LIST_SEARCH_STATUS_ARR) + .statusArr(searchListStr) .pageNum(pageNum * limitNum) .limitNum(limitNum) .letterType(type) diff --git a/src/main/java/com/nooblol/user/dto/LetterDto.java b/src/main/java/com/nooblol/user/dto/LetterDto.java index 009475e6..5dfbe186 100644 --- a/src/main/java/com/nooblol/user/dto/LetterDto.java +++ b/src/main/java/com/nooblol/user/dto/LetterDto.java @@ -1,6 +1,8 @@ package com.nooblol.user.dto; import com.fasterxml.jackson.annotation.JsonInclude; +import com.nooblol.user.utils.LetterStatus; +import com.nooblol.user.utils.LetterType; import java.time.LocalDateTime; import lombok.AllArgsConstructor; import lombok.Builder; @@ -24,13 +26,13 @@ public class LetterDto { private String toUserId; - private int toStatus; + private LetterStatus toStatus; private String fromUserId; - private int fromStatus; + private LetterStatus fromStatus; private LocalDateTime createdAt; - private String type; + private LetterType type; } diff --git a/src/main/java/com/nooblol/user/dto/LetterSearchDto.java b/src/main/java/com/nooblol/user/dto/LetterSearchDto.java index ae5d2f0d..7f3ed770 100644 --- a/src/main/java/com/nooblol/user/dto/LetterSearchDto.java +++ b/src/main/java/com/nooblol/user/dto/LetterSearchDto.java @@ -1,5 +1,6 @@ package com.nooblol.user.dto; +import com.nooblol.user.utils.LetterType; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -15,11 +16,11 @@ public class LetterSearchDto { private String userId; - private int[] statusArr; + private String statusArr; private int pageNum; private int limitNum; - private String letterType; + private LetterType letterType; } diff --git a/src/main/java/com/nooblol/user/service/impl/LetterServiceImpl.java b/src/main/java/com/nooblol/user/service/impl/LetterServiceImpl.java index 76d35a16..f42eb792 100644 --- a/src/main/java/com/nooblol/user/service/impl/LetterServiceImpl.java +++ b/src/main/java/com/nooblol/user/service/impl/LetterServiceImpl.java @@ -8,12 +8,10 @@ import com.nooblol.user.mapper.LetterMapper; import com.nooblol.user.service.LetterService; import com.nooblol.user.service.UserInfoService; -import com.nooblol.user.utils.LetterConstants; +import com.nooblol.user.utils.LetterStatus; +import com.nooblol.user.utils.LetterType; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Optional; import javax.servlet.http.HttpSession; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,26 +36,18 @@ public LetterDto getLetter(int letterId, HttpSession session) { throw new IllegalArgumentException(ExceptionMessage.NO_DATA); } - if (!ObjectUtils.isEmpty(letterDto) && - !(letterReqUserId.equals(letterDto.getToUserId()) || - letterReqUserId.equals(letterDto.getFromUserId())) - ) { + if (!isHaveGetLetterAuth(letterDto, letterReqUserId)) { throw new IllegalArgumentException(ExceptionMessage.FORBIDDEN); } //발송자인 경우에는 먼저 return - if (letterReqUserId.equals(letterDto.getFromUserId())) { + if (isReqUserLetterTypeFrom(letterDto, letterReqUserId)) { return letterDto; } //수신자의 경우 읽지 않았으면 Update - if (letterDto.getToStatus() == LetterConstants.LETTER_STATUS_UNREAD) { - letterDto.setToStatus(LetterConstants.LETTER_STATUS_READ); - updateLetterStatus( - letterDto.getLetterId(), - LetterConstants.LETTER_STATUS_READ, - LetterConstants.LETTER_TYPE_TO, - session - ); + if (LetterStatus.UNREAD.equals(letterDto.getToStatus())) { + letterDto.setToStatus(LetterStatus.READ); + updateLetterStatus(letterDto.getLetterId(), LetterStatus.READ, LetterType.TO, session); } return letterDto; @@ -65,16 +55,12 @@ public LetterDto getLetter(int letterId, HttpSession session) { @Override public List getLetterListByUserId(LetterSearchDto letterSearchDto) { - if (LetterConstants.LETTER_TYPE_TO.equals(letterSearchDto.getLetterType())) { - return Optional.ofNullable( - letterMapper.selectLetterListByUserIdAndTypeTo(letterSearchDto) - ).orElse(new ArrayList()); + if (LetterType.TO.equals(letterSearchDto.getLetterType())) { + return letterMapper.selectLetterListByUserIdAndTypeTo(letterSearchDto); } - if (LetterConstants.LETTER_TYPE_FROM.equals(letterSearchDto.getLetterType())) { - return Optional.ofNullable( - letterMapper.selectLetterListByUserIdAndTypeFrom(letterSearchDto) - ).orElse(new ArrayList()); + if (LetterType.FROM.equals(letterSearchDto.getLetterType())) { + return letterMapper.selectLetterListByUserIdAndTypeFrom(letterSearchDto); } throw new IllegalArgumentException(ExceptionMessage.BAD_REQUEST); @@ -88,9 +74,7 @@ public boolean insertLetter(LetterInsertRequestDto requestDto, HttpSession sessi } //실제 수신자가 존재하지 않는지 여부 확인 - if (Optional - .ofNullable(userInfoService.selectUserInfoByUserId(requestDto.getToUserId())) - .isEmpty()) { + if (ObjectUtils.isEmpty(userInfoService.selectUserInfoByUserId(requestDto.getToUserId()))) { throw new IllegalArgumentException(ExceptionMessage.NOT_FOUND); } @@ -98,9 +82,9 @@ public boolean insertLetter(LetterInsertRequestDto requestDto, HttpSession sessi .letterTitle(requestDto.getLetterTitle()) .letterContent(requestDto.getLetterContent()) .toUserId(requestDto.getToUserId()) - .toStatus(LetterConstants.LETTER_STATUS_UNREAD) + .toStatus(LetterStatus.UNREAD) .fromUserId(fromUserId) - .fromStatus(LetterConstants.LETTER_STATUS_READ) + .fromStatus(LetterStatus.READ) .createdAt(LocalDateTime.now()) .build(); @@ -111,7 +95,7 @@ public boolean insertLetter(LetterInsertRequestDto requestDto, HttpSession sessi public boolean deleteLetter(LetterDto letterDto, HttpSession session) { return updateLetterStatus( letterDto.getLetterId(), - LetterConstants.LETTER_STATUS_DELETE, + LetterStatus.DELETE, letterDto.getType(), session ); @@ -127,11 +111,9 @@ public boolean deleteLetter(LetterDto letterDto, HttpSession session) { * @return */ private boolean updateLetterStatus( - int letterId, int status, String letterType, HttpSession session + int letterId, LetterStatus status, LetterType letterType, HttpSession session ) { - letterType = letterType.toUpperCase(); - - if (LetterConstants.LETTER_TYPE_TO.equals(letterType)) { + if (LetterType.TO.equals(letterType)) { return letterMapper.updateLetterToStatusByLetterIdAndToUserId( LetterDto.builder() .letterId(letterId) @@ -141,7 +123,7 @@ private boolean updateLetterStatus( ) > 0; } - if (LetterConstants.LETTER_TYPE_FROM.equals(letterType)) { + if (LetterType.FROM.equals(letterType)) { return letterMapper.updateLetterFromStatusByLetterIdAndFromUserId( LetterDto.builder() .letterId(letterId) @@ -154,4 +136,39 @@ private boolean updateLetterStatus( //LetterConstants에 없는 Type(수신 또는 발신이 아닌경우) Exception throw new IllegalArgumentException(ExceptionMessage.BAD_REQUEST); } + + + /** + * 해당 쪽지가 발송자 또는 수신자인지 여부 확인 + * + * @param letterDto + * @param reqUserId + * @return + */ + private boolean isHaveGetLetterAuth(LetterDto letterDto, String reqUserId) { + return isReqUserLetterTypeTo(letterDto, reqUserId) || + isReqUserLetterTypeFrom(letterDto, reqUserId); + } + + /** + * 요청자가 쪽지의 수신자가 맞는지 확인 + * + * @param letterDto + * @param reqUserId + * @return + */ + private boolean isReqUserLetterTypeTo(LetterDto letterDto, String reqUserId) { + return reqUserId.equals(letterDto.getToUserId()); + } + + /** + * 요청자가 쪽지의 발송자가 맞는지 확인 + * + * @param letterDto + * @param reqUserId + * @return + */ + private boolean isReqUserLetterTypeFrom(LetterDto letterDto, String reqUserId) { + return reqUserId.equals(letterDto.getFromUserId()); + } } diff --git a/src/main/java/com/nooblol/user/utils/LetterConstants.java b/src/main/java/com/nooblol/user/utils/LetterConstants.java index e9b8df15..9fcf4831 100644 --- a/src/main/java/com/nooblol/user/utils/LetterConstants.java +++ b/src/main/java/com/nooblol/user/utils/LetterConstants.java @@ -6,32 +6,14 @@ private LetterConstants() { } public static final String LETTER_ID_NULL = "쪽지의 ID값이 입력되지 않았습니다."; + public static final String LETTER_TITLE_NULL = "제목이 입력되지 않았습니다."; + public static final String LETTER_CONTENT_NULL = "내용이 입력되지 않았습니다."; + public static final String LETTER_TO_USER_ID_NULL = "받는 사용자의 ID가 입력되지 않았습니다."; + public static final String LETTER_TYPE_NULL = "쪽지의 타입이 발송자인지, 수신자인지가 입력되지 않았습니다."; public static final String LETTER_USER_ID_NULL = "사용자 ID가 입력되지 않았습니다."; - - //Delete Type - public static final String LETTER_TYPE_FROM = "FROM"; //발송자 - public static final String LETTER_TYPE_TO = "TO"; //수신자 - public static final String[] LETTER_DELETE_TYPE_ARR = { - LETTER_TYPE_FROM, LETTER_TYPE_TO - }; - - - //ToStatus, FromStatus Value - public static final int LETTER_STATUS_READ = 1; - public static final int LETTER_STATUS_UNREAD = 2; - public static final int LETTER_STATUS_DELETE = 9; - - public static final int[] LETTER_LIST_SEARCH_STATUS_ARR = { - LETTER_STATUS_READ, LETTER_STATUS_UNREAD - }; - - public static final int[] LETTER_LIST_STATUS_ALL_ARR = { - LETTER_STATUS_READ, LETTER_STATUS_UNREAD, LETTER_STATUS_DELETE - }; - } diff --git a/src/main/java/com/nooblol/user/utils/LetterStatus.java b/src/main/java/com/nooblol/user/utils/LetterStatus.java new file mode 100644 index 00000000..b51d9ca3 --- /dev/null +++ b/src/main/java/com/nooblol/user/utils/LetterStatus.java @@ -0,0 +1,34 @@ +package com.nooblol.user.utils; + +import com.nooblol.global.utils.enumhandle.EnumConvertUtils; +import lombok.Getter; +import org.springframework.util.ObjectUtils; + +@Getter +public enum LetterStatus implements EnumConvertUtils { + READ, UNREAD, DELETE; + + public static final LetterStatus[] SEARCH_STATUS_ARR = { + READ, UNREAD + }; + + public static final LetterStatus[] STATUS_ALL_ARR = { + READ, UNREAD, DELETE + }; + + + public static boolean isExistStatus(String statusType) { + try { + LetterStatus.valueOf(statusType.toUpperCase()); + } catch (IllegalArgumentException e) { + return false; + } + return true; + } + + public static LetterType getLetterStatusByString(String statusType) { + return LetterType.valueOf(statusType.toUpperCase()); + } + + +} diff --git a/src/main/java/com/nooblol/user/utils/LetterType.java b/src/main/java/com/nooblol/user/utils/LetterType.java new file mode 100644 index 00000000..73fa1f62 --- /dev/null +++ b/src/main/java/com/nooblol/user/utils/LetterType.java @@ -0,0 +1,23 @@ +package com.nooblol.user.utils; + +import com.nooblol.global.utils.enumhandle.EnumConvertUtils; +import org.springframework.util.ObjectUtils; + +public enum LetterType implements EnumConvertUtils { + FROM, TO; + + public static boolean isExistsType(String type) { + try { + LetterType.valueOf(type.toUpperCase()); + } catch (IllegalArgumentException e) { + return false; + } + return true; + } + + public static LetterType getLetterTypeByString(String type) { + return LetterType.valueOf(type.toUpperCase()); + } + + +} diff --git a/src/main/resources/mybatis/mapper/board/ArticleReplyMapper.xml b/src/main/resources/mybatis/mapper/board/ArticleReplyMapper.xml index 6730fe52..34d28667 100644 --- a/src/main/resources/mybatis/mapper/board/ArticleReplyMapper.xml +++ b/src/main/resources/mybatis/mapper/board/ArticleReplyMapper.xml @@ -5,11 +5,7 @@ INSERT INTO bbs_articles_reply(article_id, reply_content, status, created_user_id, created_at, sort_no) - VALUES (#{articleId}, #{replyContent}, #{status}, #{createdUserId}, #{createdAt}, - IFNULL((SELECT sort_no + 1 - FROM bbs_articles_reply - WHERE article_id = #{articleId} - ORDER BY sort_no DESC limit 1), 1)) + VALUES (#{articleId}, #{replyContent}, #{status}, #{createdUserId}, #{createdAt}, 1) @@ -55,12 +51,11 @@ article_id, reply_content, status, - sort_no, created_at, created_user_id, created_at FROM bbs_articles_reply WHERE article_id = #{articleId} - ORDER BY sort_no ASC + ORDER BY created_at ASC \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/user/LetterMapper.xml b/src/main/resources/mybatis/mapper/user/LetterMapper.xml index eef9d69c..e8f24d0d 100644 --- a/src/main/resources/mybatis/mapper/user/LetterMapper.xml +++ b/src/main/resources/mybatis/mapper/user/LetterMapper.xml @@ -13,41 +13,35 @@ + + \ No newline at end of file diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index d2ab2d83..47975892 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -118,8 +118,8 @@ CREATE TABLE `users_letter` `letter_content` text, `to_user_id` varchar(255) NOT NULL, `from_user_id` varchar(255) NOT NULL, - `to_status` int NOT NULL, - `from_status` int NOT NULL, + `to_status` varchar(255) NOT NULL, + `from_status` varchar(255) NOT NULL, `created_at` datetime DEFAULT (now()) ); diff --git a/src/test/java/com/nooblol/user/service/impl/LetterServiceImplTest.java b/src/test/java/com/nooblol/user/service/impl/LetterServiceImplTest.java index abc1ead8..c82cad12 100644 --- a/src/test/java/com/nooblol/user/service/impl/LetterServiceImplTest.java +++ b/src/test/java/com/nooblol/user/service/impl/LetterServiceImplTest.java @@ -12,7 +12,8 @@ import com.nooblol.user.dto.UserDto; import com.nooblol.user.mapper.LetterMapper; import com.nooblol.user.service.UserInfoService; -import com.nooblol.user.utils.LetterConstants; +import com.nooblol.user.utils.LetterStatus; +import com.nooblol.user.utils.LetterType; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpSession; @@ -189,7 +190,7 @@ class LetterListSelectTest { void getLetterListByUserId_WhenIsNotExistsType_ThenBadRequestExcpeiton() { //gvien LetterSearchDto requestDto = new LetterSearchDto().builder() - .letterType("없는 타입") + .letterType(null) .build(); //when @@ -206,11 +207,12 @@ void getLetterListByUserId_WhenIsNotExistsType_ThenBadRequestExcpeiton() { void getLetterListByUserId_WhenIsNotExistsLetterByDbTypeTo_ThenReturnEmptyLetterList() { //given LetterSearchDto requestDto = new LetterSearchDto().builder() - .letterType(LetterConstants.LETTER_TYPE_TO) + .letterType(LetterType.TO) .build(); //mock - when(letterMapper.selectLetterListByUserIdAndTypeTo(requestDto)).thenReturn(null); + when(letterMapper.selectLetterListByUserIdAndTypeTo(requestDto)) + .thenReturn(new ArrayList()); //when List result = letterService.getLetterListByUserId(requestDto); @@ -225,26 +227,16 @@ void getLetterListByUserId_WhenIsExistsLetterAndTypeTo_ThenReturnLetterList() { //given LetterSearchDto requestDto = new LetterSearchDto().builder() .userId(SessionUtils.getSessionUserId(authUserSession)) - .letterType(LetterConstants.LETTER_TYPE_TO) - .statusArr(LetterConstants.LETTER_LIST_SEARCH_STATUS_ARR) + .letterType(LetterType.TO) + .statusArr(getLetterSearchTypeStr()) .limitNum(30) .pageNum(0) .build(); - LetterDto letterListObj1 = new LetterDto().builder() - .letterId(1) - .build(); - LetterDto letterListObj2 = new LetterDto().builder() - .letterId(2) - .build(); - LetterDto letterListObj3 = new LetterDto().builder() - .letterId(3) - .build(); - List mockReturnLetterList = new ArrayList<>(); - mockReturnLetterList.add(letterListObj1); - mockReturnLetterList.add(letterListObj2); - mockReturnLetterList.add(letterListObj3); + mockReturnLetterList.add(LetterDto.builder().letterId(1).build()); + mockReturnLetterList.add(LetterDto.builder().letterId(2).build()); + mockReturnLetterList.add(LetterDto.builder().letterId(3).build()); //mock when(letterMapper.selectLetterListByUserIdAndTypeTo(requestDto)).thenReturn( @@ -262,11 +254,12 @@ void getLetterListByUserId_WhenIsExistsLetterAndTypeTo_ThenReturnLetterList() { void getLetterListByUserId_WhenIsNotExistsLetterByDbTypeFrom_ThenReturnEmptyLetterList() { //given LetterSearchDto requestDto = new LetterSearchDto().builder() - .letterType(LetterConstants.LETTER_TYPE_FROM) + .letterType(LetterType.FROM) .build(); //mock - when(letterMapper.selectLetterListByUserIdAndTypeFrom(requestDto)).thenReturn(null); + when(letterMapper.selectLetterListByUserIdAndTypeFrom(requestDto)) + .thenReturn(new ArrayList()); //when List result = letterService.getLetterListByUserId(requestDto); @@ -279,28 +272,18 @@ void getLetterListByUserId_WhenIsNotExistsLetterByDbTypeFrom_ThenReturnEmptyLett @DisplayName("발송 리스트 조회시 데이터가 있는 경우, 발송한 쪽지 리스트를 획득한다.") void getLetterListByUserId_WhenIsExistsLetterAndTypeFrom_ThenReturnLetterList() { //given - LetterSearchDto requestDto = new LetterSearchDto().builder() + LetterSearchDto requestDto = LetterSearchDto.builder() .userId(SessionUtils.getSessionUserId(authUserSession)) - .letterType(LetterConstants.LETTER_TYPE_FROM) - .statusArr(LetterConstants.LETTER_LIST_SEARCH_STATUS_ARR) + .letterType(LetterType.FROM) + .statusArr(getLetterSearchTypeStr()) .limitNum(30) .pageNum(0) .build(); - LetterDto letterListObj1 = new LetterDto().builder() - .letterId(1) - .build(); - LetterDto letterListObj2 = new LetterDto().builder() - .letterId(2) - .build(); - LetterDto letterListObj3 = new LetterDto().builder() - .letterId(3) - .build(); - List mockReturnLetterList = new ArrayList<>(); - mockReturnLetterList.add(letterListObj1); - mockReturnLetterList.add(letterListObj2); - mockReturnLetterList.add(letterListObj3); + mockReturnLetterList.add(LetterDto.builder().letterId(1).build()); + mockReturnLetterList.add(LetterDto.builder().letterId(2).build()); + mockReturnLetterList.add(LetterDto.builder().letterId(3).build()); //mock when(letterMapper.selectLetterListByUserIdAndTypeFrom(requestDto)).thenReturn( @@ -312,6 +295,20 @@ void getLetterListByUserId_WhenIsExistsLetterAndTypeFrom_ThenReturnLetterList() //then assertEquals(result, mockReturnLetterList); } + + String getLetterSearchTypeStr() { + + String searchListStr = "("; + + for (int i = 0; i < LetterStatus.SEARCH_STATUS_ARR.length; i++) { + searchListStr += "\'" + LetterStatus.SEARCH_STATUS_ARR[i] + "\',"; + if (i != LetterStatus.SEARCH_STATUS_ARR.length - 1) { + searchListStr += ","; + } + } + searchListStr += ")"; + return searchListStr; + } } @@ -325,7 +322,7 @@ class LetterDeleteTest { void deleteLetter_WhenLetterTypeNotExistsConstants_ThenBadRequestException() { //given LetterDto requestDto = new LetterDto(); - requestDto.setType("Not Exists Constants Type"); + requestDto.setType(null); //when Exception e = assertThrows(IllegalArgumentException.class, () -> { @@ -343,7 +340,7 @@ void deleteLetter_WhenIsNotExistsLetter_ThenReturnFalse() { int nullLetterId = 99999; LetterDto requestDto = new LetterDto(); requestDto.setLetterId(nullLetterId); - requestDto.setType(LetterConstants.LETTER_TYPE_TO); + requestDto.setType(LetterType.TO); //mock when(letterMapper.updateLetterToStatusByLetterIdAndToUserId(any())).thenReturn(0); @@ -362,7 +359,7 @@ void deleteLetter_WhenIsExistsLetter_ThenReturnTrue() { int nullLetterId = 99999; LetterDto requestDto = new LetterDto(); requestDto.setLetterId(nullLetterId); - requestDto.setType(LetterConstants.LETTER_TYPE_TO); + requestDto.setType(LetterType.TO); //mock when(letterMapper.updateLetterToStatusByLetterIdAndToUserId(any())).thenReturn(1); @@ -373,6 +370,6 @@ void deleteLetter_WhenIsExistsLetter_ThenReturnTrue() { //then assertTrue(result); } - } + } \ No newline at end of file