/
klsfv
/
CalorieTracker
Обзор
Документация
Войти
/
klsfv
/
CalorieTracker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
server/src/test/java/com/calorietracker/controller/MealControllerTest.java
178 строк
6 KB
klsfv
upload files
15 янв 2026, 03:19
15 янв 2026, 03:19
09dece5
Код
Авторство
О чём код?
package com.calorietracker.controller; import com.calorietracker.dto.CreateMealRequest; import com.calorietracker.dto.MealEntryDto; import com.calorietracker.service.MealService; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.web.servlet.MockMvc; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.when; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @WebMvcTest(MealController.class) class MealControllerTest { @Autowired private MockMvc mockMvc; @MockBean private MealService mealService; @Autowired private ObjectMapper objectMapper; private MealEntryDto mealDto; private CreateMealRequest createRequest; @BeforeEach void setUp() { mealDto = new MealEntryDto(); mealDto.setId("meal-123"); mealDto.setUserId("user-123"); mealDto.setProductId("product-123"); mealDto.setProductName("Apple"); mealDto.setGrams(200.0); mealDto.setCalories(104); mealDto.setProtein(0.6); mealDto.setFat(0.4); mealDto.setCarbs(28.0); mealDto.setMealType("Завтрак"); mealDto.setDate(LocalDate.now()); mealDto.setCreatedAt(LocalDateTime.now()); createRequest = new CreateMealRequest(); createRequest.setProductId("product-123"); createRequest.setGrams(150.0); createRequest.setMealType("Обед"); createRequest.setDate(LocalDate.now()); } @Test @WithMockUser(username = "user-123") void testGetAll_Success() throws Exception { // Arrange MealEntryDto meal2 = new MealEntryDto(); meal2.setId("meal-456"); meal2.setUserId("user-123"); meal2.setProductId("product-456"); meal2.setProductName("Banana"); meal2.setGrams(100.0); meal2.setCalories(89); meal2.setMealType("Ужин"); meal2.setDate(LocalDate.now()); List<MealEntryDto> meals = Arrays.asList(mealDto, meal2); when(mealService.getAll(anyString())).thenReturn(meals); // Act & Assert mockMvc.perform(get("/api/v1/meals")) .andExpect(status().isOk()) .andExpect(jsonPath("$").isArray()) .andExpect(jsonPath("$.length()").value(2)); } @Test @WithMockUser(username = "user-123") void testGetById_Success() throws Exception { // Arrange String mealId = mealDto.getId(); when(mealService.getById(mealId, "user-123")).thenReturn(mealDto); // Act & Assert mockMvc.perform(get("/api/v1/meals/{id}", mealId)) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(mealId)) .andExpect(jsonPath("$.productName").value("Apple")); } @Test @WithMockUser(username = "user-123") void testGetByDate_Success() throws Exception { // Arrange LocalDate date = LocalDate.now(); List<MealEntryDto> meals = Arrays.asList(mealDto); when(mealService.getByDate("user-123", date)).thenReturn(meals); // Act & Assert mockMvc.perform(get("/api/v1/meals/date/{date}", date)) .andExpect(status().isOk()) .andExpect(jsonPath("$").isArray()) .andExpect(jsonPath("$[0].date").value(date.toString())); } @Test @WithMockUser(username = "user-123") void testGetByDateRange_Success() throws Exception { // Arrange LocalDate startDate = LocalDate.now().minusDays(7); LocalDate endDate = LocalDate.now(); List<MealEntryDto> meals = Arrays.asList(mealDto); when(mealService.getByDateRange("user-123", startDate, endDate)).thenReturn(meals); // Act & Assert mockMvc.perform(get("/api/v1/meals/range") .param("startDate", startDate.toString()) .param("endDate", endDate.toString())) .andExpect(status().isOk()) .andExpect(jsonPath("$").isArray()); } @Test @WithMockUser(username = "user-123") void testCreate_Success() throws Exception { // Arrange when(mealService.create(anyString(), any(CreateMealRequest.class))).thenReturn(mealDto); // Act & Assert mockMvc.perform(post("/api/v1/meals") .with(csrf()) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(createRequest))) .andExpect(status().isCreated()) .andExpect(jsonPath("$.id").value("meal-123")); } @Test @WithMockUser(username = "user-123") void testUpdate_Success() throws Exception { // Arrange String mealId = mealDto.getId(); when(mealService.update(anyString(), anyString(), any(CreateMealRequest.class))).thenReturn(mealDto); // Act & Assert mockMvc.perform(put("/api/v1/meals/{id}", mealId) .with(csrf()) .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(createRequest))) .andExpect(status().isOk()) .andExpect(jsonPath("$.id").value(mealId)); } @Test @WithMockUser(username = "user-123") void testDelete_Success() throws Exception { // Arrange String mealId = mealDto.getId(); // Act & Assert mockMvc.perform(delete("/api/v1/meals/{id}", mealId) .with(csrf())) .andExpect(status().isNoContent()); } }