Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

테스트 #34

Closed
wants to merge 80 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
fe2189e
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
52de091
#30 상품 테스트 작성2
kimsuyeondev May 19, 2024
6103cc3
#30 상품 테스트 작성3
kimsuyeondev May 19, 2024
b12c233
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
4387a45
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
e53e6f2
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
17b7c73
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
8e7eba3
#30 상품 테스트 작성
kimsuyeondev May 20, 2024
e15d308
#30 테스트 작성
kimsuyeondev May 20, 2024
f35b4d2
#30 테스트 작성
kimsuyeondev May 21, 2024
a56169a
#30 테스트 작성
kimsuyeondev May 21, 2024
85b846b
#30 테스트 작성
kimsuyeondev May 21, 2024
d90a28e
#30 테스트
kimsuyeondev May 21, 2024
b5210f4
#30 테스트
kimsuyeondev May 21, 2024
d17311e
#30 테스트
kimsuyeondev May 21, 2024
e0937f3
#30 테스트
kimsuyeondev May 21, 2024
252d58e
#30 테스트
kimsuyeondev May 22, 2024
5b32e48
#30 mysql 설정수정
kimsuyeondev May 22, 2024
7067ff8
#30 mysql 설정수정
kimsuyeondev May 22, 2024
7a7b39d
#30 mysql 설정수정
kimsuyeondev May 22, 2024
915c08b
#30 mysql 설정수정
kimsuyeondev May 22, 2024
9709f31
#30 mysql 설정수정
kimsuyeondev May 22, 2024
d1f3503
#30 mysql 설정수정
kimsuyeondev May 22, 2024
ef91e96
#30 mysql 설정수정
kimsuyeondev May 22, 2024
4fd5056
#30 mysql 설정수정
kimsuyeondev May 25, 2024
778c7fb
#30 mysql 설정수정
kimsuyeondev May 25, 2024
1af4f03
#30 mysql 설정수정
kimsuyeondev May 25, 2024
31dff66
#30 mysql 설정수정
kimsuyeondev May 25, 2024
a43cb6b
#30 mysql 설정수정
kimsuyeondev May 25, 2024
6386180
#30 mysql 설정수정
kimsuyeondev May 25, 2024
f7adcbc
#30 mysql 설정수정
kimsuyeondev May 25, 2024
add52cf
#30 mysql 설정수정
kimsuyeondev May 25, 2024
f2f5d89
#30 mysql 설정수정
kimsuyeondev May 25, 2024
0c2710f
#30 mysql 설정수정
kimsuyeondev May 25, 2024
e3d5332
#30 mysql 설정수정
kimsuyeondev May 25, 2024
b42cfe5
#30 mysql 설정수정
kimsuyeondev May 25, 2024
caf84b8
#30 되라
kimsuyeondev May 25, 2024
082ff0e
#30 되라
kimsuyeondev May 25, 2024
6ce5525
#30 되라
kimsuyeondev May 25, 2024
f58c2ad
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
fb76d0d
#30 상품 테스트 작성2
kimsuyeondev May 19, 2024
65e7631
#30 상품 테스트 작성3
kimsuyeondev May 19, 2024
1a794f8
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
50afe12
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
cb9cc49
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
458754c
#30 상품 테스트 작성
kimsuyeondev May 19, 2024
57b7886
#30 상품 테스트 작성
kimsuyeondev May 20, 2024
6a3dd85
#30 테스트 작성
kimsuyeondev May 20, 2024
296f58a
#30 테스트 작성
kimsuyeondev May 21, 2024
53aa31e
#30 테스트 작성
kimsuyeondev May 21, 2024
982a338
#30 테스트 작성
kimsuyeondev May 21, 2024
92e3837
#30 테스트
kimsuyeondev May 21, 2024
16463dc
#30 테스트
kimsuyeondev May 21, 2024
c04c558
#30 테스트
kimsuyeondev May 21, 2024
51252e0
#30 테스트
kimsuyeondev May 21, 2024
3be14e1
#30 테스트
kimsuyeondev May 22, 2024
cde235a
#30 mysql 설정수정
kimsuyeondev May 22, 2024
b8c46b1
#30 mysql 설정수정
kimsuyeondev May 22, 2024
3c7d0a7
#30 mysql 설정수정
kimsuyeondev May 22, 2024
a2299d6
#30 mysql 설정수정
kimsuyeondev May 22, 2024
ccbb163
#30 mysql 설정수정
kimsuyeondev May 22, 2024
56b1aca
#30 mysql 설정수정
kimsuyeondev May 22, 2024
fe48e8c
#30 mysql 설정수정
kimsuyeondev May 22, 2024
73d0d0f
#30 mysql 설정수정
kimsuyeondev May 25, 2024
5565f02
#30 mysql 설정수정
kimsuyeondev May 25, 2024
0002d36
#30 mysql 설정수정
kimsuyeondev May 25, 2024
9fb7f30
#30 mysql 설정수정
kimsuyeondev May 25, 2024
238867e
#30 mysql 설정수정
kimsuyeondev May 25, 2024
daa5814
#30 mysql 설정수정
kimsuyeondev May 25, 2024
80ed79e
#30 mysql 설정수정
kimsuyeondev May 25, 2024
fd1cfe0
#30 mysql 설정수정
kimsuyeondev May 25, 2024
0128eec
#30 mysql 설정수정
kimsuyeondev May 25, 2024
f5d5028
#30 mysql 설정수정
kimsuyeondev May 25, 2024
1ceadfe
#30 mysql 설정수정
kimsuyeondev May 25, 2024
f93f6fc
#30 mysql 설정수정
kimsuyeondev May 25, 2024
852692f
#30 되라
kimsuyeondev May 25, 2024
df7e0f6
#30 되라
kimsuyeondev May 25, 2024
f65388a
#30 되라
kimsuyeondev May 25, 2024
704bf4e
#30 되라
kimsuyeondev May 25, 2024
2e354c4
#30 되라
kimsuyeondev May 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.cosmetics.goods;

