-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
refactor: TAskCreateRequest 의 파라미터 유효성 검증 및 테스트 추가
- Loading branch information
Showing
5 changed files
with
133 additions
and
3 deletions.
There are no files selected for viewing
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
9 changes: 8 additions & 1 deletion
9
api/src/main/java/com/taskbuddy/api/controller/request/TaskCreateRequest.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 |
---|---|---|
@@ -1,9 +1,16 @@ | ||
package com.taskbuddy.api.controller.request; | ||
|
||
import com.taskbuddy.api.controller.response.task.TimeFrame; | ||
import org.springframework.util.Assert; | ||
|
||
public record TaskCreateRequest( | ||
String title, | ||
String description, | ||
TimeFrame timeFrame | ||
) {} | ||
) { | ||
public TaskCreateRequest { | ||
Assert.state(title != null && !title.isBlank(), "The title of task must not be blank."); | ||
Assert.state(description == null || description.length() <= 500, "The description length must be equal or less than 500"); | ||
Assert.notNull(timeFrame, "The timeFrame must not be null."); | ||
} | ||
} |
10 changes: 9 additions & 1 deletion
10
api/src/main/java/com/taskbuddy/api/controller/response/task/TimeFrame.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 |
---|---|---|
@@ -1,7 +1,15 @@ | ||
package com.taskbuddy.api.controller.response.task; | ||
|
||
import org.springframework.util.Assert; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
public record TimeFrame( | ||
LocalDateTime startDateTime, | ||
LocalDateTime endDateTime) {} | ||
LocalDateTime endDateTime) { | ||
public TimeFrame { | ||
Assert.notNull(startDateTime, "The startDateTime must not be null."); | ||
Assert.notNull(endDateTime, "The endDateTime must not be null."); | ||
Assert.isTrue(endDateTime.isAfter(startDateTime), "The endDateTime must be after than the startDateTime."); | ||
} | ||
} |
65 changes: 65 additions & 0 deletions
65
api/src/test/java/com/taskbuddy/api/controller/request/TaskCreateRequestTest.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,65 @@ | ||
package com.taskbuddy.api.controller.request; | ||
|
||
import com.taskbuddy.api.controller.response.task.TimeFrame; | ||
import org.junit.jupiter.api.Test; | ||
import org.junit.jupiter.params.ParameterizedTest; | ||
import org.junit.jupiter.params.provider.NullAndEmptySource; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
import static org.assertj.core.api.Assertions.assertThatThrownBy; | ||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; | ||
|
||
class TaskCreateRequestTest { | ||
|
||
@ParameterizedTest | ||
@NullAndEmptySource | ||
void Title이_Null이거나_비어있는_값이면_예외를_던진다(String emptyTitle) { | ||
//given | ||
TimeFrame dummyTimeFrame = new TimeFrame(LocalDateTime.now(), LocalDateTime.now().plusDays(1)); | ||
|
||
//when & then | ||
assertThatThrownBy(() -> new TaskCreateRequest(emptyTitle, null, dummyTimeFrame)) | ||
.isInstanceOf(IllegalStateException.class) | ||
.hasMessage("The title of task must not be blank."); | ||
} | ||
|
||
@Test | ||
void description길이가_500자_초과라면_예외를_던진다() { | ||
//given | ||
String longDescription = "A".repeat(501); | ||
TimeFrame dummyTimeFrame = new TimeFrame(LocalDateTime.now(), LocalDateTime.now().plusDays(1)); | ||
|
||
//when & then | ||
assertThatThrownBy(() -> new TaskCreateRequest("sample title", longDescription, dummyTimeFrame)) | ||
.isInstanceOf(IllegalStateException.class) | ||
.hasMessage("The description length must be equal or less than 500"); | ||
} | ||
|
||
@Test | ||
void description길이가_500자_이하라면_정상적으로_객체가_생성된다() { | ||
//given | ||
String longDescription = "A".repeat(500); | ||
TimeFrame dummyTimeFrame = new TimeFrame(LocalDateTime.now(), LocalDateTime.now().plusDays(1)); | ||
|
||
//when & then | ||
assertDoesNotThrow(() -> new TaskCreateRequest("sample title", longDescription, dummyTimeFrame)); | ||
} | ||
|
||
@Test | ||
void timeFrame이_null이라면_예외를_던진다() { | ||
//given & when & then | ||
assertThatThrownBy(() -> new TaskCreateRequest("sample title", null, null)) | ||
.isInstanceOf(IllegalArgumentException.class) | ||
.hasMessage("The timeFrame must not be null."); | ||
} | ||
|
||
@Test | ||
void 정상적인_생성자_파라미터로_객체를_생성할_수_있다() { | ||
//given | ||
TimeFrame mockTimeFrame = new TimeFrame(LocalDateTime.now(), LocalDateTime.now().plusDays(1)); | ||
|
||
//when & then | ||
assertDoesNotThrow(() -> new TaskCreateRequest("sample title", null, mockTimeFrame)); | ||
} | ||
} |
49 changes: 49 additions & 0 deletions
49
api/src/test/java/com/taskbuddy/api/controller/response/task/TimeFrameTest.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,49 @@ | ||
package com.taskbuddy.api.controller.response.task; | ||
|
||
import org.junit.jupiter.api.Test; | ||
|
||
import java.time.LocalDateTime; | ||
|
||
import static org.assertj.core.api.Assertions.assertThatThrownBy; | ||
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; | ||
|
||
class TimeFrameTest { | ||
|
||
@Test | ||
void startDateTime이_null이면_예외를_던진다() { | ||
//given & when & then | ||
assertThatThrownBy(() -> new TimeFrame(null, LocalDateTime.now())) | ||
.isInstanceOf(IllegalArgumentException.class) | ||
.hasMessage("The startDateTime must not be null."); | ||
} | ||
|
||
@Test | ||
void endDateTime이_null이면_예외를_던진다() { | ||
//given & when & then | ||
assertThatThrownBy(() -> new TimeFrame(LocalDateTime.now(), null)) | ||
.isInstanceOf(IllegalArgumentException.class) | ||
.hasMessage("The endDateTime must not be null."); | ||
} | ||
|
||
@Test | ||
void endDateTime이_startDateTime보다_과거일시라면_예외를_던진다() { | ||
//given | ||
LocalDateTime mockStartDateTime = LocalDateTime.now(); | ||
LocalDateTime mockEndDateTime = mockStartDateTime.minusDays(1); | ||
|
||
//when & then | ||
assertThatThrownBy(() -> new TimeFrame(mockStartDateTime, mockEndDateTime)) | ||
.isInstanceOf(IllegalArgumentException.class) | ||
.hasMessage("The endDateTime must be after than the startDateTime."); | ||
} | ||
|
||
@Test | ||
void 정상적인_생성자_파라미터로_객체를_생성할_수_있다() { | ||
//given | ||
LocalDateTime mockStartDateTime = LocalDateTime.now(); | ||
LocalDateTime mockEndDateTime = mockStartDateTime.plusHours(1); | ||
|
||
//when & then | ||
assertDoesNotThrow(() -> new TimeFrame(mockStartDateTime, mockEndDateTime)); | ||
} | ||
} |