#33 tdd(order-service): get product
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
package com.example.productorderservice.product;
|
||||
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
record GetProductResponse(
|
||||
long id,
|
||||
String name,
|
||||
int price,
|
||||
DiscountPolicy discountPolicy
|
||||
) {
|
||||
|
||||
GetProductResponse {
|
||||
Assert.notNull(id, "상품 ID는 필수입니다.");
|
||||
Assert.hasText(name, "상품명은 필수입니다.");
|
||||
Assert.isTrue(price > 0, "상품 가격은 0보다 커야 합니다.");
|
||||
Assert.notNull(discountPolicy, "할인 정책은 필수입니다.");
|
||||
}
|
||||
}
|
||||
@@ -15,4 +15,10 @@ class ProductAdapter implements ProductPort {
|
||||
public void save(Product product) {
|
||||
productRepository.save(product);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Product getProduct(long productId) {
|
||||
return productRepository.findById(productId)
|
||||
.orElseThrow(() -> new IllegalArgumentException("상품이 존재하지 않습니다."));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,4 +2,6 @@ package com.example.productorderservice.product;
|
||||
|
||||
interface ProductPort {
|
||||
void save(Product product);
|
||||
|
||||
Product getProduct(long productId);
|
||||
}
|
||||
|
||||
@@ -18,4 +18,15 @@ class ProductService {
|
||||
|
||||
productPort.save(product);
|
||||
}
|
||||
|
||||
public GetProductResponse getProduct(long productId) {
|
||||
final Product product = productPort.getProduct(productId);
|
||||
|
||||
return new GetProductResponse(
|
||||
product.getId(),
|
||||
product.getName(),
|
||||
product.getPrice(),
|
||||
product.getDiscountPolicy()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,20 +15,12 @@ class ProductApiTest extends ApiTest {
|
||||
@Test
|
||||
void 상품등록() {
|
||||
final var request = 상품등록요청_생성();
|
||||
final var response = 상품등록요청(request);
|
||||
final var response = ProductSteps.상품등록요청(request);
|
||||
|
||||
assertThat(response.statusCode()).isEqualTo(HttpStatus.CREATED.value());
|
||||
}
|
||||
|
||||
private static ExtractableResponse<Response> 상품등록요청(AddProductRequest request) {
|
||||
return RestAssured.given().log().all()
|
||||
.contentType(MediaType.APPLICATION_JSON_VALUE)
|
||||
.body(request)
|
||||
.when()
|
||||
.post("/products")
|
||||
.then()
|
||||
.log().all().extract();
|
||||
}
|
||||
|
||||
|
||||
private static AddProductRequest 상품등록요청_생성() {
|
||||
final String name = "상품명";
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package com.example.productorderservice.product;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
@SpringBootTest
|
||||
class ProductServiceTest {
|
||||
|
||||
@@ -13,18 +14,22 @@ class ProductServiceTest {
|
||||
|
||||
@Test
|
||||
void 상품등록() {
|
||||
final AddProductRequest request = 상품등록요청_생성();
|
||||
final AddProductRequest request = ProductSteps.상품등록요청_생성();
|
||||
|
||||
productService.addProduct(request);
|
||||
}
|
||||
|
||||
private static AddProductRequest 상품등록요청_생성() {
|
||||
final String name = "상품명";
|
||||
final int price = 1000;
|
||||
final DiscountPolicy discountPolicy = DiscountPolicy.NONE;
|
||||
@Test
|
||||
void 상품조회() {
|
||||
// 상품등록
|
||||
productService.addProduct(ProductSteps.상품등록요청_생성());
|
||||
final long productId = 1L;
|
||||
|
||||
final AddProductRequest request = new AddProductRequest(name, price, discountPolicy);
|
||||
return request;
|
||||
// 상품 조회
|
||||
final GetProductResponse response = productService.getProduct(productId);
|
||||
|
||||
// 상품의 응답을 검증
|
||||
assertThat(response).isNotNull();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.example.productorderservice.product;
|
||||
|
||||
import io.restassured.RestAssured;
|
||||
import io.restassured.response.ExtractableResponse;
|
||||
import io.restassured.response.Response;
|
||||
import org.springframework.http.MediaType;
|
||||
|
||||
public class ProductSteps {
|
||||
|
||||
public static ExtractableResponse<Response> 상품등록요청(AddProductRequest request) {
|
||||
return RestAssured.given().log().all()
|
||||
.contentType(MediaType.APPLICATION_JSON_VALUE)
|
||||
.body(request)
|
||||
.when()
|
||||
.post("/products")
|
||||
.then()
|
||||
.log().all().extract();
|
||||
}
|
||||
|
||||
public static AddProductRequest 상품등록요청_생성() {
|
||||
final String name = "상품명";
|
||||
final int price = 1000;
|
||||
final DiscountPolicy discountPolicy = DiscountPolicy.NONE;
|
||||
|
||||
final AddProductRequest request = new AddProductRequest(name, price, discountPolicy);
|
||||
return request;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user