Skip to content
Snippets Groups Projects
Commit cf5cc3c8 authored by Anders Austlid's avatar Anders Austlid
Browse files

Added unit tests for recipe service and controller

parent 3b25b8ae
No related branches found
No related tags found
No related merge requests found
package ntnu.idatt2016.v233.SmartMat.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import ntnu.idatt2016.v233.SmartMat.entity.Recipe;
import ntnu.idatt2016.v233.SmartMat.service.RecipeService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@ExtendWith(MockitoExtension.class)
public class RecipeControllerTest {
@Mock
private RecipeService recipeService;
@InjectMocks
private RecipeController recipeController;
private MockMvc mockMvc;
private ObjectMapper objectMapper;
private Recipe recipe1;
private Recipe recipe2;
@BeforeEach
void setUp() {
mockMvc = MockMvcBuilders.standaloneSetup(recipeController).build();
objectMapper = new ObjectMapper();
recipe1 = Recipe.builder()
.id(1L)
.name("Recipe 1")
.description("Recipe 1 description")
.build();
recipe2 = Recipe.builder()
.id(2L)
.name("Recipe 2")
.description("Recipe 2 description")
.build();
}
@Test
void getRecipeById() throws Exception {
when(recipeService.getRecipeById(recipe1.getId())).thenReturn(Optional.of(recipe1));
mockMvc.perform(get("/api/recipe/id/{id}", recipe1.getId()))
.andExpect(status().isOk())
.andExpect(content().json(objectMapper.writeValueAsString(recipe1)));
}
@Test
void getRecipeById_NotFound() throws Exception {
when(recipeService.getRecipeById(3L)).thenReturn(Optional.empty());
mockMvc.perform(get("/api/recipe/id/{id}", 3L))
.andExpect(status().isNotFound());
}
@Test
void getRecipeByName() throws Exception {
List<Recipe> recipes = Arrays.asList(recipe1, recipe2);
when(recipeService.getRecipesByName("Recipe")).thenReturn(recipes);
mockMvc.perform(get("/api/recipe/name/{name}", "Recipe"))
.andExpect(status().isOk())
.andExpect(content().json(objectMapper.writeValueAsString(recipes)));
}
@Test
void getRecipeByName_NotFound() throws Exception {
when(recipeService.getRecipesByName("Nonexistent")).thenReturn(List.of());
mockMvc.perform(get("/api/recipe/name/{name}", "Nonexistent"))
.andExpect(status().isNotFound());
}
}
package ntnu.idatt2016.v233.SmartMat.service;
import ntnu.idatt2016.v233.SmartMat.entity.Recipe;
import ntnu.idatt2016.v233.SmartMat.entity.user.User;
import ntnu.idatt2016.v233.SmartMat.repository.RecipeRepository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
public class RecipeServiceTest {
@Mock
private RecipeRepository recipeRepository;
@InjectMocks
private RecipeService recipeService;
private Recipe recipe1;
private Recipe recipe2;
private User user;
@BeforeEach
void setUp() {
recipe1 = Recipe.builder()
.id(1L)
.name("Recipe 1")
.description("Recipe 1 description")
.build();
recipe2 = Recipe.builder()
.id(2L)
.name("Recipe 2")
.description("Recipe 2 description")
.build();
user = new User();
user.setUsername("testuser");
user.setEmail("testuser@example.com");
}
@Test
void getRecipeById() {
when(recipeRepository.findById(recipe1.getId())).thenReturn(Optional.of(recipe1));
Optional<Recipe> result = recipeService.getRecipeById(recipe1.getId());
assertThat(result).isPresent();
assertThat(result.get()).isEqualTo(recipe1);
verify(recipeRepository).findById(recipe1.getId());
}
@Test
void getRecipesByName() {
List<Recipe> expectedRecipes = Arrays.asList(recipe1, recipe2);
when(recipeRepository.findAllByName(recipe1.getName())).thenReturn(expectedRecipes);
List<Recipe> result = recipeService.getRecipesByName(recipe1.getName());
assertThat(result).isEqualTo(expectedRecipes);
verify(recipeRepository).findAllByName(recipe1.getName());
}
@Test
void getAllRecipes() {
List<Recipe> expectedRecipes = Arrays.asList(recipe1, recipe2);
when(recipeRepository.findAll()).thenReturn(expectedRecipes);
List<Recipe> result = recipeService.getAllRecipes();
assertThat(result).isEqualTo(expectedRecipes);
verify(recipeRepository).findAll();
}
@Test
void saveRecipe() {
when(recipeRepository.save(recipe1)).thenReturn(recipe1);
Recipe result = recipeService.saveRecipe(recipe1);
assertThat(result).isEqualTo(recipe1);
verify(recipeRepository).save(recipe1);
}
@Test
void deleteRecipe() {
doNothing().when(recipeRepository).delete(recipe1);
recipeService.deleteRecipe(recipe1);
verify(recipeRepository).delete(recipe1);
}
@Test
void deleteRecipeById() {
doNothing().when(recipeRepository).deleteById(recipe1.getId());
recipeService.deleteRecipeById(recipe1.getId());
verify(recipeRepository).deleteById(recipe1.getId());
}
@Test
void addUserToRecipe() {
when(recipeRepository.save(recipe1)).thenReturn(recipe1);
recipeService.addUserToRecipe(recipe1, user);
assertThat(recipe1.getUsers()).contains(user);
verify(recipeRepository).save(recipe1);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment