feat: ingredient controller, websocket messages, ingredient controller tests
This commit is contained in:
parent
6129fc2a5a
commit
3af808ef58
13 changed files with 498 additions and 9 deletions
166
server/src/test/java/server/api/IngredientControllerTest.java
Normal file
166
server/src/test/java/server/api/IngredientControllerTest.java
Normal file
|
|
@ -0,0 +1,166 @@
|
|||
package server.api;
|
||||
|
||||
import commons.Ingredient;
|
||||
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.orm.jpa.DataJpaTest;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.http.HttpStatusCode;
|
||||
import org.springframework.messaging.simp.SimpMessagingTemplate;
|
||||
import org.springframework.test.context.ActiveProfiles;
|
||||
import server.database.IngredientRepository;
|
||||
import server.WebSocketConfig;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@DataJpaTest
|
||||
@ActiveProfiles("mock-data-test")
|
||||
@Import(WebSocketConfig.class)
|
||||
public class IngredientControllerTest {
|
||||
private final SimpMessagingTemplate template;
|
||||
private final IngredientRepository ingredientRepository;
|
||||
private IngredientController controller;
|
||||
|
||||
@Autowired
|
||||
public IngredientControllerTest(IngredientRepository ingredientRepository,
|
||||
SimpMessagingTemplate template) {
|
||||
this.ingredientRepository = ingredientRepository;
|
||||
this.template = template;
|
||||
}
|
||||
|
||||
private void createInitialIngredients() {
|
||||
ingredientRepository.deleteAll();
|
||||
|
||||
Stream.of("Salt", "Sugar", "Flour", "Eggs", "Milk")
|
||||
.map(name -> {
|
||||
return new Ingredient(name, 1.0, 2.0, 3.0);
|
||||
})
|
||||
.forEach(ingredientRepository::save);
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
public void setup() {
|
||||
controller = new IngredientController(ingredientRepository, template);
|
||||
|
||||
this.createInitialIngredients();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAllIngredients() {
|
||||
List<Ingredient> ingredients = controller.getIngredients(Optional.empty(), Optional.empty()).getBody();
|
||||
|
||||
assertNotNull(ingredients);
|
||||
assertEquals(5, ingredients.size());
|
||||
assertEquals("Eggs", ingredients.getFirst().name);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetPaginatedIngredients() {
|
||||
List<Ingredient> ingredients = controller.getIngredients(Optional.of(0), Optional.of(2)).getBody();
|
||||
|
||||
assertNotNull(ingredients);
|
||||
assertEquals(2, ingredients.size());
|
||||
assertEquals("Eggs", ingredients.get(0).name);
|
||||
assertEquals("Flour", ingredients.get(1).name);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetIngredientById() {
|
||||
Ingredient ingredient = ingredientRepository.findAll().getFirst();
|
||||
Long id = ingredient.id;
|
||||
|
||||
Ingredient fetchedIngredient = controller.getIngredientById(id).getBody();
|
||||
|
||||
assertNotNull(fetchedIngredient);
|
||||
assertEquals(ingredient.name, fetchedIngredient.name);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetIngredientByInvalidId() {
|
||||
Long invalidId = 2137L;
|
||||
|
||||
var response = controller.getIngredientById(invalidId);
|
||||
|
||||
assertEquals(HttpStatusCode.valueOf(404), response.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateIngredient() {
|
||||
Ingredient newIngredient = new Ingredient("Butter", 0.5, 1.0, 1.5);
|
||||
|
||||
Ingredient createdIngredient = controller.createIngredient(newIngredient).getBody();
|
||||
|
||||
assertNotNull(createdIngredient);
|
||||
assertEquals("Butter", createdIngredient.name);
|
||||
assertEquals(6, ingredientRepository.count());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCreateIngredientMissingName() {
|
||||
Ingredient newIngredient = new Ingredient(null, 0.5, 1.0, 1.5);
|
||||
|
||||
var response = controller.createIngredient(newIngredient);
|
||||
|
||||
assertEquals(HttpStatusCode.valueOf(400), response.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateIngredient() {
|
||||
Ingredient ingredient = ingredientRepository.findAll()
|
||||
.stream()
|
||||
.filter(i -> i.name.equals("Salt"))
|
||||
.findFirst()
|
||||
.get(); // Should exist, no need for a check
|
||||
|
||||
Long id = ingredient.id;
|
||||
|
||||
Ingredient updatedData = new Ingredient("Sea Salt", 1.5, 2.5, 3.5);
|
||||
|
||||
Ingredient updatedIngredient = controller.updateIngredient(id, updatedData).getBody();
|
||||
|
||||
assertNotNull(updatedIngredient);
|
||||
assertEquals("Sea Salt", updatedIngredient.name);
|
||||
assertEquals(1.5, updatedIngredient.proteinPer100g);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateMissingIngredient() {
|
||||
Long invalidId = 2137L;
|
||||
|
||||
Ingredient updatedData = new Ingredient("Sea Salt", 1.5, 2.5, 3.5);
|
||||
|
||||
var response = controller.updateIngredient(invalidId, updatedData);
|
||||
|
||||
assertEquals(HttpStatusCode.valueOf(404), response.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteIngredient() {
|
||||
Ingredient ingredient = ingredientRepository.findAll()
|
||||
.stream()
|
||||
.filter(i -> i.name.equals("Sugar"))
|
||||
.findFirst()
|
||||
.get(); // Should exist, no need for a check
|
||||
|
||||
Long id = ingredient.id;
|
||||
|
||||
var response = controller.deleteIngredient(id);
|
||||
|
||||
assertEquals(HttpStatusCode.valueOf(200), response.getStatusCode());
|
||||
assertEquals(4, ingredientRepository.count());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDeleteMissingIngredient() {
|
||||
Long invalidId = 2137L;
|
||||
|
||||
var response = controller.deleteIngredient(invalidId);
|
||||
|
||||
assertEquals(HttpStatusCode.valueOf(404), response.getStatusCode());
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue