Skip to content

Commit

Permalink
refactor: TAskCreateRequest 의 파라미터 유효성 검증 및 테스트 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
olivejua committed Aug 20, 2024
1 parent e50bd14 commit 39a0a26
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ public class TaskController {
ResponseEntity<ApiResponse<TaskResponse>> getTask(@PathVariable("id") Long id) {
Assert.state(id >= 0, "The id value must be positive.");

// FIXME 서비스 로직 구현하면 제거하기 / Custom Exception 구현하기
// TODO Custom Exception 구현하기
// FIXME 서비스 로직 구현하면 제거하기
if (id == 0) {
throw new IllegalArgumentException("The given task with id does not exist");
}
Expand Down
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.");
}
}
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.");
}
}
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));
}
}
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));
}
}

0 comments on commit 39a0a26

Please sign in to comment.