From ee0a8a63c24d40b07a3996b4480c1a8c8e38000d Mon Sep 17 00:00:00 2001 From: TaeyeonRoyce Date: Tue, 30 Jan 2024 18:28:53 +0900 Subject: [PATCH] =?UTF-8?q?test:=20CartProduct=EC=9D=98=20=EC=98=B5?= =?UTF-8?q?=EC=85=98=20=EC=88=98=EC=A0=95=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=20=EC=BC=80=EC=9D=B4=EC=8A=A4=20=ED=85=8C?= =?UTF-8?q?=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 --- .../cart/CartProductControllerTest.kt | 111 +++++++++++++++++- 1 file changed, 105 insertions(+), 6 deletions(-) diff --git a/src/test/kotlin/com/petqua/presentation/cart/CartProductControllerTest.kt b/src/test/kotlin/com/petqua/presentation/cart/CartProductControllerTest.kt index 566def75..07d2c7a4 100644 --- a/src/test/kotlin/com/petqua/presentation/cart/CartProductControllerTest.kt +++ b/src/test/kotlin/com/petqua/presentation/cart/CartProductControllerTest.kt @@ -2,7 +2,9 @@ package com.petqua.presentation.cart import com.petqua.common.exception.ExceptionResponse import com.petqua.domain.product.ProductRepository +import com.petqua.exception.cart.CartProductExceptionType.FORBIDDEN_CART_PRODUCT import com.petqua.exception.cart.CartProductExceptionType.INVALID_DELIVERY_METHOD +import com.petqua.exception.cart.CartProductExceptionType.NOT_FOUND_CART_PRODUCT import com.petqua.exception.cart.CartProductExceptionType.PRODUCT_QUANTITY_OVER_MAXIMUM import com.petqua.exception.product.ProductExceptionType.NOT_FOUND_PRODUCT import com.petqua.presentation.cart.dto.SaveCartProductRequest @@ -12,7 +14,11 @@ import com.petqua.test.fixture.product import org.assertj.core.api.Assertions.assertThat import org.assertj.core.api.SoftAssertions.assertSoftly import org.springframework.http.HttpHeaders -import org.springframework.http.HttpStatus +import org.springframework.http.HttpStatus.BAD_REQUEST +import org.springframework.http.HttpStatus.CREATED +import org.springframework.http.HttpStatus.FORBIDDEN +import org.springframework.http.HttpStatus.NOT_FOUND +import org.springframework.http.HttpStatus.NO_CONTENT class CartProductControllerTest( private val productRepository: ProductRepository, @@ -32,7 +38,7 @@ class CartProductControllerTest( Then("봉달 목록에 상품이 저장된다") { assertSoftly { - it.assertThat(response.statusCode).isEqualTo(HttpStatus.CREATED.value()) + it.assertThat(response.statusCode).isEqualTo(CREATED.value()) it.assertThat(response.header(HttpHeaders.LOCATION)).contains("/carts/items") } } @@ -52,7 +58,7 @@ class CartProductControllerTest( Then("예외가 발생한다") { val errorResponse = response.`as`(ExceptionResponse::class.java) assertSoftly { - it.assertThat(response.statusCode).isEqualTo(HttpStatus.BAD_REQUEST.value()) + it.assertThat(response.statusCode).isEqualTo(BAD_REQUEST.value()) it.assertThat(errorResponse.message).isEqualTo(INVALID_DELIVERY_METHOD.errorMessage()) } } @@ -70,7 +76,7 @@ class CartProductControllerTest( Then("예외가 발생한다") { val errorResponse = response.`as`(ExceptionResponse::class.java) assertSoftly { - it.assertThat(response.statusCode).isEqualTo(HttpStatus.NOT_FOUND.value()) + it.assertThat(response.statusCode).isEqualTo(NOT_FOUND.value()) it.assertThat(errorResponse.message).isEqualTo(NOT_FOUND_PRODUCT.errorMessage()) } } @@ -88,7 +94,7 @@ class CartProductControllerTest( Then("예외가 발생한다") { val errorResponse = response.`as`(ExceptionResponse::class.java) assertSoftly { - it.assertThat(response.statusCode).isEqualTo(HttpStatus.BAD_REQUEST.value()) + it.assertThat(response.statusCode).isEqualTo(BAD_REQUEST.value()) it.assertThat(errorResponse.message).isEqualTo(PRODUCT_QUANTITY_OVER_MAXIMUM.errorMessage()) } } @@ -112,7 +118,100 @@ class CartProductControllerTest( ) Then("봉달 상품의 옵션이 수정된다") { - assertThat(response.statusCode).isEqualTo(HttpStatus.NO_CONTENT.value()) + assertThat(response.statusCode).isEqualTo(NO_CONTENT.value()) + } + } + } + + Given("봉달 상품의 옵션 수정시") { + val cartProductId = saveCartProductAndReturnId(memberAuthResponse.accessToken) + + When("존재하지 않는 봉달 상품 수정을 요청 하면") { + val request = UpdateCartProductOptionRequest( + quantity = 2, + isMale = false, + deliveryMethod = "SAFETY" + ) + + val response = requestUpdateCartProductOption( + 999L, + request, + memberAuthResponse.accessToken + ) + + Then("예외가 발생한다") { + val errorResponse = response.`as`(ExceptionResponse::class.java) + assertSoftly { + it.assertThat(response.statusCode).isEqualTo(NOT_FOUND.value()) + it.assertThat(errorResponse.message).isEqualTo(NOT_FOUND_CART_PRODUCT.errorMessage()) + } + } + } + + When("유효하지 않은 상품 수량으로 수정 하면") { + val request = UpdateCartProductOptionRequest( + quantity = 1_000, + isMale = false, + deliveryMethod = "SAFETY" + ) + + val response = requestUpdateCartProductOption( + cartProductId, + request, + memberAuthResponse.accessToken + ) + + Then("예외가 발생한다") { + val errorResponse = response.`as`(ExceptionResponse::class.java) + assertSoftly { + it.assertThat(response.statusCode).isEqualTo(BAD_REQUEST.value()) + it.assertThat(errorResponse.message).isEqualTo(PRODUCT_QUANTITY_OVER_MAXIMUM.errorMessage()) + } + } + } + + When("지원하지 않는 배송 방식으로 수정 하면") { + val request = UpdateCartProductOptionRequest( + quantity = 2, + isMale = false, + deliveryMethod = "NOT_SUPPORTED" + ) + + val response = requestUpdateCartProductOption( + cartProductId, + request, + memberAuthResponse.accessToken + ) + + Then("예외가 발생한다") { + val errorResponse = response.`as`(ExceptionResponse::class.java) + assertSoftly { + it.assertThat(response.statusCode).isEqualTo(BAD_REQUEST.value()) + it.assertThat(errorResponse.message).isEqualTo(INVALID_DELIVERY_METHOD.errorMessage()) + } + } + } + + When("다른 회원의 상품을 수정 하면") { + val otherMemberResponse = signInAsMember() + val request = UpdateCartProductOptionRequest( + quantity = 2, + isMale = false, + deliveryMethod = "SAFETY" + ) + + val response = requestUpdateCartProductOption( + cartProductId, + request, + otherMemberResponse.accessToken + ) + + Then("예외가 발생한다") { + val errorResponse = response.`as`(ExceptionResponse::class.java) + assertSoftly { + it.assertThat(response.statusCode).isEqualTo(FORBIDDEN.value()) + it.assertThat(errorResponse.message).isEqualTo(FORBIDDEN_CART_PRODUCT.errorMessage()) + } } } }