diff --git a/src/test/java/com/example/solidconnection/board/service/BoardServiceTest.java b/src/test/java/com/example/solidconnection/board/service/BoardServiceTest.java new file mode 100644 index 000000000..98c2b28fa --- /dev/null +++ b/src/test/java/com/example/solidconnection/board/service/BoardServiceTest.java @@ -0,0 +1,72 @@ +package com.example.solidconnection.board.service; + +import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.post.dto.BoardFindPostResponse; +import com.example.solidconnection.support.integration.BaseIntegrationTest; +import com.example.solidconnection.type.BoardCode; +import com.example.solidconnection.type.PostCategory; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.time.ZonedDateTime; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@DisplayName("게시판 서비스 테스트") +class BoardServiceTest extends BaseIntegrationTest { + + @Autowired + private BoardService boardService; + + @Test + void 게시판_코드와_카테고리로_게시글_목록을_조회한다() { + // given + List posts = List.of( + 미주권_자유게시글, 아시아권_자유게시글, 유럽권_자유게시글, 자유게시판_자유게시글, + 미주권_질문게시글, 아시아권_질문게시글, 유럽권_질문게시글, 자유게시판_질문게시글 + ); + List expectedPosts = posts.stream() + .filter(post -> post.getCategory().equals(PostCategory.자유) && post.getBoard().getCode().equals(BoardCode.FREE.name())) + .toList(); + List expectedResponses = BoardFindPostResponse.from(expectedPosts); + + // when + List actualResponses = boardService.findPostsByCodeAndPostCategory( + BoardCode.FREE.name(), + PostCategory.자유.name() + ); + + // then + assertThat(actualResponses) + .usingRecursiveComparison() + .ignoringFieldsOfTypes(ZonedDateTime.class) + .isEqualTo(expectedResponses); + } + + @Test + void 전체_카테고리로_조회시_해당_게시판의_모든_게시글을_조회한다() { + // given + List posts = List.of( + 미주권_자유게시글, 아시아권_자유게시글, 유럽권_자유게시글, 자유게시판_자유게시글, + 미주권_질문게시글, 아시아권_질문게시글, 유럽권_질문게시글, 자유게시판_질문게시글 + ); + List expectedPosts = posts.stream() + .filter(post -> post.getBoard().getCode().equals(BoardCode.FREE.name())) + .toList(); + List expectedResponses = BoardFindPostResponse.from(expectedPosts); + + // when + List actualResponses = boardService.findPostsByCodeAndPostCategory( + BoardCode.FREE.name(), + PostCategory.전체.name() + ); + + // then + assertThat(actualResponses) + .usingRecursiveComparison() + .ignoringFieldsOfTypes(ZonedDateTime.class) + .isEqualTo(expectedResponses); + } +} diff --git a/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java b/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java index f588b87ae..054cf6851 100644 --- a/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java +++ b/src/test/java/com/example/solidconnection/support/integration/BaseIntegrationTest.java @@ -3,8 +3,12 @@ import com.example.solidconnection.board.domain.Board; import com.example.solidconnection.board.repository.BoardRepository; import com.example.solidconnection.entity.Country; +import com.example.solidconnection.entity.PostImage; import com.example.solidconnection.entity.Region; +import com.example.solidconnection.post.domain.Post; +import com.example.solidconnection.post.repository.PostRepository; import com.example.solidconnection.repositories.CountryRepository; +import com.example.solidconnection.repositories.PostImageRepository; import com.example.solidconnection.repositories.RegionRepository; import com.example.solidconnection.siteuser.domain.SiteUser; import com.example.solidconnection.siteuser.repository.SiteUserRepository; @@ -12,6 +16,7 @@ import com.example.solidconnection.support.TestContainerSpringBootTest; import com.example.solidconnection.type.Gender; import com.example.solidconnection.type.LanguageTestType; +import com.example.solidconnection.type.PostCategory; import com.example.solidconnection.type.PreparationStatus; import com.example.solidconnection.type.Role; import com.example.solidconnection.university.domain.LanguageRequirement; @@ -76,6 +81,15 @@ public abstract class BaseIntegrationTest { public static Board 유럽권; public static Board 자유게시판; + public static Post 미주권_자유게시글; + public static Post 아시아권_자유게시글; + public static Post 유럽권_자유게시글; + public static Post 자유게시판_자유게시글; + public static Post 미주권_질문게시글; + public static Post 아시아권_질문게시글; + public static Post 유럽권_질문게시글; + public static Post 자유게시판_질문게시글; + @Autowired private SiteUserRepository siteUserRepository; @@ -97,6 +111,12 @@ public abstract class BaseIntegrationTest { @Autowired private BoardRepository boardRepository; + @Autowired + private PostRepository postRepository; + + @Autowired + private PostImageRepository postImageRepository; + @Value("${university.term}") public String term; @@ -109,6 +129,7 @@ public void setUpBaseData() { setUpUniversityInfos(); setUpLanguageRequirements(); setUpBoards(); + setUpPosts(); } private void setUpSiteUsers() { @@ -337,6 +358,17 @@ private void setUpBoards() { 자유게시판 = boardRepository.save(new Board(FREE.name(), "자유게시판")); } + private void setUpPosts() { + 미주권_자유게시글 = createPost(미주권, 테스트유저_1, "미주권 자유게시글", "미주권 자유게시글 내용", PostCategory.자유); + 아시아권_자유게시글 = createPost(아시아권, 테스트유저_2, "아시아권 자유게시글", "아시아권 자유게시글 내용", PostCategory.자유); + 유럽권_자유게시글 = createPost(유럽권, 테스트유저_1, "유럽권 자유게시글", "유럽권 자유게시글 내용", PostCategory.자유); + 자유게시판_자유게시글 = createPost(자유게시판, 테스트유저_2, "자유게시판 자유게시글", "자유게시판 자유게시글 내용", PostCategory.자유); + 미주권_질문게시글 = createPost(미주권, 테스트유저_1, "미주권 질문게시글", "미주권 질문게시글 내용", PostCategory.질문); + 아시아권_질문게시글 = createPost(아시아권, 테스트유저_2, "아시아권 질문게시글", "아시아권 질문게시글 내용", PostCategory.질문); + 유럽권_질문게시글 = createPost(유럽권, 테스트유저_1, "유럽권 질문게시글", "유럽권 질문게시글 내용", PostCategory.질문); + 자유게시판_질문게시글 = createPost(자유게시판, 테스트유저_2, "자유게시판 질문게시글", "자유게시판 질문게시글 내용", PostCategory.질문); + } + private void saveLanguageTestRequirement( UniversityInfoForApply universityInfoForApply, LanguageTestType testType, @@ -351,4 +383,21 @@ private void saveLanguageTestRequirement( universityInfoForApplyRepository.save(universityInfoForApply); languageRequirementRepository.save(languageRequirement); } + + private Post createPost(Board board, SiteUser siteUser, String title, String content, PostCategory category) { + Post post = new Post( + title, + content, + false, + 0L, + 0L, + category + ); + post.setBoardAndSiteUser(board, siteUser); + Post savedPost = postRepository.save(post); + PostImage postImage = new PostImage("imageUrl"); + postImage.setPost(savedPost); + postImageRepository.save(postImage); + return savedPost; + } }