From 95da4ff9058829a26095dc22d86ddc3a7233aece Mon Sep 17 00:00:00 2001 From: KyungMin Lee Date: Tue, 13 Aug 2024 00:04:40 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20Project=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Project 도메인 엔티티를 구현했습니다. - Project 생성 시 전달받은 이름이 공백이거나 없을 경우 예외를 반환하는 검증로직을 추가했습니다. - 이에 따른 테스트를 진행했습니다. --- .../logbat/domain/project/domain/Project.java | 50 ++++++++++++++++++ .../repository/ProjectJpaRepository.java | 10 ++++ .../domain/project/domain/ProjectTest.java | 52 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 logbat/src/main/java/info/logbat/domain/project/domain/Project.java create mode 100644 logbat/src/main/java/info/logbat/domain/project/repository/ProjectJpaRepository.java create mode 100644 logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java diff --git a/logbat/src/main/java/info/logbat/domain/project/domain/Project.java b/logbat/src/main/java/info/logbat/domain/project/domain/Project.java new file mode 100644 index 0000000..4928907 --- /dev/null +++ b/logbat/src/main/java/info/logbat/domain/project/domain/Project.java @@ -0,0 +1,50 @@ +package info.logbat.domain.project.domain; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import java.time.LocalDateTime; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.SoftDelete; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.annotation.LastModifiedDate; + +@Entity +@Getter +@SoftDelete +@Table(name = "projects") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Project { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @Column(name = "name", nullable = false, length = 100) + private String name; + + @CreatedDate + @Column(name = "created_at") + private LocalDateTime createdAt; + + @LastModifiedDate + @Column(name = "updated_at") + private LocalDateTime updatedAt; + + private Project(String name) { + this.name = name; + } + + public static Project from(String name) { + if (name == null || name.isBlank()) { + throw new IllegalArgumentException("잘못된 이름 요청입니다."); + } + return new Project(name); + } + +} diff --git a/logbat/src/main/java/info/logbat/domain/project/repository/ProjectJpaRepository.java b/logbat/src/main/java/info/logbat/domain/project/repository/ProjectJpaRepository.java new file mode 100644 index 0000000..92ba6cc --- /dev/null +++ b/logbat/src/main/java/info/logbat/domain/project/repository/ProjectJpaRepository.java @@ -0,0 +1,10 @@ +package info.logbat.domain.project.repository; + +import info.logbat.domain.project.domain.Project; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface ProjectJpaRepository extends JpaRepository { + +} diff --git a/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java b/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java new file mode 100644 index 0000000..2b6255a --- /dev/null +++ b/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java @@ -0,0 +1,52 @@ +package info.logbat.domain.project.domain; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import java.util.stream.Stream; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; + +@DisplayName("Project 도메인은") +class ProjectTest { + + @DisplayName("생성시") + @Nested + class whenCreated { + + @DisplayName("이름이 잘못된 경우 예외를 던진다.") + @ParameterizedTest + @MethodSource("exceptionValues") + void testFromMethodFailWhenNameValueNotVerified(String name) { + // Act & Assert + assertThatThrownBy(() -> Project.from(name)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("잘못된 이름 요청입니다."); + } + + @Test + @DisplayName("정상적으로 생성된다.") + void testFromMethodSuccess() { + // Arrange + String expectedProjectName = "이름"; + // Act + Project actualResult = Project.from(expectedProjectName); + // Assert + assertThat(actualResult) + .hasFieldOrPropertyWithValue("name", expectedProjectName); + } + + + private static Stream exceptionValues() { + return Stream.of( + Arguments.of(""), + Arguments.of((String) null) + ); + } + + } +} \ No newline at end of file From f51fd0ad2da3f40653e602b5abff29db3ad80e0e Mon Sep 17 00:00:00 2001 From: KyungMin Lee Date: Tue, 13 Aug 2024 00:16:20 +0900 Subject: [PATCH 2/3] =?UTF-8?q?chore:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 일부 테스트 메서드 명을 변경했습니다. --- .../info/logbat/domain/project/domain/ProjectTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java b/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java index 2b6255a..733073a 100644 --- a/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java +++ b/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java @@ -21,7 +21,7 @@ class whenCreated { @DisplayName("이름이 잘못된 경우 예외를 던진다.") @ParameterizedTest @MethodSource("exceptionValues") - void testFromMethodFailWhenNameValueNotVerified(String name) { + void throwsExceptionForInvalidName(String name) { // Act & Assert assertThatThrownBy(() -> Project.from(name)) .isInstanceOf(IllegalArgumentException.class) @@ -44,9 +44,10 @@ void testFromMethodSuccess() { private static Stream exceptionValues() { return Stream.of( Arguments.of(""), - Arguments.of((String) null) + Arguments.of((String) null), + Arguments.of(" ") ); } } -} \ No newline at end of file +} From c798f4a1eceefd77e4fdb842beeac0e71607cc3f Mon Sep 17 00:00:00 2001 From: KyungMin Lee Date: Tue, 13 Aug 2024 10:39:56 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EA=B2=80=EC=A6=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - VARCHAR(100) 이상의 값을 저장할 수 없게 검증 로직을 추가했습니다. --- .../main/java/info/logbat/domain/project/domain/Project.java | 3 ++- .../java/info/logbat/domain/project/domain/ProjectTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/logbat/src/main/java/info/logbat/domain/project/domain/Project.java b/logbat/src/main/java/info/logbat/domain/project/domain/Project.java index 4928907..00e2ad8 100644 --- a/logbat/src/main/java/info/logbat/domain/project/domain/Project.java +++ b/logbat/src/main/java/info/logbat/domain/project/domain/Project.java @@ -6,6 +6,7 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import java.nio.charset.StandardCharsets; import java.time.LocalDateTime; import lombok.AccessLevel; import lombok.Getter; @@ -41,7 +42,7 @@ private Project(String name) { } public static Project from(String name) { - if (name == null || name.isBlank()) { + if (name == null || name.isBlank() || name.getBytes(StandardCharsets.UTF_8).length > 100) { throw new IllegalArgumentException("잘못된 이름 요청입니다."); } return new Project(name); diff --git a/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java b/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java index 733073a..bf868e6 100644 --- a/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java +++ b/logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java @@ -45,7 +45,8 @@ private static Stream exceptionValues() { return Stream.of( Arguments.of(""), Arguments.of((String) null), - Arguments.of(" ") + Arguments.of(" "), + Arguments.of("한글33자이상이면예외가발생해야할것같은데진짜발생하는지확인하기위한테스트값입니다.") ); }