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();
	}
}