From 49dcdea67201f541f41a96059e343172e4975925 Mon Sep 17 00:00:00 2001 From: koo995 <107671886+koo995@users.noreply.github.com> Date: Sat, 28 Sep 2024 12:55:17 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=EB=8B=A4=EC=9D=B4=EC=96=B4=EB=A6=AC=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diary/controller/DiaryControllerTest.java | 7 +- .../diary/repository/DiaryRepositoryTest.java | 76 +----------- .../DiaryRetrievalRepositoryTest.java | 117 ++++++++++++++++++ .../service/DiaryRetrievalServiceTest.java | 65 +++------- 4 files changed, 140 insertions(+), 125 deletions(-) create mode 100644 src/test/java/flab/nutridiary/diary/repository/DiaryRetrievalRepositoryTest.java diff --git a/src/test/java/flab/nutridiary/diary/controller/DiaryControllerTest.java b/src/test/java/flab/nutridiary/diary/controller/DiaryControllerTest.java index 12e8459..20fbb3c 100644 --- a/src/test/java/flab/nutridiary/diary/controller/DiaryControllerTest.java +++ b/src/test/java/flab/nutridiary/diary/controller/DiaryControllerTest.java @@ -3,12 +3,12 @@ import com.fasterxml.jackson.databind.ObjectMapper; import flab.nutridiary.commom.generic.Nutrition; import flab.nutridiary.diary.domain.*; -import flab.nutridiary.product.domain.ServingUnit; import flab.nutridiary.diary.dto.request.AddDiaryRecordRequest; import flab.nutridiary.diary.dto.request.DiaryRegisterRequest; import flab.nutridiary.diary.repository.DiaryRepository; import flab.nutridiary.product.domain.NutritionFacts; import flab.nutridiary.product.domain.Product; +import flab.nutridiary.product.domain.ServingUnit; import flab.nutridiary.product.repository.ProductRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -202,8 +202,7 @@ void getDiary() throws Exception { .andExpect(status().isOk()) .andExpect(jsonPath("$.statusCode").value(2001)) .andExpect(jsonPath("$.message").value("OK")) - .andExpect(jsonPath("$.data.diaryId").value(diaryId)) - .andExpect(jsonPath("$.data.diaryDate").value("2024-08-10")) - .andExpect(jsonPath("$.data.diarySummary").exists()); + .andExpect(jsonPath("$.data[0].diaryId").value(diaryId)) + .andExpect(jsonPath("$.data[0].diaryDate").value("2024-08-10")); } } \ No newline at end of file diff --git a/src/test/java/flab/nutridiary/diary/repository/DiaryRepositoryTest.java b/src/test/java/flab/nutridiary/diary/repository/DiaryRepositoryTest.java index adb57bd..4172cea 100644 --- a/src/test/java/flab/nutridiary/diary/repository/DiaryRepositoryTest.java +++ b/src/test/java/flab/nutridiary/diary/repository/DiaryRepositoryTest.java @@ -1,8 +1,9 @@ package flab.nutridiary.diary.repository; import flab.nutridiary.commom.generic.Nutrition; -import flab.nutridiary.diary.domain.*; -import flab.nutridiary.diary.dto.response.query.DiaryRetrievalQueryDto; +import flab.nutridiary.diary.domain.Diary; +import flab.nutridiary.diary.domain.DiaryRecord; +import flab.nutridiary.diary.domain.MealType; import flab.nutridiary.product.domain.NutritionFacts; import flab.nutridiary.product.domain.Product; import flab.nutridiary.product.domain.ServingUnit; @@ -29,8 +30,6 @@ @Transactional @SpringBootTest class DiaryRepositoryTest { - @Autowired - private NutritionCalculator nutritionCalculator; @Autowired private DiaryRepository diaryRepository; @Autowired @@ -139,73 +138,4 @@ void findById() throws Exception { assertThat(findDiary).extracting("memberId", "diaryDate", "diaryRecords") .containsExactly(memberId, date, Set.of(diaryRecord)); } - - @DisplayName("memberId와 date로 DiaryRetrievalQueryDto를 조회한다.") - @Test - void findDiaryWithProductsByMemberIdAndDiaryDate() throws Exception { - // given - Diary diary = Diary.builder() - .diaryDate(LocalDate.of(2024, 8, 10)) - .diaryRecord(DiaryRecord.of( - ProductIntakeInfo.builder() - .productId(savedProductIds.get(0)) - .mealType("BREAKFAST") - .clientChoiceServingUnitDescription("개") - .quantity(valueOf(2)) - .build(), - nutritionCalculator)) - .build(); - diary.addDiaryRecord(DiaryRecord.of( - ProductIntakeInfo.builder() - .productId(savedProductIds.get(1)) - .mealType("BREAKFAST") - .clientChoiceServingUnitDescription("컵") - .quantity(valueOf(2)) - .build(), - nutritionCalculator)); - diary.addDiaryRecord(DiaryRecord.of( - ProductIntakeInfo.builder() - .productId(savedProductIds.get(0)) - .mealType("LUNCH") - .clientChoiceServingUnitDescription("gram") - .quantity(valueOf(200)) - .build(), - nutritionCalculator)); - Long diaryId = diaryRepository.save(diary).getId(); - - // when - DiaryRetrievalQueryDto result = diaryRepository.findDiaryWithProductsByMemberIdAndDiaryDate(memberId, LocalDate.of(2024, 8, 10)).get(); - System.out.println(result.getDiarySummary().getBreakfast().getDiaryRecords()); - System.out.println(result.getDiarySummary().getLunch().getDiaryRecords()); - System.out.println(result.getDiarySummary().getDinner().getDiaryRecords()); - System.out.println(result.getDiarySummary().getSnack().getDiaryRecords()); - - // then - Nutrition expectedTotalNutrition = Nutrition.of(valueOf(800), valueOf(70), valueOf(100), valueOf(120)); - Nutrition expectedBreakfastNutrition = Nutrition.of(valueOf(600), valueOf(50), valueOf(60), valueOf(60)); - Nutrition expectedLunchNutrition = Nutrition.of(valueOf(200), valueOf(20), valueOf(40), valueOf(60)); - Nutrition expectedDinnerNutrition = Nutrition.empty(); - Nutrition expectedSnackNutrition = Nutrition.empty(); - - assertThat(result.getDiaryId()).isEqualTo(diaryId); - assertThat(result.getMemberId()).isEqualTo(memberId); - assertThat(result.getDiaryDate()).isEqualTo(LocalDate.of(2024, 8, 10)); - assertThat(result.getDiarySummary().getDiaryTotalCalculatedNutrition()).isEqualTo(expectedTotalNutrition); - //breakfast - assertThat(result.getDiarySummary().getBreakfast().getMealType()).isEqualTo(MealType.BREAKFAST); - assertThat(result.getDiarySummary().getBreakfast().getMealTotalCalculatedNutrition()).isEqualTo(expectedBreakfastNutrition); - assertThat(result.getDiarySummary().getBreakfast().getDiaryRecords()).hasSize(2); - //lunch - assertThat(result.getDiarySummary().getLunch().getMealType()).isEqualTo(MealType.LUNCH); - assertThat(result.getDiarySummary().getLunch().getMealTotalCalculatedNutrition()).isEqualTo(expectedLunchNutrition); - assertThat(result.getDiarySummary().getLunch().getDiaryRecords()).hasSize(1); - //dinner - assertThat(result.getDiarySummary().getDinner().getMealType()).isEqualTo(MealType.DINNER); - assertThat(result.getDiarySummary().getDinner().getMealTotalCalculatedNutrition()).isEqualTo(expectedDinnerNutrition); - assertThat(result.getDiarySummary().getDinner().getDiaryRecords()).isEmpty(); - //snack - assertThat(result.getDiarySummary().getSnack().getMealType()).isEqualTo(MealType.SNACK); - assertThat(result.getDiarySummary().getSnack().getMealTotalCalculatedNutrition()).isEqualTo(expectedSnackNutrition); - assertThat(result.getDiarySummary().getSnack().getDiaryRecords()).isEmpty(); - } } \ No newline at end of file diff --git a/src/test/java/flab/nutridiary/diary/repository/DiaryRetrievalRepositoryTest.java b/src/test/java/flab/nutridiary/diary/repository/DiaryRetrievalRepositoryTest.java new file mode 100644 index 0000000..c44bf17 --- /dev/null +++ b/src/test/java/flab/nutridiary/diary/repository/DiaryRetrievalRepositoryTest.java @@ -0,0 +1,117 @@ +package flab.nutridiary.diary.repository; + +import flab.nutridiary.commom.generic.Nutrition; +import flab.nutridiary.diary.domain.*; +import flab.nutridiary.diary.dto.response.query.DiaryRecordWithProduct; +import flab.nutridiary.product.domain.NutritionFacts; +import flab.nutridiary.product.domain.Product; +import flab.nutridiary.product.domain.ServingUnit; +import flab.nutridiary.product.repository.ProductRepository; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; + +import static java.math.BigDecimal.valueOf; + +@ActiveProfiles("test") +@Transactional +@SpringBootTest +class DiaryRetrievalRepositoryTest{ + @Autowired + private NutritionCalculator nutritionCalculator; + @Autowired + private DiaryRetrievalRepository diaryRetrievalRepository; + @Autowired + private DiaryRepository diaryRepository; + @Autowired + private ProductRepository productRepository; + private List savedProductIds = new ArrayList<>(); + private Long memberId = 1L; + + @BeforeEach + void init() { + Product product1 = Product.builder() + .productName("사과") + .productCorp("사과회사") + .nutritionFacts(NutritionFacts.builder() + .nutritionPerOneServingUnit(Nutrition.of(valueOf(50), valueOf(5), valueOf(10), valueOf(15))) + .allowedProductServingUnits( + new ArrayList<>(List.of( + ServingUnit.asOneServingUnit("개"), + ServingUnit.ofGram(BigDecimal.ONE, valueOf(50))))) + .build()) + .build(); + + Product product2 = Product.builder() + .productName("바나나") + .productCorp("바나나회사") + .nutritionFacts(NutritionFacts.builder() + .nutritionPerOneServingUnit(Nutrition.of(valueOf(250), valueOf(20), valueOf(20), valueOf(15))) + .allowedProductServingUnits( + new ArrayList<>(List.of( + ServingUnit.asOneServingUnit("컵"), + ServingUnit.ofGram(BigDecimal.ONE, valueOf(150))))) + .build()) + .build(); + savedProductIds.add(productRepository.save(product1).getId()); + savedProductIds.add(productRepository.save(product2).getId()); + } + + @DisplayName("memberId와 date로 DiaryRecordWithProduct 리스트를 조회한다.") + @Test + void findDiaryWithProductsByMemberIdAndDiaryDate() throws Exception { + // given + Diary diary = Diary.builder() + .diaryDate(LocalDate.of(2024, 8, 10)) + .diaryRecord(DiaryRecord.of( + ProductIntakeInfo.builder() + .productId(savedProductIds.get(0)) + .mealType("BREAKFAST") + .clientChoiceServingUnitDescription("개") + .quantity(valueOf(2)) + .build(), + nutritionCalculator)) + .build(); + diary.addDiaryRecord(DiaryRecord.of( + ProductIntakeInfo.builder() + .productId(savedProductIds.get(1)) + .mealType("BREAKFAST") + .clientChoiceServingUnitDescription("컵") + .quantity(valueOf(2)) + .build(), + nutritionCalculator)); + diary.addDiaryRecord(DiaryRecord.of( + ProductIntakeInfo.builder() + .productId(savedProductIds.get(0)) + .mealType("LUNCH") + .clientChoiceServingUnitDescription("gram") + .quantity(valueOf(200)) + .build(), + nutritionCalculator)); + Long diaryId = diaryRepository.save(diary).getId(); + + // when + List results = diaryRetrievalRepository.findDiaryWithProductAllByMemberIdAndDiaryDate(memberId, LocalDate.of(2024, 8, 10)); + + // then + List expectedResults = List.of( + new DiaryRecordWithProduct(1L, 1L, LocalDate.of(2024, 8, 10), 1L, MealType.BREAKFAST, "사과", "사과회사", valueOf(2), "개", Nutrition.of(valueOf(100), valueOf(10), valueOf(20), valueOf(30))), + new DiaryRecordWithProduct(1L, 1L, LocalDate.of(2024, 8, 10), 2L, MealType.LUNCH, "사과", "사과회사", valueOf(200), "gram", Nutrition.of(valueOf(200), valueOf(20), valueOf(40), valueOf(60))), + new DiaryRecordWithProduct(1L, 1L, LocalDate.of(2024, 8, 10), 3L, MealType.BREAKFAST, "바나나", "바나나회사", valueOf(2), "컵", Nutrition.of(valueOf(500), valueOf(40), valueOf(40), valueOf(30))) + ); + + Assertions.assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults); + } + + +} \ No newline at end of file diff --git a/src/test/java/flab/nutridiary/diary/service/DiaryRetrievalServiceTest.java b/src/test/java/flab/nutridiary/diary/service/DiaryRetrievalServiceTest.java index 07f0e68..bc27698 100644 --- a/src/test/java/flab/nutridiary/diary/service/DiaryRetrievalServiceTest.java +++ b/src/test/java/flab/nutridiary/diary/service/DiaryRetrievalServiceTest.java @@ -1,14 +1,14 @@ package flab.nutridiary.diary.service; -import flab.nutridiary.commom.exception.BusinessException; import flab.nutridiary.commom.generic.Nutrition; import flab.nutridiary.diary.domain.*; -import flab.nutridiary.diary.dto.response.query.DiaryRetrievalQueryDto; +import flab.nutridiary.diary.dto.response.query.DiaryRecordWithProduct; import flab.nutridiary.diary.repository.DiaryRepository; import flab.nutridiary.product.domain.NutritionFacts; import flab.nutridiary.product.domain.Product; import flab.nutridiary.product.domain.ServingUnit; import flab.nutridiary.product.repository.ProductRepository; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -23,8 +23,6 @@ import java.util.List; import static java.math.BigDecimal.valueOf; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; @ActiveProfiles("test") @Transactional @@ -39,9 +37,6 @@ class DiaryRetrievalServiceTest { @Autowired private ProductRepository productRepository; private List savedProductIds = new ArrayList<>(); - private Long memberId = 1L; - LocalDate date = LocalDate.of(2024, 8, 10); - private Long diaryId; @BeforeEach void init() { @@ -74,7 +69,7 @@ void init() { // diary Diary diary = Diary.builder() - .diaryDate(date) + .diaryDate(LocalDate.of(2024, 8, 10)) .diaryRecord(DiaryRecord.of( ProductIntakeInfo.builder() .productId(savedProductIds.get(0)) @@ -100,52 +95,26 @@ void init() { .quantity(valueOf(200)) .build(), nutritionCalculator)); - diaryId = diaryRepository.save(diary).getId(); + diaryRepository.save(diary); } - @DisplayName("memberId와 date로 DiaryRetrievalQueryDto를 조회할 수 있다.") + @DisplayName("memberId와 date로 DiaryRecordWithProduct 리스트를 조회한다.") @Test void getDiary() throws Exception { - Nutrition expectedTotalNutrition = Nutrition.of(valueOf(800), valueOf(70), valueOf(100), valueOf(120)); - Nutrition expectedBreakfastNutrition = Nutrition.of(valueOf(600), valueOf(50), valueOf(60), valueOf(60)); - Nutrition expectedLunchNutrition = Nutrition.of(valueOf(200), valueOf(20), valueOf(40), valueOf(60)); - Nutrition expectedDinnerNutrition = Nutrition.empty(); - Nutrition expectedSnackNutrition = Nutrition.empty(); - - DiaryRetrievalQueryDto diary = diaryRetrievalService.getDiary(memberId, date); + // given + Long memberId = 1L; + LocalDate date = LocalDate.of(2024, 8, 10); - assertThat(diary.getDiaryId()).isEqualTo(diaryId); - assertThat(diary.getMemberId()).isEqualTo(memberId); - assertThat(diary.getDiaryDate()).isEqualTo(LocalDate.of(2024, 8, 10)); - assertThat(diary.getDiarySummary().getDiaryTotalCalculatedNutrition()).isEqualTo(expectedTotalNutrition); - //breakfast - assertThat(diary.getDiarySummary().getBreakfast().getMealType()).isEqualTo(MealType.BREAKFAST); - assertThat(diary.getDiarySummary().getBreakfast().getMealTotalCalculatedNutrition()).isEqualTo(expectedBreakfastNutrition); - assertThat(diary.getDiarySummary().getBreakfast().getDiaryRecords()).hasSize(2); - //lunch - assertThat(diary.getDiarySummary().getLunch().getMealType()).isEqualTo(MealType.LUNCH); - assertThat(diary.getDiarySummary().getLunch().getMealTotalCalculatedNutrition()).isEqualTo(expectedLunchNutrition); - assertThat(diary.getDiarySummary().getLunch().getDiaryRecords()).hasSize(1); - //dinner - assertThat(diary.getDiarySummary().getDinner().getMealType()).isEqualTo(MealType.DINNER); - assertThat(diary.getDiarySummary().getDinner().getMealTotalCalculatedNutrition()).isEqualTo(expectedDinnerNutrition); - assertThat(diary.getDiarySummary().getDinner().getDiaryRecords()).isEmpty(); - //snack - assertThat(diary.getDiarySummary().getSnack().getMealType()).isEqualTo(MealType.SNACK); - assertThat(diary.getDiarySummary().getSnack().getMealTotalCalculatedNutrition()).isEqualTo(expectedSnackNutrition); - assertThat(diary.getDiarySummary().getSnack().getDiaryRecords()).isEmpty(); - } + //when + List results = diaryRetrievalService.getDiary(memberId, date); - @DisplayName("memberId와 date로 DiaryRetrievalQueryDto를 조회할 수 없으면 예외가 발생한다.") - @Test - void getDiaryEx() throws Exception { - // given - Long UnknownMemberId = 20L; + // then + List expectedResults = List.of( + new DiaryRecordWithProduct(1L, 1L, LocalDate.of(2024, 8, 10), 1L, MealType.BREAKFAST, "사과", "사과회사", valueOf(2), "개", Nutrition.of(valueOf(100), valueOf(10), valueOf(20), valueOf(30))), + new DiaryRecordWithProduct(1L, 1L, LocalDate.of(2024, 8, 10), 2L, MealType.LUNCH, "사과", "사과회사", valueOf(200), "gram", Nutrition.of(valueOf(200), valueOf(20), valueOf(40), valueOf(60))), + new DiaryRecordWithProduct(1L, 1L, LocalDate.of(2024, 8, 10), 3L, MealType.BREAKFAST, "바나나", "바나나회사", valueOf(2), "컵", Nutrition.of(valueOf(500), valueOf(40), valueOf(40), valueOf(30))) + ); - // when then - BusinessException exception = assertThrows(BusinessException.class, () -> - diaryRetrievalService.getDiary(UnknownMemberId, date)); - assertThat(exception.getStatusCode()).isEqualTo(4004); - assertThat(exception.getMessage()).isEqualTo("해당 다이어리를 찾을 수 없습니다."); + Assertions.assertThat(results).containsExactlyInAnyOrderElementsOf(expectedResults); } } \ No newline at end of file