Skip to content

Commit

Permalink
test: CartProduct의 옵션 수정에 대한 예외 케이스 테스트 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
TaeyeonRoyce committed Jan 30, 2024
1 parent 5a692ae commit ee0a8a6
Showing 1 changed file with 105 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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,
Expand All @@ -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")
}
}
Expand All @@ -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())
}
}
Expand All @@ -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())
}
}
Expand All @@ -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())
}
}
Expand All @@ -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())
}
}
}
}
Expand Down

0 comments on commit ee0a8a6

Please sign in to comment.