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

Refactored FridgeService to return appropriate values on certain methods....

Refactored FridgeService to return appropriate values on certain methods. Added FridgeControllerTest unit test class.
parent 48f1575a
No related branches found
No related tags found
No related merge requests found
...@@ -2,7 +2,9 @@ package ntnu.idatt2016.v233.SmartMat.controller.group; ...@@ -2,7 +2,9 @@ package ntnu.idatt2016.v233.SmartMat.controller.group;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import ntnu.idatt2016.v233.SmartMat.dto.request.FridgeProductRequest; import ntnu.idatt2016.v233.SmartMat.dto.request.FridgeProductRequest;
import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge; import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import ntnu.idatt2016.v233.SmartMat.service.group.FridgeService; import ntnu.idatt2016.v233.SmartMat.service.group.FridgeService;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -56,12 +58,12 @@ public class FridgeController { ...@@ -56,12 +58,12 @@ public class FridgeController {
* @return success if the product was added, bad request if the product was already in the fridge, or not found if the group or product doesn't exist * @return success if the product was added, bad request if the product was already in the fridge, or not found if the group or product doesn't exist
*/ */
@PostMapping("/group/product") @PostMapping("/group/product")
public ResponseEntity<Object> addProductToFridge(@RequestBody FridgeProductRequest request) { public ResponseEntity<Product> addProductToFridge(@RequestBody FridgeProductRequest request) {
return fridgeService.addProductToFridge(request).map(ResponseEntity::ok).orElseGet(()-> ResponseEntity.notFound().build()); return fridgeService.addProductToFridge(request).map(ResponseEntity::ok).orElseGet(()-> ResponseEntity.notFound().build());
} }
@PutMapping("/group/product") @PutMapping("/group/product")
public ResponseEntity<Object> updateProductInFridge(@RequestBody FridgeProductRequest request) { public ResponseEntity<FridgeProductAsso> updateProductInFridge(@RequestBody FridgeProductRequest request) {
return fridgeService.updateProductInFridge(request).map(ResponseEntity::ok).orElseGet(()-> ResponseEntity.notFound().build()); return fridgeService.updateProductInFridge(request).map(ResponseEntity::ok).orElseGet(()-> ResponseEntity.notFound().build());
} }
......
...@@ -69,41 +69,37 @@ public class FridgeService { ...@@ -69,41 +69,37 @@ public class FridgeService {
* @param fridgeProductRequest the fridge product request * @param fridgeProductRequest the fridge product request
* @return the product that was added to the fridge * @return the product that was added to the fridge
*/ */
public Optional<Object> addProductToFridge(FridgeProductRequest fridgeProductRequest) { public Optional<Product> addProductToFridge(FridgeProductRequest fridgeProductRequest) {
Optional<Product> product = productService.getProductById(fridgeProductRequest.ean()); Optional<Product> product = productService.getProductById(fridgeProductRequest.ean());
Optional<Fridge> fridge = fridgeRepository.findByGroupGroupId(fridgeProductRequest.groupId()); Optional<Fridge> fridge = fridgeRepository.findByGroupGroupId(fridgeProductRequest.groupId());
if(product.isEmpty() || fridge.isEmpty()) return Optional.empty(); if(product.isEmpty() || fridge.isEmpty()) return Optional.empty();
fridge.get().addProduct(FridgeProductAsso.builder() fridge.get().addProduct(FridgeProductAsso.builder()
.fridgeId(fridge.get()) .fridgeId(fridge.get())
.ean(product.get()) .ean(product.get())
.amount(fridgeProductRequest.amount()) .amount(fridgeProductRequest.amount())
.daysToExpiration(fridgeProductRequest.days()) .daysToExpiration(fridgeProductRequest.days())
.purchaseDate(java.sql.Date.valueOf(LocalDate.now())) .purchaseDate(java.sql.Date.valueOf(LocalDate.now()))
.build()); .build());
fridgeRepository.save(fridge.get()); fridgeRepository.save(fridge.get());
return Optional.of(product); return product;
} }
public Optional<Object> updateProductInFridge(FridgeProductRequest request) { public Optional<FridgeProductAsso> updateProductInFridge(FridgeProductRequest request) {
Optional<FridgeProductAsso> fridgeProductAsso = fridgeProductAssoRepo.findById(request.fridgeProductId()); Optional<FridgeProductAsso> fridgeProductAsso = fridgeProductAssoRepo.findById(request.fridgeProductId());
if (fridgeProductAsso.isEmpty()) return Optional.empty(); if (fridgeProductAsso.isEmpty()) return Optional.empty();
Integer amount = request.amount();
Integer days = request.days();
if (amount != null) fridgeProductAsso.get() int amount = request.amount();
.setAmount(request.amount()); int days = request.days();
fridgeProductAsso.get().setAmount(amount);
fridgeProductAsso.get().setDaysToExpiration(days);
if (days != null) fridgeProductAsso.get()
.setDaysToExpiration(request.days());
fridgeProductAssoRepo.save(fridgeProductAsso.get()); fridgeProductAssoRepo.save(fridgeProductAsso.get());
return Optional.of(fridgeProductAsso); return fridgeProductAsso;
} }
...@@ -159,12 +155,12 @@ public class FridgeService { ...@@ -159,12 +155,12 @@ public class FridgeService {
* @param amount the amount to delete * @param amount the amount to delete
* @return an optional containing the fridge product if it exists * @return an optional containing the fridge product if it exists
*/ */
public Optional<Object> deleteAmountFromFridge(long fridgeProductId, double amount) { public Optional<FridgeProductAsso> deleteAmountFromFridge(long fridgeProductId, double amount) {
Optional<FridgeProductAsso> fridgeProductAsso = fridgeProductAssoRepo.findAllById(fridgeProductId); Optional<FridgeProductAsso> fridgeProductAsso = fridgeProductAssoRepo.findAllById(fridgeProductId);
if(fridgeProductAsso.isEmpty()) return Optional.empty(); if(fridgeProductAsso.isEmpty()) return Optional.empty();
FridgeProductAsso fridgeProductAsso1 = fridgeProductAsso.get(); FridgeProductAsso fridgeProductAsso1 = fridgeProductAsso.get();
if(amount < fridgeProductAsso1.getAmount() ){ if(amount < fridgeProductAsso1.getAmount() ){
fridgeProductAsso1.setAmount(fridgeProductAsso1.getAmount() -amount); fridgeProductAsso1.setAmount(fridgeProductAsso1.getAmount() - amount);
return Optional.of(fridgeProductAssoRepo.save(fridgeProductAsso1)); return Optional.of(fridgeProductAssoRepo.save(fridgeProductAsso1));
} else { } else {
Group group = fridgeProductAsso1.getFridgeId().getGroup(); Group group = fridgeProductAsso1.getFridgeId().getGroup();
...@@ -172,7 +168,7 @@ public class FridgeService { ...@@ -172,7 +168,7 @@ public class FridgeService {
group.setLevel(GroupUtil.getLevel(group.getPoints())); group.setLevel(GroupUtil.getLevel(group.getPoints()));
groupRepository.save(group); groupRepository.save(group);
fridgeProductAssoRepo.delete(fridgeProductAsso.get()); fridgeProductAssoRepo.delete(fridgeProductAsso.get());
return Optional.of(true); return Optional.empty();
} }
} }
...@@ -181,7 +177,7 @@ public class FridgeService { ...@@ -181,7 +177,7 @@ public class FridgeService {
* @param fridgeProductId the ID of the fridge product association to delete * @param fridgeProductId the ID of the fridge product association to delete
* @return an Optional containing the saved waste object, or an empty Optional if the fridge product association with the given ID is not found * @return an Optional containing the saved waste object, or an empty Optional if the fridge product association with the given ID is not found
*/ */
public Optional<Object> wasteProductFromFridge(long fridgeProductId){ public Optional<Waste> wasteProductFromFridge(long fridgeProductId){
Optional<FridgeProductAsso> fridgeProductAsso = fridgeProductAssoRepo.findById(fridgeProductId); Optional<FridgeProductAsso> fridgeProductAsso = fridgeProductAssoRepo.findById(fridgeProductId);
if(fridgeProductAsso.isEmpty()) return Optional.empty(); if(fridgeProductAsso.isEmpty()) return Optional.empty();
FridgeProductAsso fridgeProductAsso1 = fridgeProductAsso.get(); FridgeProductAsso fridgeProductAsso1 = fridgeProductAsso.get();
...@@ -192,7 +188,13 @@ public class FridgeService { ...@@ -192,7 +188,13 @@ public class FridgeService {
group.setLevel(GroupUtil.getLevel(group.getPoints())); group.setLevel(GroupUtil.getLevel(group.getPoints()));
} }
groupRepository.save(group); groupRepository.save(group);
return Optional.of(wasteRepository.save(Waste.builder().amount(fridgeProductAsso1.getAmount()).unit(fridgeProductAsso1.getEan().getUnit()).ean(fridgeProductAsso1.getEan()).groupId(fridgeProductAsso1.getFridgeId().getGroup()).timestamp(new Timestamp(System.currentTimeMillis())).build())); return Optional.of(wasteRepository.save(Waste.builder()
.amount(fridgeProductAsso1.getAmount())
.unit(fridgeProductAsso1.getEan().getUnit())
.ean(fridgeProductAsso1.getEan())
.groupId(fridgeProductAsso1.getFridgeId().getGroup())
.timestamp(new Timestamp(System.currentTimeMillis()))
.build()));
} }
......
package ntnu.idatt2016.v233.SmartMat.controller.group;
import com.fasterxml.jackson.databind.ObjectMapper;
import ntnu.idatt2016.v233.SmartMat.dto.request.FridgeProductRequest;
import ntnu.idatt2016.v233.SmartMat.entity.fridgeProduct.FridgeProductAsso;
import ntnu.idatt2016.v233.SmartMat.entity.group.Fridge;
import ntnu.idatt2016.v233.SmartMat.entity.product.Product;
import ntnu.idatt2016.v233.SmartMat.service.group.FridgeService;
import org.junit.jupiter.api.BeforeEach;
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.web.servlet.AutoConfigureMockMvc;
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.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import java.util.Optional;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@ExtendWith(SpringExtension.class)
@WebMvcTest(FridgeController.class)
@AutoConfigureMockMvc(addFilters = false) // Disables security for this test class
public class FridgeControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private FridgeService fridgeService;
private Fridge fridge;
private Product product;
private FridgeProductAsso fridgeProductAsso;
private FridgeProductRequest fridgeProductRequest;
@BeforeEach
public void setUp() {
// Create and set up your test data here
fridge = new Fridge();
product = new Product();
fridgeProductAsso = new FridgeProductAsso();
fridgeProductRequest = new FridgeProductRequest(1L, 1L, 1L, 2, 7);
}
@Test
public void getFridgeByGroupId() throws Exception {
when(fridgeService.getFridgeByGroupId(1L)).thenReturn(Optional.of(fridge));
mockMvc.perform(get("/api/fridges/group/1"))
.andExpect(status().isOk());
}
@Test
public void getFridgeByGroupId_notFound() throws Exception {
when(fridgeService.getFridgeByGroupId(1L)).thenReturn(Optional.empty());
mockMvc.perform(get("/api/fridges/group/1"))
.andExpect(status().isNotFound());
}
@Test
public void getFridgeByFridgeId() throws Exception {
when(fridgeService.getFridgeByFridgeId(1L)).thenReturn(Optional.of(fridge));
mockMvc.perform(get("/api/fridges/fridge/1"))
.andExpect(status().isOk());
}
@Test
public void getFridgeByFridgeId_notFound() throws Exception {
when(fridgeService.getFridgeByFridgeId(1L)).thenReturn(Optional.empty());
mockMvc.perform(get("/api/fridges/fridge/1"))
.andExpect(status().isNotFound());
}
@Test
public void addProductToFridge() throws Exception {
when(fridgeService.addProductToFridge(any(FridgeProductRequest.class))).thenReturn(Optional.of(product));
mockMvc.perform(post("/api/fridges/group/product")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(fridgeProductRequest)))
.andExpect(status().isOk());
}
@Test
public void addProductToFridge_notFound() throws Exception {
when(fridgeService.addProductToFridge(any(FridgeProductRequest.class))).thenReturn(Optional.empty());
mockMvc.perform(post("/api/fridges/group/product")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(fridgeProductRequest)))
.andExpect(status().isNotFound());
}
@Test
public void updateProductInFridge() throws Exception {
when(fridgeService.updateProductInFridge(any(FridgeProductRequest.class))).thenReturn(Optional.of(fridgeProductAsso));
mockMvc.perform(put("/api/fridges/group/product")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(fridgeProductRequest)))
.andExpect(status().isOk());
}
@Test
public void updateProductInFridge_notFound() throws Exception {
when(fridgeService.updateProductInFridge(any(FridgeProductRequest.class))).thenReturn(Optional.empty());
mockMvc.perform(put("/api/fridges/group/product")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(fridgeProductRequest)))
.andExpect(status().isNotFound());
}
@Test
public void removeProductFromFridge_success() throws Exception {
when(fridgeService.removeProductFromFridge(1L)).thenReturn(true);
mockMvc.perform(delete("/api/fridges/delete/product/1"))
.andExpect(status().isOk())
.andExpect(content().string("Success"));
}
@Test
public void removeProductFromFridge_badRequest() throws Exception {
when(fridgeService.removeProductFromFridge(1L)).thenReturn(false);
mockMvc.perform(delete("/api/fridges/delete/product/1"))
.andExpect(status().isBadRequest())
.andExpect(content().string("Product not found in the fridge"));
}
}
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