From 6723b49f7dcedeba69b958c0eb66e3f6d1f00cbd Mon Sep 17 00:00:00 2001
From: Phan Huy Tran
Date: Wed, 25 Sep 2024 14:05:31 +0200
Subject: [PATCH] Write integration test
---
.../project/CreateProjectAction.java | 7 +-
.../project/CreateProjectActionTest.java | 70 +++++++++++++++++++
2 files changed, 73 insertions(+), 4 deletions(-)
create mode 100644 src/test/java/de/szut/lf8_starter/project/CreateProjectActionTest.java
diff --git a/src/main/java/de/szut/lf8_starter/project/CreateProjectAction.java b/src/main/java/de/szut/lf8_starter/project/CreateProjectAction.java
index c41b134..d54318b 100644
--- a/src/main/java/de/szut/lf8_starter/project/CreateProjectAction.java
+++ b/src/main/java/de/szut/lf8_starter/project/CreateProjectAction.java
@@ -8,10 +8,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import jakarta.validation.Valid;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/projects")
@@ -30,6 +28,7 @@ public class CreateProjectAction {
@ApiResponse(responseCode = "400", description = "invalid JSON posted", content = @Content),
@ApiResponse(responseCode = "401", description = "not authorized", content = @Content)})
@PostMapping
+ @ResponseStatus(code = HttpStatus.CREATED)
public GetProjectDto create(@RequestBody @Valid CreateProjectDto createProjectDto) {
ProjectEntity projectEntity = this.projectMapper.mapCreateDtoToEntity(createProjectDto);
diff --git a/src/test/java/de/szut/lf8_starter/project/CreateProjectActionTest.java b/src/test/java/de/szut/lf8_starter/project/CreateProjectActionTest.java
new file mode 100644
index 0000000..b510ac7
--- /dev/null
+++ b/src/test/java/de/szut/lf8_starter/project/CreateProjectActionTest.java
@@ -0,0 +1,70 @@
+package de.szut.lf8_starter.project;
+
+import org.json.JSONObject;
+import org.junit.jupiter.api.Test;
+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.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+
+import java.time.LocalDate;
+import java.util.Arrays;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.hamcrest.Matchers.is;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+@SpringBootTest
+@AutoConfigureMockMvc(addFilters = false)
+public class CreateProjectActionTest {
+ @Autowired
+ private MockMvc mockMvc;
+ @Autowired
+ private ProjectRepository projectRepository;
+
+ @Test
+ void test() throws Exception {
+ String content = """
+ {
+ "name": "name",
+ "leading_employee": 1,
+ "employees": [2, 3],
+ "contractor": 4,
+ "contractorName": "Peter File",
+ "comment": "goal of project",
+ "startDate": "01.01.2000",
+ "plannedEndDate": "01.01.2001"
+ }
+ """;
+
+ final var contentAsString = this.mockMvc.perform(
+ post("/projects").content(content).contentType(MediaType.APPLICATION_JSON)
+ )
+ .andExpect(status().isCreated())
+ .andExpect(jsonPath("name", is("name")))
+ .andExpect(jsonPath("leadingEmployee", is(0)))
+ .andExpect(jsonPath("employees", is(Arrays.asList(2, 3))))
+ .andExpect(jsonPath("contractor", is(4)))
+ .andExpect(jsonPath("contractorName", is("Peter File")))
+ .andExpect(jsonPath("comment", is("goal of project")))
+ .andExpect(jsonPath("startDate", is("01.01.2000")))
+ .andExpect(jsonPath("plannedEndDate", is("01.01.2001")))
+ .andReturn()
+ .getResponse()
+ .getContentAsString();
+
+ final var id = Long.parseLong(new JSONObject(contentAsString).get("id").toString());
+
+ final var project = this.projectRepository.findById(id);
+ assertThat(project.get().getName()).isEqualTo("name");
+ assertThat(project.get().getLeadingEmployee()).isEqualTo(0);
+ assertThat(project.get().getContractor()).isEqualTo(4);
+ assertThat(project.get().getContractorName()).isEqualTo("Peter File");
+ assertThat(project.get().getComment()).isEqualTo("goal of project");
+ assertThat(project.get().getStartDate()).isEqualTo(LocalDate.of(2000, 1, 1));
+ assertThat(project.get().getPlannedEndDate()).isEqualTo(LocalDate.of(2001, 1, 1));
+ }
+}