[이벤트 생성 API 개발]_08_비즈니스 로직 적용

1 minute read

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 외의 공백문자까지 확인해준다.