[이벤트 생성 API 개발]_08_비즈니스 로직 적용
Event 생성 API 구현: 비즈니스 로직 적용
테스트 할 것
- 비즈니스 로직 적용 됐는지 응답 메시지 확인
- offline과 free 값 확인
비즈니스 로직 구현 및 테스트
basePrice와 maxPrice 정보로 → free : 유/무료 여부 확인
location 정보가 있는지 여부로 → offline : 온/오프라인 확인
이런 비즈니스 로직은 가능하면 도메인 객체에서 테스트하는 것이 좋다.
테스트 코드 추가
- 도메인 객체 테스트
public class EventTest {
@Test
@TestDescription("free 여부가 맞는지 확인")
public void testFree() {
// Given
Event event = Event.builder()
.basePrice(0)
.maxPrice(0)
.build();
// When
event.update();
// Then
assertThat(event.isFree()).isTrue();
// Given
event = Event.builder()
.basePrice(100)
.maxPrice(0)
.build();
// When
event.update();
// Then
assertThat(event.isFree()).isFalse();
// Given
event = Event.builder()
.basePrice(0)
.maxPrice(100)
.build();
// When
event.update();
// Then
assertThat(event.isFree()).isFalse();
}
}
- 통합 테스트
public class EventControllerTests {
@Test
@TestDescription("정상적으로 이벤트를 생성하는 테스트")
public void createEvent() throws Exception {
EventDto event = EventDto.builder()
.name("Spring")
// ...
.build();
mockMvc.perform(post("/api/events/") // 요청
//...
.andExpect(jsonPath("free").value(false))
.andExpect(jsonPath("offline").value(true))
.andExpect(jsonPath("eventStatus").value(EventStatus.DRAFT.name()));
}
비즈니스 로직 추가
public void update() {
// Update free
if (this.basePrice == 0 && this.maxPrice == 0) {
this.free = true;
} else {
this.free = false;
}
// Update offline
if (this.location == null || this.location.isBlank()) {
this.offline = false;
} else {
this.offline = true;
}
}
실제 로직을 처리하는 Controller에서 update() 하도록 코드 추가
이러한 로직은 Service로 행위를 위임하는 것이 좋다. 지금은 간단해서 컨트롤러 핸들러에서 도메인 객체의 메서드를 호출해서 비즈니스 로직을 처리하고 있다.
event.update();
Event newEvent = this.eventRepository.save(event);
※ isBlank()
이전에 값이 비어있는지 확인하는 로직은 trim()하고 compact()해서 문자열이 비어있는지 확인했었는데, JAVA 11 버전부터 isBlank()
를 지원
space 외의 공백문자까지 확인해준다.