Skip to content

Commit

Permalink
[Order API TDD] JPA 적용하기
Browse files Browse the repository at this point in the history
  • Loading branch information
jihunparkme committed Feb 27, 2024
1 parent 1a5ce7a commit abe8fae
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 40 deletions.
2 changes: 2 additions & 0 deletions product-order-service/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,8 @@ final UpdateProductRequest request = new UpdateProductRequest(name, price, disco
**JPA 적용**

> [JPA 적용하기]()
## 주문 결제 기능 구현하기

**POJO**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,28 @@
package com.example.productorderservice.order;

import com.example.productorderservice.product.Product;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.springframework.util.Assert;

@Entity
@Table(name = "orders")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private final Product product;
private final int quantity;
@OneToOne
private Product product;
private int quantity;

public Order(final Product product, final int quantity) {
Assert.notNull(product, "상품은 필수입니다.");
Assert.isTrue(quantity > 0, "수량은 0보다 커야 합니다.");
this.product = product;
this.quantity = quantity;
}

public void assignId(final Long id) {
this.id = id;
}

public Long getId() {
return id;
}
}
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
package com.example.productorderservice.order;

import org.springframework.stereotype.Repository;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.HashMap;
import java.util.Map;

@Repository
class OrderRepository {
private Map<Long, Order> persistence = new HashMap<>();
private Long sequance = 0L;

public void save(final Order order) {
order.assignId(++sequance);
persistence.put(order.getId(), order);
}
interface OrderRepository extends JpaRepository<Order, Long> {
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,8 @@

import com.example.productorderservice.product.ApiTest;
import com.example.productorderservice.product.ProductSteps;
import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
import io.restassured.response.Response;
import org.junit.jupiter.api.Test;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;

import static org.assertj.core.api.Assertions.assertThat;

Expand All @@ -16,23 +12,13 @@ class OrderApiTest extends ApiTest {
@Test
void 상품주문() {
ProductSteps.requestAddProduct(ProductSteps.getAddProductRequest());
final CreateOrderRequest request = getCreateOrderRequest();
final var request = OrderSteps.getCreateOrderRequest();

final ExtractableResponse<Response> response = RestAssured.given().log().all()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(request)
.when()
.post("/orders")
.then()
.log().all().extract();
final var response = OrderSteps.requestCreateOrder(request);

assertThat(response.statusCode()).isEqualTo(HttpStatus.CREATED.value());
}

private static CreateOrderRequest getCreateOrderRequest() {
final long productId = 1L;
final int quantity = 2;
return new CreateOrderRequest(productId, quantity);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.example.productorderservice.order;

import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
import io.restassured.response.Response;
import org.springframework.http.MediaType;

public class OrderSteps {
public static final ExtractableResponse<Response> requestCreateOrder(final CreateOrderRequest request) {
return RestAssured.given().log().all()
.contentType(MediaType.APPLICATION_JSON_VALUE)
.body(request)
.when()
.post("/orders")
.then()
.log().all().extract();
}

public static final CreateOrderRequest getCreateOrderRequest() {
final long productId = 1L;
final int quantity = 2;
return new CreateOrderRequest(productId, quantity);
}
}

0 comments on commit abe8fae

Please sign in to comment.