Test Code ‐ Business Layer(비즈니스 레이어) 테스트 - dnwls16071/Backend_Study_TIL GitHub Wiki
📚 Business Layer 정리
- Business Layer는 비즈니스 로직을 구현하는 레이어이다.
- Persistence Layer와의 상호작용(Data를 읽고 쓰는 행위)을 통해 비즈니스 로직을 전개시킨다.
- 트랜잭션을 보장해야 한다.
package com.spoteditor.backend.place.service;
import com.spoteditor.backend.place.config.AwsS3Config;
import com.spoteditor.backend.place.entity.Address;
import com.spoteditor.backend.place.service.dto.PlaceRegisterCommand;
import com.spoteditor.backend.place.service.dto.PlaceRegisterResult;
import com.spoteditor.backend.user.User;
import com.spoteditor.backend.user.UserRepository;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Transactional;
import static com.spoteditor.backend.place.entity.Category.TOUR;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest
@ActiveProfiles("test")
@Import(AwsS3Config.class)
@Transactional
class PlaceServiceTest {
@Autowired private UserRepository userRepository;
@Autowired private PlaceService placeService;
@Test
@DisplayName("사용자는 공간을 직접 등록할 수 있고 추가로 공간에 대한 사진도 추가할 수 있다.")
void 사용자는_공간을_직접_등록할_수_있고_추가로_공간에_대한_사진도_추가할_수_있다() {
// given
User user1 = createUser("[email protected]", "아무개1");
userRepository.save(user1);
PlaceRegisterCommand command1 = new PlaceRegisterCommand("공간 추가1",
"공간을 추가해보려고 해요1",
"원본 파일1",
Address.builder()
.address("테스트1")
.roadAddress("테스트1")
.latitude(37.123)
.longitude(128.123)
.sido("테스트1")
.bname("테스트1")
.sigungu("테스트1")
.build(),
TOUR);
// when
PlaceRegisterResult result = placeService.addPlace(user1.getId(), command1);;
// then
assertThat(result.userId()).isEqualTo(user1.getId());
assertThat(result.placeId()).isNotNull();
assertThat(result)
.extracting("name", "description")
.contains("공간 추가1", "공간을 추가해보려고 해요1");
assertThat(result.images())
.hasSize(1)
.extracting("originalFile")
.contains("원본 파일1");
}
private User createUser(String email, String name) {
return User.builder()
.email(email)
.name(name)
.build();
}
}