From cc6879baefffd199bd83479f303d2034d9e4cabd Mon Sep 17 00:00:00 2001 From: EunChanNam Date: Sat, 11 Nov 2023 15:49:18 +0900 Subject: [PATCH] =?UTF-8?q?test:=20HairStyle=20API=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../HairStyleSearchController.java | 10 +- .../presentation/WishHairController.java | 12 +- .../common/support/ApiTestSupport.java | 1 - .../presentation/HairStyleApiTest.java | 140 ++++++++++++++++++ .../presentation/WishHairControllerTest.java | 109 ++++++++++++++ 5 files changed, 260 insertions(+), 12 deletions(-) create mode 100644 src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleApiTest.java create mode 100644 src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairControllerTest.java diff --git a/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleSearchController.java b/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleSearchController.java index 44246a4..9c2c2fa 100644 --- a/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleSearchController.java +++ b/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleSearchController.java @@ -31,8 +31,8 @@ public class HairStyleSearchController { @GetMapping("/recommend") public ResponseWrapper respondRecommendedHairStyle( - final @RequestParam(defaultValue = "ERROR") List tags, - final @FetchAuthInfo AuthInfo authInfo + @RequestParam(defaultValue = "ERROR") List tags, + @FetchAuthInfo AuthInfo authInfo ) { validateHasTag(tags); @@ -41,15 +41,15 @@ public ResponseWrapper respondRecommendedHairStyle( @GetMapping("/home") public ResponseWrapper findHairStyleByFaceShape( - final @FetchAuthInfo AuthInfo authInfo + @FetchAuthInfo AuthInfo authInfo ) { return hairStyleSearchService.recommendHairByFaceShape(authInfo.userId()); } @GetMapping("/wish") public PagedResponse findWishHairStyles( - final @FetchAuthInfo AuthInfo authInfo, - final @PageableDefault Pageable pageable) { + @FetchAuthInfo AuthInfo authInfo, + @PageableDefault Pageable pageable) { return hairStyleSearchService.findWishHairStyles(authInfo.userId(), pageable); } diff --git a/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairController.java b/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairController.java index 2c5f8f3..07c1089 100644 --- a/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairController.java +++ b/src/main/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairController.java @@ -25,8 +25,8 @@ public class WishHairController { @PostMapping(path = "{hairStyleId}") public ResponseEntity executeWish( - final @PathVariable Long hairStyleId, - final @FetchAuthInfo AuthInfo authInfo + @PathVariable Long hairStyleId, + @FetchAuthInfo AuthInfo authInfo ) { wishHairService.executeWish(hairStyleId, authInfo.userId()); @@ -36,8 +36,8 @@ public ResponseEntity executeWish( @DeleteMapping(path = "{hairStyleId}") public ResponseEntity cancelWish( - final @PathVariable Long hairStyleId, - final @FetchAuthInfo AuthInfo authInfo + @PathVariable Long hairStyleId, + @FetchAuthInfo AuthInfo authInfo ) { wishHairService.cancelWish(hairStyleId, authInfo.userId()); @@ -46,8 +46,8 @@ public ResponseEntity cancelWish( @GetMapping(path = {"{hairStyleId}"}) public ResponseEntity checkIsWishing( - final @PathVariable Long hairStyleId, - final @FetchAuthInfo AuthInfo authInfo + @PathVariable Long hairStyleId, + @FetchAuthInfo AuthInfo authInfo ) { WishHairResponse result = wishHairService.checkIsWishing(hairStyleId, authInfo.userId()); return ResponseEntity.ok(result); diff --git a/src/test/java/com/inq/wishhair/wesharewishhair/common/support/ApiTestSupport.java b/src/test/java/com/inq/wishhair/wesharewishhair/common/support/ApiTestSupport.java index 6750bf0..cf1a2b1 100644 --- a/src/test/java/com/inq/wishhair/wesharewishhair/common/support/ApiTestSupport.java +++ b/src/test/java/com/inq/wishhair/wesharewishhair/common/support/ApiTestSupport.java @@ -23,7 +23,6 @@ protected String getAccessToken(Long userId) { return authTokenManager.generate(userId).accessToken(); } - public String toJson(Object object) throws JsonProcessingException { return objectMapper.writeValueAsString(object); } diff --git a/src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleApiTest.java b/src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleApiTest.java new file mode 100644 index 0000000..932e304 --- /dev/null +++ b/src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/HairStyleApiTest.java @@ -0,0 +1,140 @@ +package com.inq.wishhair.wesharewishhair.hairstyle.presentation; + +import static com.inq.wishhair.wesharewishhair.common.fixture.AuthFixture.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import com.inq.wishhair.wesharewishhair.common.support.ApiTestSupport; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.HairStyle; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.HairStyleRepository; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.hashtag.Tag; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.wishhair.WishHair; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.wishhair.WishHairRepository; +import com.inq.wishhair.wesharewishhair.hairstyle.fixture.HairStyleFixture; +import com.inq.wishhair.wesharewishhair.user.domain.UserRepository; +import com.inq.wishhair.wesharewishhair.user.domain.entity.FaceShape; +import com.inq.wishhair.wesharewishhair.user.domain.entity.User; +import com.inq.wishhair.wesharewishhair.user.fixture.UserFixture; + +@DisplayName("[HairStyleApi 테스트]") +class HairStyleApiTest extends ApiTestSupport { + + @Autowired + private MockMvc mockMvc; + + @Autowired + private UserRepository userRepository; + @Autowired + private HairStyleRepository hairStyleRepository; + @Autowired + private WishHairRepository wishHairRepository; + + List hairStyles = List.of( + HairStyleFixture.getWomanHairStyle("A", List.of(Tag.CUTE, Tag.LIGHT, Tag.OBLONG)), + HairStyleFixture.getWomanHairStyle("B", List.of(Tag.CUTE, Tag.BANGS, Tag.OBLONG)), + HairStyleFixture.getWomanHairStyle("C", List.of(Tag.CUTE, Tag.SIMPLE, Tag.ROUND)) + ); + + @BeforeEach + void setUp() { + hairStyles.forEach(hairStyle -> hairStyleRepository.save(hairStyle)); + } + + @Test + @DisplayName("[헤어스타일 메인 추천 API 를 호출한다]") + void respondRecommendedHairStyle() throws Exception { + //given + User user = UserFixture.getFixedWomanUser(); + user.updateFaceShape(new FaceShape(Tag.OBLONG)); + Long userId = userRepository.save(user).getId(); + + //when + ResultActions actual = mockMvc.perform( + MockMvcRequestBuilders + .get("/api/hair_styles/recommend?tags=CUTE&tags=LIGHT") + .header(AUTHORIZATION, BEARER + getAccessToken(userId)) + ); + + //then + actual.andExpectAll( + status().isOk(), + jsonPath("$.result.size()").value(2) + ); + } + + @Test + @DisplayName("[헤어스타일 홈화면 추천 API 를 호출한다]") + void findHairStyleByFaceShape() throws Exception { + //given + User user = UserFixture.getFixedWomanUser(); + user.updateFaceShape(new FaceShape(Tag.OBLONG)); + Long userId = userRepository.save(user).getId(); + + //when + ResultActions actual = mockMvc.perform( + MockMvcRequestBuilders + .get("/api/hair_styles/home") + .header(AUTHORIZATION, BEARER + getAccessToken(userId)) + ); + + //then + actual.andExpectAll( + status().isOk(), + jsonPath("$.result.size()").value(2) + ); + } + + @Test + @DisplayName("[찜한 헤어스타일 조회 API 를 호출한다]") + void findWishHairStyles() throws Exception { + //given + User user = UserFixture.getFixedWomanUser(); + Long userId = userRepository.save(user).getId(); + + wishHairRepository.save(WishHair.createWishHair(userId, hairStyles.get(0).getId())); + wishHairRepository.save(WishHair.createWishHair(userId, hairStyles.get(2).getId())); + + //when + ResultActions actual = mockMvc.perform( + MockMvcRequestBuilders + .get("/api/hair_styles/wish") + .header(AUTHORIZATION, BEARER + getAccessToken(userId)) + ); + + //then + actual.andExpectAll( + status().isOk(), + jsonPath("$.result.size()").value(2) + ); + } + + @Test + @DisplayName("[모든 헤어스타일 간단한 정보 조회 API 를 호출한다]") + void findAllHairStyles() throws Exception { + //given + User user = UserFixture.getFixedWomanUser(); + Long userId = userRepository.save(user).getId(); + + //when + ResultActions actual = mockMvc.perform( + MockMvcRequestBuilders + .get("/api/hair_styles") + .header(AUTHORIZATION, BEARER + getAccessToken(userId)) + ); + + //then + actual.andExpectAll( + status().isOk(), + jsonPath("$.result.size()").value(3) + ); + } +} \ No newline at end of file diff --git a/src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairControllerTest.java b/src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairControllerTest.java new file mode 100644 index 0000000..9a475bc --- /dev/null +++ b/src/test/java/com/inq/wishhair/wesharewishhair/hairstyle/presentation/WishHairControllerTest.java @@ -0,0 +1,109 @@ +package com.inq.wishhair.wesharewishhair.hairstyle.presentation; + +import static com.inq.wishhair.wesharewishhair.common.fixture.AuthFixture.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +import java.util.List; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +import com.inq.wishhair.wesharewishhair.common.support.ApiTestSupport; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.HairStyle; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.HairStyleRepository; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.hashtag.Tag; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.wishhair.WishHair; +import com.inq.wishhair.wesharewishhair.hairstyle.domain.wishhair.WishHairRepository; +import com.inq.wishhair.wesharewishhair.hairstyle.fixture.HairStyleFixture; +import com.inq.wishhair.wesharewishhair.user.domain.UserRepository; +import com.inq.wishhair.wesharewishhair.user.domain.entity.User; +import com.inq.wishhair.wesharewishhair.user.fixture.UserFixture; + +@DisplayName("[WishHairApi 테스트]") +class WishHairControllerTest extends ApiTestSupport { + + @Autowired + private MockMvc mockMvc; + + @Autowired + private UserRepository userRepository; + @Autowired + private HairStyleRepository hairStyleRepository; + @Autowired + private WishHairRepository wishHairRepository; + + private final HairStyle hairStyle = HairStyleFixture.getWomanHairStyle( + "A", List.of(Tag.CUTE, Tag.LIGHT, Tag.OBLONG) + ); + + @BeforeEach + void setUp() { + hairStyleRepository.save(hairStyle); + } + + private Long setUser() { + User user = UserFixture.getFixedWomanUser(); + return userRepository.save(user).getId(); + } + + @Test + @DisplayName("[찜 API 를 호출한다]") + void executeWish() throws Exception { + //given + Long userId = setUser(); + + //when + ResultActions actual = mockMvc.perform( + MockMvcRequestBuilders + .post("/api/hair_styles/wish/" + hairStyle.getId()) + .header(AUTHORIZATION, BEARER + getAccessToken(userId)) + ); + + //then + actual.andExpect(status().isOk()); + } + + @Test + @DisplayName("[찜 취소 API 를 호출한다]") + void cancelWish() throws Exception { + //given + Long userId = setUser(); + wishHairRepository.save(WishHair.createWishHair(userId, hairStyle.getId())); + + //when + ResultActions actual = mockMvc.perform( + MockMvcRequestBuilders + .delete("/api/hair_styles/wish/" + hairStyle.getId()) + .header(AUTHORIZATION, BEARER + getAccessToken(userId)) + ); + + //then + actual.andExpect(status().isOk()); + } + + @Test + @DisplayName("[찜 확인 API 를 호출한다]") + void checkIsWishing() throws Exception { + //given + Long userId = setUser(); + wishHairRepository.save(WishHair.createWishHair(userId, hairStyle.getId())); + + //when + ResultActions actual = mockMvc.perform( + MockMvcRequestBuilders + .get("/api/hair_styles/wish/" + hairStyle.getId()) + .header(AUTHORIZATION, BEARER + getAccessToken(userId)) + ); + + //then + actual.andExpectAll( + status().isOk(), + jsonPath("$.isWishing").value(true) + ); + } +} \ No newline at end of file