Skip to content

Commit

Permalink
Feat: 특정 Products의 meal type 조회 기능의 리포지토리 구현
Browse files Browse the repository at this point in the history
- 테스트 작성

Co-authored-by: “Louie-03” <dhdustnr0134@naver.com>
  • Loading branch information
ku-kim and Louie-03 committed Apr 21, 2022
1 parent 06cebb6 commit ca34b5a
Show file tree
Hide file tree
Showing 9 changed files with 139 additions and 22 deletions.
Expand Up @@ -21,12 +21,13 @@ public static List<ProductMealTypeResponse> toProductsMealTypeResponseFromDomain
private static ProductMealTypeResponse toProductMealTypeResponseFromDomain(Product product) {
return new ProductMealTypeResponse(
product.getId(),
product.getImage().get(0).getImage(),
product.getImage().get(0).getImageUrl(),
product.getProductName(),
product.getDescription(),
product.getFixedPrice(),
product.getOriginalPrice(), //TODO : fixed 구현
product.getOriginalPrice(),
product.getDisCountPolicy().getPolicyName());
"a"); // TODO event 구현
// product.getDisCountPolicy().getPolicyName());
}

}
Expand Up @@ -2,17 +2,23 @@

import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;

@Getter
public class DisCountPolicy {
@Setter
@Table("DISCOUNT_POLICY")
public class DiscountPolicy {

@Id
private Long id;
private String policyName;
private float discountRate;
private LocalDateTime startAt;
private LocalDateTime endAt;

public DisCountPolicy(String policyName) {
public DiscountPolicy(String policyName) {
this.policyName = policyName;
}
}
13 changes: 10 additions & 3 deletions BE/src/main/java/sidedish/com/domain/Image.java
@@ -1,13 +1,20 @@
package sidedish.com.domain;

import lombok.Getter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;

@Getter
@Table("PRODUCT_IMAGE")
@ToString
public class Image {

private String image;
@Id
private Long id;
private String imageUrl;

public Image(String image) {
this.image = image;
public Image(String imageUrl) {
this.imageUrl = imageUrl;
}
}
12 changes: 10 additions & 2 deletions BE/src/main/java/sidedish/com/domain/Product.java
Expand Up @@ -3,17 +3,25 @@
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.MappedCollection;

@Getter
@ToString
@AllArgsConstructor

public class Product {

@Id
private Long id;
private Long discountPolicyId;
@MappedCollection(idColumn = "ID", keyColumn = "ID")
private List<Image> image;
private String productName;
private String description;
private long fixedPrice;
private long originalPrice;
private DisCountPolicy disCountPolicy;
private String mealCategory;
private String bestCategory;

}
@@ -1,11 +1,16 @@
package sidedish.com.repository;

import java.util.List;
import org.springframework.data.jdbc.repository.query.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import sidedish.com.domain.Product;

@Repository
public interface ProductsRepository {
public interface ProductsRepository extends CrudRepository<Product, Long> {

List<Product> findByMealType(String meal);
@Query("select id, discount_policy_id, product_name, description, original_price, meal_category "
+ "from product where meal_category = :mealType")
List<Product> findByMealType(@Param("mealType") String mealType);
}
1 change: 1 addition & 0 deletions BE/src/main/java/sidedish/com/service/ProductsService.java
Expand Up @@ -18,6 +18,7 @@ public ProductsService(ProductsRepository productsRepository) {

public List<ProductMealTypeResponse> findByMealType(String meal) {
List<Product> products = productsRepository.findByMealType(meal);

return ProductsDtoMapper.toProductsMealTypeResponseFromDomain(products);
}
}
Expand Up @@ -16,7 +16,6 @@
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import sidedish.com.controller.model.ProductMealTypeResponse;
import sidedish.com.domain.DisCountPolicy;
import sidedish.com.domain.Image;
import sidedish.com.domain.Product;
import sidedish.com.service.ProductsService;
Expand Down Expand Up @@ -46,10 +45,12 @@ class ProductsControllerTest {
private List<ProductMealTypeResponse> createProductsMealTypeResponse() {
List<Product> products = new ArrayList<>();

products.add(new Product(5L, List.of(new Image("http://kukukukukukukukuku.com/test.jpg")),
"한돈 돼지 김치찌개", "김치찌개에는 역시 돼지고기", 8370, 9300, new DisCountPolicy("이벤트특가")));
products.add(new Product(6L, List.of(new Image("http://kukukukukukukukuku.com/test2.jpg")),
"하하하 테스트 음식", "맛있어요", 8370, 9300, new DisCountPolicy("이벤트특가")));
products.add(
new Product(5L, 1L, List.of(new Image("http://kukukukukukukukuku.com/test.jpg")),
"한돈 돼지 김치찌개", "김치찌개에는 역시 돼지고기", 8370, "soup", "meat"));
products.add(
new Product(6L, 2L, List.of(new Image("http://kukukukukukukukuku.com/test2.jpg")),
"하하하 테스트 음식", "맛있어요", 8370, "main", "soup"));

return ProductsDtoMapper.toProductsMealTypeResponseFromDomain(products);
}
Expand Down
@@ -0,0 +1,87 @@
package sidedish.com.repository;

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

import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import sidedish.com.domain.Product;

@DataJdbcTest
@DisplayName("ProductsRepository 클래스")
class ProductsRepositoryTest {

@Autowired
private ProductsRepository productsRepository;

@BeforeEach
@Sql({"/testdb/schema.sql", "/testdb/data.sql"})
void setUp() {

}

@Nested
@DisplayName("findByMealType(String meal) 메서드")
class Describe_findByMealType {

@Nested
@DisplayName("만약 meal 타입이 유효한 soup으로 주어진다면")
class Context_with_meal_type_is_soup {

@Test
@DisplayName("meal 타입이 soup인 모든 Product의 리스트를 반환한다")
void It_returns_products_type_soup() {
List<Product> result = productsRepository.findByMealType("soup");

assertThat(result.get(0).getMealCategory()).isEqualTo("soup");
}
}

@Nested
@DisplayName("만약 meal이 유효한 main으로 주어진다면")
class Context_with_meal_type_is_main {

@Test
@DisplayName("meal 타입이 main인 모든 Product의 리스트를 반환한다")
void It_returns_products_type_main() {
List<Product> result = productsRepository.findByMealType("main");

assertThat(result.get(0).getMealCategory()).isEqualTo("main");
}
}

@Nested
@DisplayName("만약 meal이 유효한 side으로 주어진다면")
class Context_with_meal_type_is_side {

@Test
@DisplayName("meal 타입이 side인 모든 Product의 리스트를 반환한다")
void It_returns_products_type_side() {
List<Product> result = productsRepository.findByMealType("side");

assertThat(result.get(0).getMealCategory()).isEqualTo("side");
}
}

@Nested
@DisplayName("만약 meal이 유효하지 않은 값으로 주어진다면")
class Context_with_meal_type_error {

@Test
@DisplayName("빈 리스트를 반환한다.")
void It_returns_products_type_side() {
List<Product> result = productsRepository.findByMealType("error Meal Type");

assertThat(result).isEmpty();
}
}
}

}
11 changes: 6 additions & 5 deletions BE/src/test/java/sidedish/com/service/ProductsServiceTest.java
Expand Up @@ -10,7 +10,6 @@
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import sidedish.com.controller.model.ProductMealTypeResponse;
import sidedish.com.domain.DisCountPolicy;
import sidedish.com.domain.Image;
import sidedish.com.domain.Product;
import sidedish.com.repository.ProductsRepository;
Expand Down Expand Up @@ -40,10 +39,12 @@ void setUp() {
private List<Product> createListProducts() {
List<Product> products = new ArrayList<>();

products.add(new Product(5L, List.of(new Image("http://kukukukukukukukuku.com/test.jpg")),
"한돈 돼지 김치찌개", "김치찌개에는 역시 돼지고기", 8370, 9300, new DisCountPolicy("이벤트특가")));
products.add(new Product(6L, List.of(new Image("http://kukukukukukukukuku.com/test2.jpg")),
"하하하 테스트 음식", "맛있어요", 8370, 9300, new DisCountPolicy("이벤트특가")));
products.add(
new Product(5L, 1L, List.of(new Image("http://kukukukukukukukuku.com/test.jpg")),
"한돈 돼지 김치찌개", "김치찌개에는 역시 돼지고기", 8370, "soup", "meat"));
products.add(
new Product(6L, 2L, List.of(new Image("http://kukukukukukukukuku.com/test2.jpg")),
"하하하 테스트 음식", "맛있어요", 8370, "main", "soup"));

return products;
}
Expand Down

0 comments on commit ca34b5a

Please sign in to comment.