-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: Project 도메인 엔티티 구현 - Project 도메인 엔티티를 구현했습니다. - Project 생성 시 전달받은 이름이 공백이거나 없을 경우 예외를 반환하는 검증로직을 추가했습니다. - 이에 따른 테스트를 진행했습니다. * chore: 테스트 메서드 명 변경 - 일부 테스트 메서드 명을 변경했습니다. * feat: 검증 로직 추가 - VARCHAR(100) 이상의 값을 저장할 수 없게 검증 로직을 추가했습니다.
- Loading branch information
Showing
3 changed files
with
115 additions
and
0 deletions.
There are no files selected for viewing
51 changes: 51 additions & 0 deletions
51
logbat/src/main/java/info/logbat/domain/project/domain/Project.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
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.nio.charset.StandardCharsets; | ||
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() || name.getBytes(StandardCharsets.UTF_8).length > 100) { | ||
throw new IllegalArgumentException("잘못된 이름 요청입니다."); | ||
} | ||
return new Project(name); | ||
} | ||
|
||
} |
10 changes: 10 additions & 0 deletions
10
logbat/src/main/java/info/logbat/domain/project/repository/ProjectJpaRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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<Project, Long> { | ||
|
||
} |
54 changes: 54 additions & 0 deletions
54
logbat/src/test/java/info/logbat/domain/project/domain/ProjectTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
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 throwsExceptionForInvalidName(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<Arguments> exceptionValues() { | ||
return Stream.of( | ||
Arguments.of(""), | ||
Arguments.of((String) null), | ||
Arguments.of(" "), | ||
Arguments.of("한글33자이상이면예외가발생해야할것같은데진짜발생하는지확인하기위한테스트값입니다.") | ||
); | ||
} | ||
|
||
} | ||
} |