From fec58ce37ee0b6e658c0e2926cdb75e34f3d8e75 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Wed, 21 Apr 2021 13:51:01 +0200
Subject: [PATCH] Add TestCreateKommentarByVorgang

---
 goofy-server/{Dockerfile => Dockerfile.local} |  1 -
 .../KommentarCommandControllerTest.java       | 85 +++++++++++++++++++
 .../KommentarCommandTestFactory.java          | 32 +++++++
 .../goofy/kommentar/KommentarTestFactory.java | 34 ++++++++
 .../createCommandWithKommentar.json.tmpl      |  6 ++
 5 files changed, 157 insertions(+), 1 deletion(-)
 rename goofy-server/{Dockerfile => Dockerfile.local} (77%)
 create mode 100644 goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandControllerTest.java
 create mode 100644 goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandTestFactory.java
 create mode 100644 goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java
 create mode 100644 goofy-server/src/test/resources/jsonTemplates/command/createCommandWithKommentar.json.tmpl

diff --git a/goofy-server/Dockerfile b/goofy-server/Dockerfile.local
similarity index 77%
rename from goofy-server/Dockerfile
rename to goofy-server/Dockerfile.local
index b9653d2ded..42e2b58dfa 100644
--- a/goofy-server/Dockerfile
+++ b/goofy-server/Dockerfile.local
@@ -1,4 +1,3 @@
-#FROM 172.30.35.192:8082/openjdk:11-slim
 FROM openjdk:11-slim
 
 #COPY ${JAR_FILE} /opt/goofy.jar
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandControllerTest.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandControllerTest.java
new file mode 100644
index 0000000000..73228a0e42
--- /dev/null
+++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandControllerTest.java
@@ -0,0 +1,85 @@
+package de.itvsh.goofy.kommentar;
+
+import static de.itvsh.goofy.kommentar.KommentarCommandTestFactory.*;
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import de.itvsh.goofy.kommentar.KommentarCommandController.KommentarCommandByVorgangController;
+import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory;
+
+class KommentarCommandControllerTest {
+
+	@Captor
+	private ArgumentCaptor<KommentarCommand> commandCaptor;
+
+	private MockMvc mockMvc;
+
+	@Nested
+	class TestCreateWiedervorlageCommandByVorgang {
+
+		@InjectMocks
+		private KommentarCommandController controller;
+		@Mock
+		private KommentarService service;
+
+		private MockMvc mockMvc;
+
+		@BeforeEach
+		void init() {
+			mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
+			when(service.createCreateCommand(anyString(), any())).thenReturn(KommentarCommandTestFactory.create());
+		}
+
+		@Test
+		void shouldReturnCreated() throws Exception {
+			doRequest().andExpect(status().isCreated());
+		}
+
+		@Test
+		void shouldCallService() throws Exception {
+			doRequest();
+
+			verify(service).createCreateCommand(eq(VorgangHeaderTestFactory.ID), notNull());
+		}
+
+		@Test
+		void shouldGiveCommandToService() throws Exception {
+			doRequest();
+
+			verify(service).createCreateCommand(eq(VorgangHeaderTestFactory.ID), commandCaptor.capture());
+			var command = commandCaptor.getValue();
+
+			assertThat(command).usingRecursiveComparison()
+					.ignoringFields("kommentar.id", "kommentar.createdBy", "kommentar.createdByName", "kommentar.createdAt")
+					.isEqualTo(KommentarCommandTestFactory.createBuilder().id(null).build());
+		}
+
+		private ResultActions doRequest() throws Exception {
+			return mockMvc.perform(post(KommentarCommandByVorgangController.KOMMENTAR_COMMANDS_BY_VORGANG, VorgangHeaderTestFactory.ID)
+					.content(createValidRequestContent()).contentType(MediaType.APPLICATION_JSON))
+					.andExpect(status().is2xxSuccessful());
+		}
+	}
+
+	ResultActions doRequest(String content) throws Exception {
+		return mockMvc.perform(post(KommentarCommandController.KOMMENTAR_COMMANDS, KommentarTestFactory.ID)
+				.content(content).contentType(MediaType.APPLICATION_JSON))
+				.andExpect(status().is2xxSuccessful());
+	}
+
+}
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandTestFactory.java
new file mode 100644
index 0000000000..bef9b85590
--- /dev/null
+++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarCommandTestFactory.java
@@ -0,0 +1,32 @@
+package de.itvsh.goofy.kommentar;
+
+import de.itvsh.goofy.TestUtils;
+import de.itvsh.goofy.common.command.CommandOrder;
+import de.itvsh.goofy.common.command.CommandTestFactory;
+
+public class KommentarCommandTestFactory {
+
+	public static final String ID = CommandTestFactory.ID;
+	public static final CommandOrder ORDER = CommandOrder.CREATE_KOMMENTAR;
+
+	public static KommentarCommand create() {
+		return createBuilder().build();
+	}
+
+	public static KommentarCommand.KommentarCommandBuilder createBuilder() {
+		return KommentarCommand.builder()
+				.id(ID)
+				.order(ORDER)
+				.kommentar(KommentarTestFactory.create());
+	}
+
+	public static String createValidRequestContent() {
+		return createRequestContent(create());
+	}
+
+	public static String createRequestContent(KommentarCommand command) {
+		return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithKommentar.json.tmpl",
+				command.getOrder().name(),
+				command.getKommentar().getText());
+	}
+}
diff --git a/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java
new file mode 100644
index 0000000000..d4442f570e
--- /dev/null
+++ b/goofy-server/src/test/java/de/itvsh/goofy/kommentar/KommentarTestFactory.java
@@ -0,0 +1,34 @@
+package de.itvsh.goofy.kommentar;
+
+import java.time.ZonedDateTime;
+import java.util.UUID;
+
+import com.thedeanda.lorem.Lorem;
+import com.thedeanda.lorem.LoremIpsum;
+
+public class KommentarTestFactory {
+
+	private static Lorem lorem = LoremIpsum.getInstance();
+
+	public static final String ID = UUID.randomUUID().toString();
+
+	public static final String CREATED_BY = UUID.randomUUID().toString();
+	public static final String CREATED_BY_NAME = lorem.getName();
+	public static final String CREATED_AT_STR = "2021-01-10T10:30:00Z";
+	public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR);
+
+	public static final String TEXT = lorem.getWords(15);
+
+	public static Kommentar create() {
+		return createBuilder().build();
+	}
+
+	public static Kommentar.KommentarBuilder createBuilder() {
+		return Kommentar.builder()
+				.id(ID)
+				.text(TEXT)
+				.createdBy(CREATED_BY)
+				.createdByName(CREATED_BY_NAME)
+				.createdAt(CREATED_AT);
+	}
+}
diff --git a/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithKommentar.json.tmpl b/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithKommentar.json.tmpl
new file mode 100644
index 0000000000..21793eb228
--- /dev/null
+++ b/goofy-server/src/test/resources/jsonTemplates/command/createCommandWithKommentar.json.tmpl
@@ -0,0 +1,6 @@
+{
+	"order": "%s",
+	"kommentar": {
+		"text": "%s"
+	}
+}
\ No newline at end of file
-- 
GitLab