Skip to content

Commit

Permalink
test: (#67) Controller 단위테스트, Service 통합테스트 추가
Browse files Browse the repository at this point in the history
- 이전에 누락된 테스트 코드까지 추가함
  • Loading branch information
aiaiaiai1 committed Jul 18, 2023
1 parent f4b1f67 commit 383519f
Show file tree
Hide file tree
Showing 2 changed files with 212 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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<CategoryResponse> 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("[email protected]")
.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("[email protected]")
.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();
}

}

0 comments on commit 383519f

Please sign in to comment.