From 9ed07092e020edb7649b886b08cd19e5be848df1 Mon Sep 17 00:00:00 2001
From: xmarek14 <xmarek14@fi.muni.cz>
Date: Sun, 16 Apr 2023 09:49:14 +0200
Subject: [PATCH] ComponentControllerUnitTest not passing + paths in App

---
 .../java/cz/muni/pa165/component/App.java     |  6 +-
 .../rest/ComponentInitControllerItTest.java   | 84 +++++++++++++++++--
 2 files changed, 80 insertions(+), 10 deletions(-)

diff --git a/component/src/main/java/cz/muni/pa165/component/App.java b/component/src/main/java/cz/muni/pa165/component/App.java
index 3ead9f59..9d298341 100644
--- a/component/src/main/java/cz/muni/pa165/component/App.java
+++ b/component/src/main/java/cz/muni/pa165/component/App.java
@@ -8,9 +8,9 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 /**
  * Main app.
  */
-@SpringBootApplication(scanBasePackages = {"cz.muni.pa165.*"})
-@EnableJpaRepositories(basePackages = {"cz.muni.pa165.*"})
-@EntityScan("cz.muni.pa165.*")
+@SpringBootApplication(scanBasePackages = {"cz.muni.pa165.component"})
+@EnableJpaRepositories(basePackages = {"cz.muni.pa165.component.data.repository"})
+@EntityScan("cz.muni.pa165.component.data.model")
 public class App {
 
   public static void main(String[] args) {
diff --git a/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerItTest.java b/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerItTest.java
index 3c9619a4..defe54a0 100644
--- a/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerItTest.java
+++ b/component/src/test/java/cz/muni/pa165/component/rest/ComponentInitControllerItTest.java
@@ -1,25 +1,95 @@
 package cz.muni.pa165.component.rest;
 
+import static org.mockito.BDDMockito.given;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
 import com.fasterxml.jackson.databind.ObjectMapper;
+import java.math.BigDecimal;
+
+import cz.muni.pa165.common_library.dtos.CarComponentDto;
+import cz.muni.pa165.component.data.model.CarComponent;
 import cz.muni.pa165.component.service.ComponentService;
+import org.junit.jupiter.api.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
+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.web.servlet.MockMvc;
 
+@WebMvcTest(ComponentController.class)
+class ComponentControllerUnitTest {
 
-@SpringBootTest
-@AutoConfigureMockMvc
-class ComponentInitControllerItTest {
+  private static final Logger log = LoggerFactory.getLogger(
+      ComponentInitControllerUnitTest.class
+  );
 
   @Autowired
   private MockMvc mockMvc;
 
+  @MockBean
+  private ComponentService componentService;
+
   @Autowired
   private ObjectMapper objectMapper;
 
-  @Autowired
-  ComponentService componentInitService;
+  @Test
+  void createCarComponentTest() throws Exception {
+    log.debug("create carComponent");
+
+    Long id = 1L;
+    String name = "Engine";
+    BigDecimal one = BigDecimal.ONE;
+    String manufacturer = "Ferrari";
+
+    CarComponent carComponent = new CarComponent();
+    carComponent.setId(id);
+    carComponent.setName(name);
+    carComponent.setWeight(one);
+    carComponent.setPrice(one);
+    carComponent.setManufacturer(manufacturer);
 
+    CarComponentDto carComponentDto = CarComponentDto.builder()
+        .id(id)
+        .name(name)
+        .weight(one)
+        .price(one)
+        .manufacturer(manufacturer)
+        .build();
+
+    given(componentService.postCarComponent(carComponentDto)).willReturn(carComponentDto);
+    mockMvc.perform(post("/component/")
+            .contentType(MediaType.APPLICATION_JSON)
+            .content(objectMapper.writeValueAsString(carComponent)))
+        .andExpect(status().isOk())
+        .andExpect(jsonPath("$.id").value(id))
+        .andExpect(jsonPath("$.name").value(name))
+        .andExpect(jsonPath("$.weight").value(one))
+        .andExpect(jsonPath("$.price").value(one))
+        .andExpect(jsonPath("$.manufacturer").value(manufacturer));
+  }
+
+  @Test
+  void nonExistingPathTest() throws Exception {
+    mockMvc.perform(post("/invalidPath"))
+        .andExpect(status().isNotFound());
+  }
+
+  @Test
+  void createComponentWithNullValuesTest() throws Exception {
+    log.debug("create invalid engine");
+
+    CarComponent carComponent = new CarComponent();
+    CarComponentDto carComponentDto = new CarComponentDto();
+
+    given(componentService.postCarComponent(carComponentDto)).willReturn(carComponentDto);
+    mockMvc.perform(post("/component/").contentType(MediaType.APPLICATION_JSON)
+            .content(objectMapper.writeValueAsString(carComponent)))
+        .andExpect(status().isBadRequest());
+  }
 
 }
+
-- 
GitLab