import com.cosmetics.domain.goods.dto.GoodsItemManagement;
import com.cosmetics.domain.goods.dto.GoodsManagement;
import com.cosmetics.domain.goods.dto.GoodsManagementRequest;
import com.cosmetics.domain.goods.dto.GoodsManagementResponse;
import com.cosmetics.domain.goods.dto.item.GoodsItemManagementRequest;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.*;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -14,7 +15,6 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotNull;
Expand All @@ -30,74 +30,71 @@ public class GoodsApiApplicationTest {
@Autowired
private TestRestTemplate testRestTemplate;

private static GoodsManagement requestGoods() {
//item
List<GoodsItemManagement> items = new ArrayList<>();
private static GoodsManagementRequest requestGoods() {
//item 왜반영이안ddddd되냐
List<GoodsItemManagementRequest> items = new ArrayList<>();

items.add(GoodsItemManagement.builder()
items.add(GoodsItemManagementRequest.builder()
.itemNm("건성용")
.itemQty(50).build());
items.add(GoodsItemManagement.builder()
items.add(GoodsItemManagementRequest.builder()
.itemNm("지성용")
.itemQty(30).build());

return GoodsManagement.builder()

return GoodsManagementRequest.builder()
.category("스킨케어")
.goodsNm("닥터스킨")
.marketPrice(15000)
.salePrice(12000)
.supplyPrice(10000)
.vendorId("lv202400002")
.vendorId(1L)
.stockQty(80)
.brandNm("닥터펫")
.saleStartDtime("2024-05-01 00:00:00")
.saleEndDtime("2024-08-01 00:00:00")
.image("https://cdn.localhost:8081/images/lv202400002/goods/image_1.png")
.addImage("https://cdn.localhost:8081/images/lv202400002/goods/image_2.png")
.item(items)
.items(items)
.build();
}

@DisplayName("상품등록")
@Test
@Order(1)
public void 상품등록() throws Exception{
public void 상품등록() throws Exception {
String url = "http://localhost:" + port + "/v1/goods";
GoodsManagement goodsManagement = requestGoods();
ResponseEntity<GoodsManagement> responseEntity = testRestTemplate.postForEntity(url, goodsManagement, GoodsManagement.class);
GoodsManagementRequest goodsManagementRequest = requestGoods();

ResponseEntity<GoodsManagementResponse> responseEntity = testRestTemplate.postForEntity(url, goodsManagementRequest, GoodsManagementResponse.class);

assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.CREATED);
assertNotNull(responseEntity.getBody().getGoodsNo());
assertThat(responseEntity.getBody().getResultCode()).isEqualTo("0000");
}

@DisplayName("상품조회")
@DisplayName("상품 조회")
@Test
@Order(2)
public void 상품조회() throws Exception{
public void 상품조회() throws Exception {
String url = "http://localhost:" + port + "/v1/goods/{goodsNo}";
ResponseEntity<GoodsManagement> responseEntity = testRestTemplate.getForEntity(url, GoodsManagement.class,"240501100001");
ResponseEntity<GoodsManagementResponse> responseEntity = testRestTemplate.getForEntity(url, GoodsManagementResponse.class, 1L);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(responseEntity.getBody().getGoodsNm()).isEqualTo("닥터스킨");
}

@DisplayName("상품삭제")
/* @DisplayName("상품 삭제")
@Test
@Order(3)
public void 상품삭제() throws Exception{
String url = "http://localhost:" + port + "/v1/goods/{goodsNo}";
ResponseEntity<Map> responseEntity = testRestTemplate.exchange(url, HttpMethod.DELETE, null, Map.class, "240501100001");
public void 상품_삭제(){
String url = "http://localhost:" + port + "/v1/goods/{goodsNo}";
ResponseEntity<GoodsManagementResponse> responseEntity = testRestTemplate.exchange(url, HttpMethod.DELETE, null, GoodsManagementResponse.class, 26L);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
assertThat(responseEntity.getBody().get("resultCode")).isEqualTo("0000");
}
}*/

@Test
@Order(4)
@DisplayName("삭제할 상품번호가 존재하지 않습니다._ llegalArgumentExceptionHandler 테스트")
public void illegalGoodsTest() throws Exception {
//통합테스트에서도 이런 테스트를 해보는게 맞는걸까? 확인필요
String goodsNo = "존재하지않는상품번호";
String url = "http://localhost:" + port + "/v1/goods/{goodsNo}";
ResponseEntity<GoodsManagement> responseEntity = testRestTemplate.exchange(url, HttpMethod.DELETE, null, GoodsManagement.class, goodsNo);
String url = "http://localhost:" + port + "/v1/goods/{goodsNo}";
ResponseEntity<GoodsManagementResponse> responseEntity = testRestTemplate.exchange(url, HttpMethod.DELETE, null, GoodsManagementResponse.class, goodsNo);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.BAD_REQUEST);
assertThat(jsonPath("errorCode").value("INVALID_PARAMETER"));
assertThat(jsonPath("errorMessage").value("존재하지 않는 상품입니다"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import com.cosmetics.api.goods.controller.GoodsController;
import com.cosmetics.domain.exception.custom.CustomException;
import com.cosmetics.domain.exception.error.GoodsErrorManagement;
import com.cosmetics.domain.goods.dto.GoodsItemManagement;
import com.cosmetics.domain.goods.dto.GoodsManagement;
import com.cosmetics.domain.goods.dto.GoodsManagementRequest;
import com.cosmetics.domain.goods.dto.item.GoodsItemManagementRequest;
import com.cosmetics.domain.goods.service.GoodsService;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
Expand All @@ -21,14 +21,19 @@
import java.util.ArrayList;
import java.util.List;

import static org.hamcrest.CoreMatchers.anyOf;
import static org.hamcrest.Matchers.is;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

/**
* 컨트롤러 단위 테스트
* 들어가면 안되는 필드가 들어갔는지는 어떻게 테스트 할 수 있을까요?
*/
@WebMvcTest(GoodsController.class)
@Slf4j
Expand All @@ -44,7 +49,7 @@ public class GoodsControllerTest2 {
@DisplayName("상품등록 파라미터가 누락되었을 경우_validation handler_MethodArgumentNotValidException 테스트")
public void validGoodsTest() throws Exception {
//given
GoodsManagement goodsManagement = requestValidGoods();
GoodsManagementRequest goodsManagement = requestValidGoods();

//when
ResultActions resultActions = mockMvc.perform(
Expand All @@ -56,33 +61,33 @@ public void validGoodsTest() throws Exception {
//then
resultActions.andExpect(jsonPath("errorCode").value("INVALID_PARAMETER"));
resultActions.andExpect(jsonPath("errorMessage").value("유효하지 않는 값입니다"));
resultActions.andExpect(jsonPath("$.fieldErrorList[0].field").value("goodsNm"));
resultActions.andExpect(jsonPath("$.fieldErrorList[0].field").value(anyOf(is("items[0].itemNm"), is("goodsNm"))));
resultActions.andExpect(jsonPath("$.fieldErrorList[0].message").value("must not be blank"));
resultActions.andExpect(jsonPath("$.fieldErrorList[1].field").value("item[0].itemNm"));
resultActions.andExpect(jsonPath("$.fieldErrorList[1].field").value(anyOf(is("items[0].itemNm"), is("goodsNm"))));
resultActions.andExpect(jsonPath("$.fieldErrorList[1].message").value("must not be blank"));
}

@Test
@DisplayName("상품등록 시 내부오류로 상품등록이 실패했을 경우_커스텀 예외_CustomExceptionHandler 테스트")
public void saveGoodsFailErrorTest() throws Exception {
GoodsManagement goodsManagement = requestGoods();
GoodsManagementRequest goodsManagement = requestGoods();

given(goodsService.save(goodsManagement)).willThrow(new CustomException(GoodsErrorManagement.GOODS_SAVE_ERROR));
given(goodsService.save(any())).willThrow(new CustomException(GoodsErrorManagement.GOODS_SAVE_ERROR));

//when
ResultActions resultActions = mockMvc.perform(
post("http://localhost:8080/v1/goods")
.contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(goodsManagement)));
resultActions.andDo(print()).andExpect(jsonPath("errorCode").value("GOODS_SAVE_ERROR"));
resultActions.andExpect(jsonPath("errorMessage").value("상품 등록에 실패하였습니다 잠시 후에 시도해 주세요"));

//확인필요 실패 illegalGoodsTest는 되는데 왜 이거는 안되는지 도저히 모르겠습니다
}

@Test
@DisplayName("삭제할 상품번호가 존재하지 않습니다_IllegalArgumentExceptionHandler 테스트 ")
public void illegalGoodsTest() throws Exception {
String goodsNo = "2024050100001";
given(goodsService.deleteGoods(goodsNo)).willThrow(new IllegalArgumentException("존재하지 않는 상품입니다"));
Long goodsNo = 1L;
given(goodsService.deleteByGoodsNo(goodsNo)).willThrow(new IllegalArgumentException("존재하지 않는 상품입니다"));

mockMvc.perform(MockMvcRequestBuilders.delete("http://localhost:8080/v1/goods/{goodsNo}", goodsNo))
.andDo(print())
Expand All @@ -91,59 +96,59 @@ public void illegalGoodsTest() throws Exception {
.andExpect(jsonPath("errorMessage").value("존재하지 않는 상품입니다"));
}

private static GoodsManagement requestGoods() {
private static GoodsManagementRequest requestGoods() {
//item
List<GoodsItemManagement> items = new ArrayList<>();
List<GoodsItemManagementRequest> items = new ArrayList<>();

items.add(GoodsItemManagement.builder()
items.add(GoodsItemManagementRequest.builder()
.itemNm("건성용")
.itemQty(50).build());
items.add(GoodsItemManagement.builder()
items.add(GoodsItemManagementRequest.builder()
.itemNm("지성용")
.itemQty(30).build());

return GoodsManagement.builder()
return GoodsManagementRequest.builder()
.category("스킨케어")
.goodsNm("닥터스킨")
.marketPrice(15000)
.salePrice(12000)
.supplyPrice(10000)
.vendorId("lv202400002")
.vendorId(1L)
.stockQty(80)
.brandNm("닥터펫")
.saleStartDtime("2024-05-01 00:00:00")
.saleEndDtime("2024-08-01 00:00:00")
.image("https://cdn.localhost:8081/images/lv202400002/goods/image_1.png")
.addImage("https://cdn.localhost:8081/images/lv202400002/goods/image_2.png")
.item(items)
.items(items)
.build();
}

private static GoodsManagement requestValidGoods() {
private static GoodsManagementRequest requestValidGoods() {
//item
List<GoodsItemManagement> items = new ArrayList<>();
List<GoodsItemManagementRequest> items = new ArrayList<>();

items.add(GoodsItemManagement.builder()
items.add(GoodsItemManagementRequest.builder()
//.itemNm("건성용")
.itemQty(50).build());
items.add(GoodsItemManagement.builder()
items.add(GoodsItemManagementRequest.builder()
.itemNm("지성용")
.itemQty(30).build());

return GoodsManagement.builder()
return GoodsManagementRequest.builder()
.category("스킨케어")
//.goodsNm("닥터스킨")
.marketPrice(15000)
.salePrice(12000)
.supplyPrice(10000)
.vendorId("lv202400002")
.vendorId(1L)
.stockQty(80)
.brandNm("닥터펫")
.saleStartDtime("2024-05-01 00:00:00")
.saleEndDtime("2024-08-01 00:00:00")
.image("https://cdn.localhost:8081/images/lv202400002/goods/image_1.png")
.addImage("https://cdn.localhost:8081/images/lv202400002/goods/image_2.png")
.item(items)
.items(items)
.build();
}

Expand Down

This file was deleted.

This file was deleted.

Loading
Loading