diff --git a/src/main/java/de/ozgcloud/formcycle/OzgPluginExecutor.java b/src/main/java/de/ozgcloud/formcycle/OzgPluginExecutor.java index f65cb73a0d2e1aecb983a48f9e7f5a79a4c31308..d3c47d1512242c40d7aa496c774867c8a3348522 100644 --- a/src/main/java/de/ozgcloud/formcycle/OzgPluginExecutor.java +++ b/src/main/java/de/ozgcloud/formcycle/OzgPluginExecutor.java @@ -58,23 +58,19 @@ public final class OzgPluginExecutor { public ExecutionResult execute() { LOG.debug("Executing plugin WorkflowElementNodePlugin"); - var formData = pluginFormDataAdapter.readFormData(); - return buildExecutionResult(sendFormData(addAttachedFiles(formData)), formData); - } - - FormCycleConfirmationResponse sendFormData(FormData formData) { - return ozgHttpClient.send(ozgCloudFormDataMapper.map(formData), formData.getAttachments(), formData.getRepresentations()); + var formData = addAttachedFiles(pluginFormDataAdapter.readFormData()); + return buildExecutionResult(sendFormData(formData), formData); } FormData addAttachedFiles(FormData formData) { var formDataBuilder = formData.toBuilder(); var attachedFiles = getAttachedFiles(formData.getAttachmentUuids()); Optional.ofNullable(attachedFiles.get(AttachmentType.REPRESENTATION)).ifPresentOrElse(formDataBuilder::representations, - () -> formDataBuilder.warning(buildWarning(OzgPluginSoftError.MISSING_REPRESENTATION, - "Representation is missing. Ensure workflow is configured to attach form view to form data."))); - Optional.ofNullable(attachedFiles.get(AttachmentType.ATTACHMENT)).ifPresentOrElse(formDataBuilder::attachments, - () -> formDataBuilder.warning( - buildWarning(OzgPluginSoftError.MISSING_ATTACHMENTS, "Attachments were found in form data, but files are missing."))); + () -> formDataBuilder.warning(buildMissingRepresentationsWarning(formData.getRequestId()))); + if (!formData.getAttachmentUuids().isEmpty()) { + Optional.ofNullable(attachedFiles.get(AttachmentType.ATTACHMENT)).ifPresentOrElse(formDataBuilder::attachments, + () -> formDataBuilder.warning(buildMissingAttachmentsWarning(formData.getRequestId()))); + } return formDataBuilder.build(); } @@ -90,10 +86,25 @@ public final class OzgPluginExecutor { return resultMap; } - Warning buildWarning(OzgPluginSoftError warningCode, String message) { + Warning buildMissingRepresentationsWarning(String requestId) { + return buildWarning(OzgPluginSoftError.MISSING_REPRESENTATION, + String.format("Representation is missing. Ensure workflow is configured to attach form view to form data. (Request ID: %s)", + requestId)); + } + + Warning buildMissingAttachmentsWarning(String requestId) { + return buildWarning(OzgPluginSoftError.MISSING_ATTACHMENTS, + String.format("Attachments uploaded in the form were not included in the form data. (RequestId: %s)", requestId)); + } + + private Warning buildWarning(OzgPluginSoftError warningCode, String message) { return Warning.builder().errorCode(warningCode).message(message).build(); } + FormCycleConfirmationResponse sendFormData(FormData formData) { + return ozgHttpClient.send(ozgCloudFormDataMapper.map(formData), formData.getAttachments(), formData.getRepresentations()); + } + ExecutionResult buildExecutionResult(FormCycleConfirmationResponse response, FormData formData) { LOG.debug("Formcycle adapter response: {}", response); return ExecutionResult.builder().vorgangnummer(response.getVorgangNummer()).warnings(formData.getWarnings()).build(); diff --git a/src/test/java/de/ozgcloud/formcycle/OzgPluginExecutorTest.java b/src/test/java/de/ozgcloud/formcycle/OzgPluginExecutorTest.java index 8fbca55bbb5152829ee2f387ddce5b81af54f9b6..14541d27b86ca97190257a779a1cdffc99bc78e3 100644 --- a/src/test/java/de/ozgcloud/formcycle/OzgPluginExecutorTest.java +++ b/src/test/java/de/ozgcloud/formcycle/OzgPluginExecutorTest.java @@ -134,66 +134,6 @@ class OzgPluginExecutorTest { } } - @Nested - @DisplayName("Send data") - class TestSendData { - - @Mock - private FormCycleFormData formcycleFormData; - @Mock - private FormCycleConfirmationResponse response; - - @Captor - private ArgumentCaptor<List<FormcycleAttachment>> attachmentsCapture; - @Captor - private ArgumentCaptor<List<FormcycleAttachment>> representationsCapture; - - @Test - void shouldCallMapper() { - sendFormData(); - - verify(ozgCloudFormDataMapper).map(FORM_DATA); - } - - @Test - void shouldSendFormData() { - when(ozgCloudFormDataMapper.map(any())).thenReturn(formcycleFormData); - - sendFormData(); - - verify(ozgHttpClient).send(eq(formcycleFormData), any(), any()); - } - - @Test - void shouldSendAttachments() { - sendFormData(); - - verify(ozgHttpClient).send(any(), attachmentsCapture.capture(), any()); - assertThat(attachmentsCapture.getValue()).hasSize(1).first().extracting("uuid").isEqualTo(FormDataTestFactory.ATTACHMENT_UUID); - } - - @Test - void shouldSendRepresentations() { - sendFormData(); - - verify(ozgHttpClient).send(any(), any(), representationsCapture.capture()); - assertThat(representationsCapture.getValue()).hasSize(1).first().extracting("uuid").isEqualTo(FormDataTestFactory.REPRESENTATION_UUID); - } - - @Test - void shouldReturnResponse() { - when(ozgHttpClient.send(any(), any(), any())).thenReturn(response); - - var result = sendFormData(); - - assertThat(result).isSameAs(response); - } - - private FormCycleConfirmationResponse sendFormData() { - return executor.sendFormData(FORM_DATA); - } - } - @Nested class TestAddAttachedFiles { @@ -239,6 +179,18 @@ class OzgPluginExecutorTest { assertThat(result.getWarnings()).isEmpty(); } + @Test + void shouldNotAddMissingAttachmentWarning() { + var attachedFiles = Map.of( + AttachmentType.REPRESENTATION, + List.of(FormcycleAttachmentTestFactory.createBuilder().uuid(FormDataTestFactory.REPRESENTATION_UUID).build())); + doReturn(attachedFiles).when(executor).getAttachedFiles(any()); + + var result = executor.addAttachedFiles(formData.toBuilder().clearAttachmentUuids().build()); + + assertThat(result.getWarnings()).isEmpty(); + } + private void mockGetAttachedFiles() { var attachedFiles = Map.of( AttachmentType.ATTACHMENT, @@ -251,18 +203,26 @@ class OzgPluginExecutorTest { @Nested class TestAddWarnings { - @BeforeEach - void setup() { + @Mock + private Warning warning; + + @Test + void shouldCallBuildMissingRepresentationsWarning() { + doReturn(Map.of(AttachmentType.ATTACHMENT, List.of(FormcycleAttachmentTestFactory.create()))).when(executor).getAttachedFiles(any()); + + executor.addAttachedFiles(formData); + + verify(executor).buildMissingRepresentationsWarning(formData.getRequestId()); } @Test void shouldAddWhenMissingRepresentations() { doReturn(Map.of(AttachmentType.ATTACHMENT, List.of(FormcycleAttachmentTestFactory.create()))).when(executor).getAttachedFiles(any()); + doReturn(warning).when(executor).buildMissingRepresentationsWarning(any()); var result = executor.addAttachedFiles(formData); - assertThat(result.getWarnings()).hasSize(1).first().extracting(Warning::getErrorCode) - .isEqualTo(OzgPluginSoftError.MISSING_REPRESENTATION.name()); + assertThat(result.getWarnings()).hasSize(1).first().isSameAs(warning); } @Test @@ -274,15 +234,25 @@ class OzgPluginExecutorTest { assertThat(result.getRepresentations()).isEmpty(); } + @Test + void shouldCallBuildMissingAttachmentsWarning() { + doReturn(Map.of(AttachmentType.REPRESENTATION, List.of(FormcycleAttachmentTestFactory.create()))).when(executor) + .getAttachedFiles(any()); + + executor.addAttachedFiles(formData); + + verify(executor).buildMissingAttachmentsWarning(formData.getRequestId()); + } + @Test void shouldAddWhenMissingAttachments() { doReturn(Map.of(AttachmentType.REPRESENTATION, List.of(FormcycleAttachmentTestFactory.create()))).when(executor) .getAttachedFiles(any()); + doReturn(warning).when(executor).buildMissingAttachmentsWarning(any()); var result = executor.addAttachedFiles(formData); - assertThat(result.getWarnings()).hasSize(1).first().extracting(Warning::getErrorCode) - .isEqualTo(OzgPluginSoftError.MISSING_ATTACHMENTS.name()); + assertThat(result.getWarnings()).hasSize(1).first().isSameAs(warning); } @Test @@ -362,22 +332,48 @@ class OzgPluginExecutorTest { } @Nested - class TestBuildWarning { + class TestBuildMissingRepresentationsWarning { - private final String MESSAGE = "message"; + private final String REQUEST_ID = "REQUEST_ID"; @Test void shouldSetErrorCode() { - var warning = executor.buildWarning(OzgPluginSoftError.MISSING_REPRESENTATION, MESSAGE); + var warning = executor.buildMissingRepresentationsWarning(REQUEST_ID); - assertThat(warning.getErrorCode()).isEqualTo(OzgPluginSoftError.MISSING_REPRESENTATION.toString()); + assertThat(warning.getErrorCode()).isEqualTo(OzgPluginSoftError.MISSING_REPRESENTATION.name()); } @Test void shouldSetMessage() { var warning = executor.buildWarning(OzgPluginSoftError.MISSING_REPRESENTATION, MESSAGE); - assertThat(warning.getMessage()).isEqualTo(MESSAGE); + @Test + void shouldSendAttachments() { + sendFormData(); + + verify(ozgHttpClient).send(any(), attachmentsCapture.capture(), any()); + assertThat(attachmentsCapture.getValue()).hasSize(1).first().extracting("uuid").isEqualTo(FormDataTestFactory.ATTACHMENT_UUID); + } + + @Test + void shouldSendRepresentations() { + sendFormData(); + + verify(ozgHttpClient).send(any(), any(), representationsCapture.capture()); + assertThat(representationsCapture.getValue()).hasSize(1).first().extracting("uuid").isEqualTo(FormDataTestFactory.REPRESENTATION_UUID); + } + + @Test + void shouldReturnResponse() { + when(ozgHttpClient.send(any(), any(), any())).thenReturn(response); + + var result = sendFormData(); + + assertThat(result).isSameAs(response); + } + + private FormCycleConfirmationResponse sendFormData() { + return executor.sendFormData(FORM_DATA); } }