From 383519f1d681ccf124cc6fce328d41d6d087bfc8 Mon Sep 17 00:00:00 2001 From: aiaiaiai1 Date: Tue, 18 Jul 2023 22:21:55 +0900 Subject: [PATCH] =?UTF-8?q?test:=20(#67)=20Controller=20=EB=8B=A8=EC=9C=84?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8,=20Service=20=ED=86=B5=ED=95=A9?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 이전에 누락된 테스트 코드까지 추가함 --- .../contorller/CategoryControllerTest.java | 79 +++++++++++ .../category/service/CategoryServiceTest.java | 133 ++++++++++++++++++ 2 files changed, 212 insertions(+) create mode 100644 backend/src/test/java/com/votogether/domain/category/contorller/CategoryControllerTest.java create mode 100644 backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java diff --git a/backend/src/test/java/com/votogether/domain/category/contorller/CategoryControllerTest.java b/backend/src/test/java/com/votogether/domain/category/contorller/CategoryControllerTest.java new file mode 100644 index 000000000..1a2c8fd1d --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/category/contorller/CategoryControllerTest.java @@ -0,0 +1,79 @@ +package com.votogether.domain.category.contorller; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.doNothing; + +import com.votogether.domain.category.dto.response.CategoryResponse; +import com.votogether.domain.category.entity.Category; +import com.votogether.domain.category.service.CategoryService; +import io.restassured.module.mockmvc.RestAssuredMockMvc; +import java.util.List; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.http.HttpStatus; + +@WebMvcTest(CategoryController.class) +class CategoryControllerTest { + + @MockBean + CategoryService categoryService; + + @BeforeEach + void setUp() { + RestAssuredMockMvc.standaloneSetup(new CategoryController(categoryService)); + } + + @Test + @DisplayName("전체 카테고리 목록을 조회한다.") + void getAllCategories() { + // given + Category category = Category.builder() + .name("개발") + .build(); + given(categoryService.getAllCategories()).willReturn(List.of(new CategoryResponse(category))); + + // when + RestAssuredMockMvc. + given().log().all() + .when().get("/categories/guest") + .then().log().all() + .status(HttpStatus.OK) + .body("[0].id", Matchers.nullValue()) + .body("[0].name", Matchers.equalTo("개발")) + .body("[0].isFavorite", Matchers.equalTo(false)); + } + + @Test + @DisplayName("선호하는 카테고리를 선호 카테고리 목록에 추가한다.") + void addFavoriteCategory() { + // given + doNothing().when(categoryService).addFavoriteCategory(any(), any()); + + // when & then + RestAssuredMockMvc. + given().log().all() + .when().post("/categories/1/like") + .then().log().all() + .status(HttpStatus.CREATED); + } + + @Test + @DisplayName("선호 카테고리를 삭제한다.") + void removeFavoriteCategory() { + // given + doNothing().when(categoryService).removeFavoriteCategory(any(), any()); + + // when & then + RestAssuredMockMvc. + given().log().all() + .when().delete("/categories/1/like") + .then().log().all() + .status(HttpStatus.NO_CONTENT); + } + +} diff --git a/backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java b/backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java new file mode 100644 index 000000000..92d771f61 --- /dev/null +++ b/backend/src/test/java/com/votogether/domain/category/service/CategoryServiceTest.java @@ -0,0 +1,133 @@ +package com.votogether.domain.category.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; + +import com.votogether.domain.category.dto.response.CategoryResponse; +import com.votogether.domain.category.entity.Category; +import com.votogether.domain.category.repository.CategoryRepository; +import com.votogether.domain.member.entity.Gender; +import com.votogether.domain.member.entity.Member; +import com.votogether.domain.member.entity.MemberCategory; +import com.votogether.domain.member.entity.SocialType; +import com.votogether.domain.member.repository.MemberCategoryRepository; +import com.votogether.domain.member.repository.MemberRepository; +import java.time.LocalDateTime; +import java.util.List; +import org.junit.jupiter.api.Assertions; +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.transaction.annotation.Transactional; + +@SpringBootTest +@Transactional +class CategoryServiceTest { + + @Autowired + CategoryService categoryService; + + @Autowired + CategoryRepository categoryRepository; + + @Autowired + MemberCategoryRepository memberCategoryRepository; + + @Autowired + MemberRepository memberRepository; + + @Test + @DisplayName("모든 카테고리를 가져온다.") + void getAllCategories() { + // given + Category category = Category.builder() + .name("개발") + .build(); + + categoryRepository.save(category); + + // when + List categories = categoryService.getAllCategories(); + + // then + assertAll( + () -> assertThat(categories.get(0).id()).isNotNull(), + () -> assertThat(categories.get(0).name()).isEqualTo("개발"), + () -> assertThat(categories.get(0).isFavorite()).isFalse() + ); + } + + @Test + @DisplayName("선호하는 카테고리를 선호 카테고리 목록에 추가한다.") + void addFavoriteCategory() { + // given + Category category = Category.builder() + .name("개발") + .build(); + + Member member = Member.builder() + .gender(Gender.MALE) + .point(0) + .socialType(SocialType.GOOGLE) + .nickname("user1") + .socialId("kakao@gmail.com") + .birthDate( + LocalDateTime.of(1995, 7, 12, 0, 0)) + .build(); + + categoryRepository.save(category); + memberRepository.save(member); + + Long categoryId = category.getId(); + + // when + categoryService.addFavoriteCategory(member, categoryId); + + // then + MemberCategory memberCategory = memberCategoryRepository.findByMemberAndCategory(member, category).get(); + + Assertions.assertAll( + () -> assertThat(memberCategory.getMember()).isSameAs(member), + () -> assertThat(memberCategory.getCategory()).isSameAs(category) + ); + } + + @Test + @DisplayName("선호하는 카테고리를 선호 카테고리 목록에 삭제한다.") + void removeFavoriteCategory() { + // given + Category category = Category.builder() + .name("개발") + .build(); + + Member member = Member.builder() + .gender(Gender.MALE) + .point(0) + .socialType(SocialType.GOOGLE) + .nickname("user1") + .socialId("kakao@gmail.com") + .birthDate( + LocalDateTime.of(1995, 7, 12, 0, 0)) + .build(); + + MemberCategory memberCategory = MemberCategory.builder() + .member(member) + .category(category) + .build(); + + categoryRepository.save(category); + memberRepository.save(member); + memberCategoryRepository.save(memberCategory); + + Long categoryId = category.getId(); + + // when + categoryService.removeFavoriteCategory(member, categoryId); + + // then + boolean isEmpty = memberCategoryRepository.findByMemberAndCategory(member, category).isEmpty(); + assertThat(isEmpty).isTrue(); + } + +}