diff --git a/README.md b/README.md index 6d70683..38ae4c1 100644 --- a/README.md +++ b/README.md @@ -306,6 +306,7 @@ - [x] 판매자가 아닌 사용자의 접근 토큰을 사용하면 403 Forbidden 상태코드를 반환한다 - [x] imageUri 속성이 URI 형식을 따르지 않으면 400 Bad Request 상태코드를 반환한다 - [x] 올바르게 요청하면 등록된 상품 정보에 접근하는 Location 헤더를 반환한다 +- [x] priceAmount 속성이 0보다 작으면 400 Bad Request 상태코드를 반환한다 ### 판매자 상품 조회 diff --git a/src/main/java/commerce/commandmodel/RegisterProductCommandExecutor.java b/src/main/java/commerce/commandmodel/RegisterProductCommandExecutor.java index a87ad78..973ce88 100644 --- a/src/main/java/commerce/commandmodel/RegisterProductCommandExecutor.java +++ b/src/main/java/commerce/commandmodel/RegisterProductCommandExecutor.java @@ -1,5 +1,6 @@ package commerce.commandmodel; +import java.math.BigDecimal; import java.net.URI; import java.time.LocalDateTime; import java.util.UUID; @@ -29,7 +30,7 @@ public void execute( } private static void validateCommand(RegisterProductCommand command) { - if (isValidUri(command.imageUri()) == false) { + if (command.priceAmount().compareTo(BigDecimal.ZERO) < 0) { throw new InvalidCommandException(); } } diff --git a/src/test/java/test/commerce/RegisterProductCommandGenerator.java b/src/test/java/test/commerce/RegisterProductCommandGenerator.java index b486e4a..d43ba36 100644 --- a/src/test/java/test/commerce/RegisterProductCommandGenerator.java +++ b/src/test/java/test/commerce/RegisterProductCommandGenerator.java @@ -30,6 +30,18 @@ public static RegisterProductCommand generateRegisterProductCommandWithImageUri( ); } + public static RegisterProductCommand generateRegisterProductCommandWithPriceAmount( + BigDecimal priceAmount + ) { + return new RegisterProductCommand( + generateProductName(), + generateProductImageUri(), + generateProductDescription(), + priceAmount, + generateProductStockQuantity() + ); + } + private static String generateProductName() { return "name" + UUID.randomUUID(); } diff --git a/src/test/java/test/commerce/api/seller/products/POST_specs.java b/src/test/java/test/commerce/api/seller/products/POST_specs.java index 16fd506..1f8b78f 100644 --- a/src/test/java/test/commerce/api/seller/products/POST_specs.java +++ b/src/test/java/test/commerce/api/seller/products/POST_specs.java @@ -1,5 +1,6 @@ package test.commerce.api.seller.products; +import java.math.BigDecimal; import java.net.URI; import java.util.UUID; import java.util.function.Predicate; @@ -16,6 +17,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static test.commerce.RegisterProductCommandGenerator.generateRegisterProductCommand; import static test.commerce.RegisterProductCommandGenerator.generateRegisterProductCommandWithImageUri; +import static test.commerce.RegisterProductCommandGenerator.generateRegisterProductCommandWithPriceAmount; @CommerceApiTest @DisplayName("POST /seller/products") @@ -116,4 +118,25 @@ private Predicate endsWithUUID() { } }; } + + @ParameterizedTest + @ValueSource(doubles = { -1, -0.1 }) + void priceAmount_속성이_0보다_작으면_400_Bad_Request_상태코드를_반환한다( + double priceAmountValue, + @Autowired TestFixture fixture + ) { + // Arrange + fixture.createSellerThenSetAsDefaultUser(); + BigDecimal priceAmount = new BigDecimal(priceAmountValue); + + // Act + ResponseEntity response = fixture.client().postForEntity( + "/seller/products", + generateRegisterProductCommandWithPriceAmount(priceAmount), + Void.class + ); + + // Assert + assertThat(response.getStatusCode().value()).isEqualTo(400); + } }