Skip to content
Snippets Groups Projects
Commit 0301fb0d authored by OZGCloud's avatar OZGCloud
Browse files

OZG-1513 OZG-2594 add postfachId to commandBody; map attachments to from uri to id

parent d77291f3
No related branches found
No related tags found
No related merge requests found
...@@ -16,6 +16,10 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -16,6 +16,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import de.itvsh.goofy.common.binaryfile.FileId;
import de.itvsh.goofy.postfach.PostfachMail;
import de.itvsh.goofy.vorgang.VorgangController;
import de.itvsh.goofy.vorgang.VorgangWithEingang;
import lombok.Getter; import lombok.Getter;
@RestController @RestController
...@@ -68,16 +72,49 @@ public class CommandController { ...@@ -68,16 +72,49 @@ public class CommandController {
@Autowired @Autowired
private CommandService service; private CommandService service;
@Autowired
private VorgangController vorgangController;
@PostMapping @PostMapping
public ResponseEntity<Void> createCommand(@PathVariable String vorgangId, @PathVariable String relationId, public ResponseEntity<Void> createCommand(@PathVariable String vorgangId, @PathVariable String relationId,
@PathVariable long relationVersion, @RequestBody CreateCommand command) { @PathVariable long relationVersion, @RequestBody CreateCommand command) {
command = command.toBuilder().vorgangId(vorgangId).relationId(relationId).build(); command = command.toBuilder().vorgangId(vorgangId).relationId(relationId).build();
if (isSendPostfachMailOrder(command)) {
command = prepareCommandForPostfachNachricht(command, vorgangId);
}
var created = createCommand(command, relationVersion); var created = createCommand(command, relationVersion);
return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build(); return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build();
} }
private boolean isSendPostfachMailOrder(CreateCommand command) {
return command.getOrder() == CommandOrder.SEND_POSTFACH_MAIL || command.getOrder() == CommandOrder.SEND_POSTFACH_NACHRICHT;
}
CreateCommand prepareCommandForPostfachNachricht(CreateCommand command, String vorgangId) {
var postfachBody = (PostfachMail) command.getBody();
var attachments = postfachBody.getAttachments().stream().map(this::stripToFileId).toList();
postfachBody = postfachBody.toBuilder().postfachId(getPostfachId(vorgangId))
.clearAttachments().attachments(attachments)
.build();
return command.toBuilder().body(postfachBody).build();
}
private FileId stripToFileId(FileId fileUri) {
var fileUriStr = fileUri.toString();
return FileId.from(fileUriStr.substring(fileUriStr.lastIndexOf("/") + 1, fileUriStr.length()));
}
private String getPostfachId(String vorgangId) {
return getVorgang(vorgangId).getEingang().getAntragsteller().getPostfachId();
}
private VorgangWithEingang getVorgang(String vorgangId) {
return vorgangController.getVorgang(vorgangId);
}
public Command createCommand(CreateCommand command, long version) { public Command createCommand(CreateCommand command, long version) {
return service.createCommand(command, version); return service.createCommand(command, version);
} }
......
...@@ -16,6 +16,7 @@ import org.mockito.ArgumentCaptor; ...@@ -16,6 +16,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Captor; import org.mockito.Captor;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Spy;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.ResultActions;
...@@ -23,10 +24,15 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; ...@@ -23,10 +24,15 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;
import de.itvsh.goofy.common.binaryfile.FileId;
import de.itvsh.goofy.common.command.CommandController.CommandByRelationController; import de.itvsh.goofy.common.command.CommandController.CommandByRelationController;
import de.itvsh.goofy.common.errorhandling.ExceptionController; import de.itvsh.goofy.common.errorhandling.ExceptionController;
import de.itvsh.goofy.postfach.PostfachMail;
import de.itvsh.goofy.postfach.PostfachMailTestFactory;
import de.itvsh.goofy.vorgang.AntragstellerTestFactory;
import de.itvsh.goofy.vorgang.VorgangController; import de.itvsh.goofy.vorgang.VorgangController;
import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory; import de.itvsh.goofy.vorgang.VorgangHeaderTestFactory;
import de.itvsh.goofy.vorgang.VorgangWithEingangTestFactory;
import de.itvsh.kop.common.test.TestUtils; import de.itvsh.kop.common.test.TestUtils;
class CommandControllerTest { class CommandControllerTest {
...@@ -37,8 +43,6 @@ class CommandControllerTest { ...@@ -37,8 +43,6 @@ class CommandControllerTest {
private CommandService service; private CommandService service;
@Mock @Mock
private CommandModelAssembler modelAssembler; private CommandModelAssembler modelAssembler;
@Mock
private VorgangController vorgangController;
private MockMvc mockMvc; private MockMvc mockMvc;
...@@ -116,12 +120,15 @@ class CommandControllerTest { ...@@ -116,12 +120,15 @@ class CommandControllerTest {
@Nested @Nested
class TestCommandByRelationController { class TestCommandByRelationController {
@Spy
@InjectMocks // NOSONAR @InjectMocks // NOSONAR
private CommandByRelationController controller; private CommandByRelationController controller;
@Mock @Mock
private CommandService service; private CommandService service;
@Mock @Mock
private CommandModelAssembler modelAssembler; private CommandModelAssembler modelAssembler;
@Mock
private VorgangController vorgangController;
private MockMvc mockMvc; private MockMvc mockMvc;
...@@ -164,6 +171,20 @@ class CommandControllerTest { ...@@ -164,6 +171,20 @@ class CommandControllerTest {
.andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID)); .andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID));
} }
@Nested
@DisplayName("CreateCommand with postfach mail")
class WithPostfachMail {
@Test
void shouldPrepareForPostfachNachricht() throws Exception {
doReturn(CommandTestFactory.createCreateCommand()).when(controller).prepareCommandForPostfachNachricht(any(), any());
doRequest(PostfachMailTestFactory.buildSendPostfachMailContent());
verify(controller).prepareCommandForPostfachNachricht(any(), eq(VorgangHeaderTestFactory.ID));
}
}
private ResultActions doRequest() throws Exception { private ResultActions doRequest() throws Exception {
return doRequest( return doRequest(
TestUtils.loadTextFile("jsonTemplates/command/createVorgangCommand.json.tmpl", CommandOrder.VORGANG_ANNEHMEN.name())); TestUtils.loadTextFile("jsonTemplates/command/createVorgangCommand.json.tmpl", CommandOrder.VORGANG_ANNEHMEN.name()));
...@@ -180,6 +201,53 @@ class CommandControllerTest { ...@@ -180,6 +201,53 @@ class CommandControllerTest {
} }
} }
@Nested
class TestPrepareCommandForPostfachNachricht {
@BeforeEach
void mockVorgangController() {
when(vorgangController.getVorgang(anyString())).thenReturn(VorgangWithEingangTestFactory.create());
}
@Test
void shouldCallVorgangController() {
controller.prepareCommandForPostfachNachricht(createPostfachCreateCommand(),
VorgangHeaderTestFactory.ID);
verify(vorgangController).getVorgang(VorgangHeaderTestFactory.ID);
}
@Test
void shouldMapAttachments() {
var preparedCommand = controller.prepareCommandForPostfachNachricht(createPostfachCreateCommand(), VorgangHeaderTestFactory.ID);
assertThat(((PostfachMail) preparedCommand.getBody()).getAttachments()).contains(FileId.from(PostfachMailTestFactory.ID));
}
@Test
void shouldAddPostfachId() {
var preparedCommand = controller.prepareCommandForPostfachNachricht(createPostfachCreateCommand(), VorgangHeaderTestFactory.ID);
assertThat(((PostfachMail) preparedCommand.getBody()).getPostfachId()).isEqualTo(AntragstellerTestFactory.POSTFACH_ID);
}
@Test
void shouldProceedWithEmptyAttachments() {
var createCommand = CommandTestFactory.createCreateCommandBuilder()
.body(PostfachMailTestFactory.createBuilder().clearAttachments().build()).build();
var preparedCommand = controller.prepareCommandForPostfachNachricht(createCommand, VorgangHeaderTestFactory.ID);
assertThat(((PostfachMail) preparedCommand.getBody()).getAttachments()).isEmpty();
}
private CreateCommand createPostfachCreateCommand() {
var postfachNachricht = PostfachMailTestFactory.createBuilder().clearAttachments()
.attachment(FileId.from("api/resource/" + PostfachMailTestFactory.ID)).build();
return CommandTestFactory.createCreateCommandBuilder().body(postfachNachricht).build();
}
}
@Nested @Nested
class CreateByVorgangAndItemName { class CreateByVorgangAndItemName {
......
...@@ -79,7 +79,8 @@ public class PostfachMailTestFactory { ...@@ -79,7 +79,8 @@ public class PostfachMailTestFactory {
return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithPostfachMail.json.tmpl", order.name(), return TestUtils.loadTextFile("jsonTemplates/command/createCommandWithPostfachMail.json.tmpl", order.name(),
postfachMail.getReplyOption().name(), postfachMail.getReplyOption().name(),
TestUtils.addQuote(postfachMail.getSubject()), TestUtils.addQuote(postfachMail.getSubject()),
TestUtils.addQuote(postfachMail.getMailBody())); TestUtils.addQuote(postfachMail.getMailBody()),
postfachMail.getAttachments().get(0).toString());
} }
public static String buildResendPostfachMailContent() { public static String buildResendPostfachMailContent() {
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"body": { "body": {
"replyOption": "%s", "replyOption": "%s",
"subject": %s, "subject": %s,
"mailBody": %s "mailBody": %s,
"attachments": ["%s"]
} }
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment