From 7e8298681d9c39355b7e1cd5275d496f664697fc Mon Sep 17 00:00:00 2001 From: wlsh44 Date: Sat, 25 Oct 2025 12:05:52 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=ED=88=AC=ED=91=9C=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=EC=A7=80=20=EC=A0=9C=EB=AA=A9=20=EA=B8=B8=EC=9D=B4=2010?= =?UTF-8?q?=EA=B8=80=EC=9E=90=20=EC=A0=9C=ED=95=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/chooz/common/exception/ErrorCode.java | 1 + .../com/chooz/post/domain/PollChoice.java | 11 ++++++++ .../com/chooz/post/domain/PollChoiceTest.java | 28 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/src/main/java/com/chooz/common/exception/ErrorCode.java b/src/main/java/com/chooz/common/exception/ErrorCode.java index 72dad149..992c3022 100644 --- a/src/main/java/com/chooz/common/exception/ErrorCode.java +++ b/src/main/java/com/chooz/common/exception/ErrorCode.java @@ -20,6 +20,7 @@ public enum ErrorCode { TITLE_IS_REQUIRED("게시글 제목은 필수입니다."), TITLE_LENGTH_EXCEEDED("게시글 제목 길이가 초과했습니다."), INVALID_POLL_CHOICE_COUNT("투표 선택지 개수가 범위를 벗어났습니다."), + POLL_CHOICE_TITLE_LENGTH_EXCEEDED("투표 선택지 제목 길이가 초과했습니다."), NOT_POST_AUTHOR("게시글 작성자가 아닙니다."), POST_ALREADY_CLOSED("이미 마감된 게시글입니다."), FILE_NAME_TOO_LONG("파일 이름이 너무 깁니다."), diff --git a/src/main/java/com/chooz/post/domain/PollChoice.java b/src/main/java/com/chooz/post/domain/PollChoice.java index dde9347c..b4401527 100644 --- a/src/main/java/com/chooz/post/domain/PollChoice.java +++ b/src/main/java/com/chooz/post/domain/PollChoice.java @@ -1,5 +1,7 @@ package com.chooz.post.domain; +import com.chooz.common.exception.BadRequestException; +import com.chooz.common.exception.ErrorCode; import jakarta.persistence.Entity; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; @@ -19,6 +21,8 @@ @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PollChoice { + private static final int MAX_TITLE_LENGTH = 10; + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @@ -32,6 +36,7 @@ public class PollChoice { public PollChoice(Long id, Post post, String title, String imageUrl) { validateNull(title, imageUrl); + validateTitleLength(title); this.id = id; this.post = post; this.title = title; @@ -46,4 +51,10 @@ public void setPost(Post post) { validateNull(post); this.post = post; } + + private void validateTitleLength(String title) { + if (title.length() > MAX_TITLE_LENGTH) { + throw new BadRequestException(ErrorCode.POLL_CHOICE_TITLE_LENGTH_EXCEEDED); + } + } } diff --git a/src/test/java/com/chooz/post/domain/PollChoiceTest.java b/src/test/java/com/chooz/post/domain/PollChoiceTest.java index 34873922..38f3e543 100644 --- a/src/test/java/com/chooz/post/domain/PollChoiceTest.java +++ b/src/test/java/com/chooz/post/domain/PollChoiceTest.java @@ -1,5 +1,6 @@ package com.chooz.post.domain; +import com.chooz.common.exception.BadRequestException; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -24,4 +25,31 @@ void create() throws Exception { () -> assertThat(pollChoice.getImageUrl()).isEqualTo(imageUrl) ); } + + @Test + @DisplayName("투표 선택지 제목은 10자를 초과할 수 없다") + void createWithTitleExceedingMaxLength() throws Exception { + //given + String title = "12345678901"; // 11자 + String imageUrl = "https://example.com/image.jpg"; + + //when & then + assertThrows(BadRequestException.class, () -> { + PollChoice.create(title, imageUrl); + }); + } + + @Test + @DisplayName("투표 선택지 제목은 10자일 때 정상 생성된다") + void createWithTitleMaxLength() throws Exception { + //given + String title = "1234567890"; // 10자 + String imageUrl = "https://example.com/image.jpg"; + + //when + PollChoice pollChoice = PollChoice.create(title, imageUrl); + + //then + assertThat(pollChoice.getTitle()).isEqualTo(title); + } }