diff --git a/Jenkinsfile b/Jenkinsfile index 268fd18f78f66154a59738499a37cacf1c5a65ca..ac7739f9f116a11e1108240bd5d0154242f8a39f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,8 +12,8 @@ pipeline { FAILED_STAGE = "" SH_SUCCESS_STATUS_CODE = 0 - PLUTO_INTERFACE_VERSION="1.8.0" - FORMCYCLE_INTERFACE_VERSION="1.9.0" + VORGANG_MANAGER_INTERFACE_VERSION="2.0.0" + FORMCYCLE_INTERFACE_VERSION="2.0.0"//readFormCycleInterfaceVersion() } options { @@ -24,16 +24,30 @@ pipeline { stages { - stage('build pluto-interface for java 11') { + stage('clone formcycle-interface (eingang-manager) repo') { steps { script { + cloneEingangAdapterRepo() + } + } + } + + stage('build vorgang-manager-interface for java 11') { + + steps { + script { + echo "Using FormCacle Interface Version: ${FORMCYCLE_INTERFACE_VERSION}" - clonePlutoRepo() + cloneVorgangManagerRepo() } configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { sh 'mvn --version' - sh 'mvn -f pluto/pluto-interface -s $MAVEN_SETTINGS -Djava.version=11 install' + // nur temporär die Java Version in der Pom anpassen, weil die für das Release 2.0.0 fest verdrahtet ist + sh 'xmlstarlet ed --pf -L -N w="http://maven.apache.org/POM/4.0.0" -u "//w:project/w:properties/w:maven.compiler.source" -v 11 vorgang-manager/vorgang-manager-interface/pom.xml' + sh 'xmlstarlet ed --pf -L -N w="http://maven.apache.org/POM/4.0.0" -u "//w:project/w:properties/w:maven.compiler.target" -v 11 vorgang-manager/vorgang-manager-interface/pom.xml' + + sh 'mvn -f vorgang-manager/vorgang-manager-interface -s $MAVEN_SETTINGS -Djava.version=11 install' } } } @@ -41,10 +55,6 @@ pipeline { stage('build formcycle-interface for java 11') { steps { - script { - - cloneIntelliformAdapterRepo() - } configFileProvider([configFile(fileId: 'maven-settings', variable: 'MAVEN_SETTINGS')]) { sh 'mvn --version' sh 'mvn -f intelliform-adapter/formcycle-adapter/formcycle-adapter-interface -s $MAVEN_SETTINGS -Djava.version=11 install' @@ -130,19 +140,19 @@ pipeline { } } -Void clonePlutoRepo() { +Void cloneVorgangManagerRepo() { withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { - sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/pluto.git' + sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/ozgcloud-app/vorgang-manager.git' } - dir("pluto") { - sh 'git checkout tags/${PLUTO_INTERFACE_VERSION} -b branch' + dir("vorgang-manager") { + sh 'git checkout tags/${VORGANG_MANAGER_INTERFACE_VERSION} -b branch' } - configureGit("pluto") + configureGit("vorgang-manager") } -Void cloneIntelliformAdapterRepo() { +Void cloneEingangAdapterRepo() { withCredentials([usernamePassword(credentialsId: 'jenkins-gitea-access-token', passwordVariable: 'TOKEN', usernameVariable: 'USER')]) { sh 'git clone https://${USER}:${TOKEN}@git.ozg-sh.de/mgm/intelliform-adapter.git' @@ -163,3 +173,7 @@ Void configureGit(String directory) { sh "git config user.name '${name}'" } } + +String readFormCycleInterfaceVersion() { + return sh(returnStdout: true, script: 'xmlstarlet sel -N w="http://maven.apache.org/POM/4.0.0" -t -v "//w:project/w:version" -n pom.xml').trim() +} diff --git a/pom.xml b/pom.xml index cb4a55053d5cdbaa2689e39c7bbe5ee39812473a..8055c2a4b91dbca953634864d27bed1c4bcc58a2 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ <!-- Version of FORMCYCLE to built against. --> <xfc.version>7.0.10</xfc.version> - <formcycle-adapter-interface.version>1.9.0</formcycle-adapter-interface.version> + <formcycle-adapter-interface.version>2.0.0</formcycle-adapter-interface.version> <lombok.version>1.18.26</lombok.version> <junit-jupiter.version>5.6.0</junit-jupiter.version> <mockito.version>5.1.1</mockito.version> @@ -50,7 +50,7 @@ <!-- FORMCYCLE and can be set to scope=provided. --> <dependency> - <groupId>de.itvsh.kop.eingangsadapter</groupId> + <groupId>de.ozgcloud.eingang</groupId> <artifactId>formcycle-adapter-interface</artifactId> <version>${formcycle-adapter-interface.version}</version> </dependency> diff --git a/src/main/java/de/ozgcloud/formcycle/HttpPostRequestBuilder.java b/src/main/java/de/ozgcloud/formcycle/HttpPostRequestBuilder.java index 6ee7e2cba4285552d73ba440a06f471fab030e30..6c61111af3d4c6f8a33f27335ab390a5c42bc54d 100644 --- a/src/main/java/de/ozgcloud/formcycle/HttpPostRequestBuilder.java +++ b/src/main/java/de/ozgcloud/formcycle/HttpPostRequestBuilder.java @@ -29,7 +29,7 @@ import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData; +import de.ozgcloud.eingang.formcycle.FormCycleFormData; import de.ozgcloud.formcycle.attachment.FormcycleAttachment; import lombok.RequiredArgsConstructor; diff --git a/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java b/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java index 3bb3bafd100304e0884536dc686ce149fb9945cd..dd7006b729b1a0b3ddab9cc77a4eef1a46b9cee3 100644 --- a/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java +++ b/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java @@ -26,9 +26,11 @@ import java.io.Serializable; import lombok.Builder; import lombok.Getter; +import lombok.ToString; @Builder(toBuilder = true) @Getter +@ToString public class OzgCloudConfig implements Serializable { private static final long serialVersionUID = 1L; diff --git a/src/main/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClient.java b/src/main/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClient.java index 7334d2b60370b1d68fbf6b2e5568457bd40fa4e8..c21d5586b7a09d71f1ec2a0ecebacb7cf1547f1f 100644 --- a/src/main/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClient.java +++ b/src/main/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClient.java @@ -47,9 +47,11 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.DefaultProxyRoutePlanner; import org.apache.http.protocol.HttpContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleConfirmationResponse; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData; +import de.ozgcloud.eingang.formcycle.FormCycleConfirmationResponse; +import de.ozgcloud.eingang.formcycle.FormCycleFormData; import de.ozgcloud.formcycle.attachment.FormcycleAttachment; import lombok.RequiredArgsConstructor; @@ -58,6 +60,8 @@ public class OzgCloudFormDataHttpClient { static final int HTTPCLIENT_TIMEOUT = 10 * 60 * 1000; + private static final Logger LOG = LoggerFactory.getLogger(OzgCloudFormDataHttpClient.class); + private final OzgCloudConfig config; private final SystemPropertiesProvider systemPropertiesProvider; private Optional<ProxyConfig> systemProxyConfig; @@ -68,10 +72,14 @@ public class OzgCloudFormDataHttpClient { public FormCycleConfirmationResponse send(FormCycleFormData formData, Collection<FormcycleAttachment> attachments, Collection<FormcycleAttachment> representations) throws IOException { + try ( var closeableHttpClient = createCloseableClient(); var closeableResponse = closeableHttpClient.execute(buildPostRequest(formData, attachments, representations), getContext())) { return parseResponse(closeableResponse); + } catch (Exception e) { + LOG.info("Used OzgCloudConfig: {}", config); + throw e; } } diff --git a/src/main/java/de/ozgcloud/formcycle/ProxyConfig.java b/src/main/java/de/ozgcloud/formcycle/ProxyConfig.java index 97c8bdcb186ca49662e4fe384ee77ddd5e2df5ce..6e2bec1b895cafb8c5d68e1e4fb64ab268acddea 100644 --- a/src/main/java/de/ozgcloud/formcycle/ProxyConfig.java +++ b/src/main/java/de/ozgcloud/formcycle/ProxyConfig.java @@ -27,9 +27,11 @@ import java.io.Serializable; import lombok.Builder; import lombok.Getter; +import lombok.ToString; @Builder @Getter +@ToString(exclude = "password") public class ProxyConfig implements Serializable { private static final long serialVersionUID = 1L; diff --git a/src/main/java/de/ozgcloud/formcycle/WorkflowElementNodePlugin.java b/src/main/java/de/ozgcloud/formcycle/WorkflowElementNodePlugin.java index 1592189f5b67ac2dd4897d1bc86faffcff5bc2bc..a315fcf08060e2b447bf7809e1f9517bac2c35ee 100644 --- a/src/main/java/de/ozgcloud/formcycle/WorkflowElementNodePlugin.java +++ b/src/main/java/de/ozgcloud/formcycle/WorkflowElementNodePlugin.java @@ -22,6 +22,8 @@ */ package de.ozgcloud.formcycle; +import static org.apache.commons.lang3.StringUtils.*; + import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.List; @@ -29,6 +31,9 @@ import java.util.Locale; import java.util.Optional; import java.util.function.Supplier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import de.ozgcloud.formcycle.attachment.AttachmentMapper; import de.ozgcloud.formcycle.errorhandling.EWorkflowElementNodeError; import de.ozgcloud.formcycle.errorhandling.EWorkflowElementNodeSoftError; @@ -39,6 +44,7 @@ import de.ozgcloud.formcycle.formdata.PluginFormDataAdapter; import de.xima.fc.beans.interfaces.IGuiIcon; import de.xima.fc.entities.Attachment; import de.xima.fc.exceptions.AbstractAbruptCompletionException; +import de.xima.fc.exceptions.NodeThrewException; import de.xima.fc.interfaces.plugin.lifecycle.IPluginInitializeData; import de.xima.fc.interfaces.workflow.elements.IElementHelpLocation; import de.xima.fc.interfaces.workflow.execution.IFileValueDescriptor; @@ -65,6 +71,8 @@ import de.xima.fc.workflow.mixin.IPluginActionNodeHandler; public final class WorkflowElementNodePlugin implements IPluginActionNodeHandler<WorkflowElementNodeProps>, IKeyValueSummarizableNode<WorkflowElementNodeProps> { + private static final Logger LOG = LoggerFactory.getLogger(WorkflowElementNodePlugin.class); + private transient IPluginInitializeData initializeData; private transient PluginPropertiesMapper pluginPropertiesMapper; @@ -85,9 +93,6 @@ public final class WorkflowElementNodePlugin @Override public String getName() { - // The unique name of this plugin. A fixed string is better than e.g. - // getClass().getName() -- when you move your plugin class to another - // package, the plugin name would change and existing actions would break. return "de.ozgcloud.formcycle.WorkflowElementNodePlugin"; } @@ -129,17 +134,17 @@ public final class WorkflowElementNodePlugin } @Override - public IValueDescriptor<?, ? extends IValueBuilder<?>> getSuccessValueDescriptor(IValueDescriptorFactory f) { + public IValueDescriptor<?, ? extends IValueBuilder<?>> getSuccessValueDescriptor(IValueDescriptorFactory factory) { // Data returned by this node when it is executed // Users can access this data e.g. via placeholders, for example: // [%$Action.RESULT.name%] // [%$Action.RESULT.items.name%] // [%$Action.RESULT.items.state%] - return f.recordBuilder().requiredProperty(ExecutionResult.VORGANGNUMMER_PROPERTY_KEY, f.string()).build(); + return factory.recordBuilder().requiredProperty(ExecutionResult.VORGANGNUMMER_PROPERTY_KEY, factory.string()).build(); } @Override - public IUnionValueDescriptor<String> getErrorValueDescriptor(IValueDescriptorFactory f) { + public IUnionValueDescriptor<String> getErrorValueDescriptor(IValueDescriptorFactory factory) { // For each error that can occur, additional data can be provided // Users can access this data e.g. via placeholders, for example: // [%$Action.ERROR_CODE%] @@ -147,16 +152,24 @@ public final class WorkflowElementNodePlugin // [%$Action.ERROR.file%] // [%$Action.ERROR.requiredPermissions[0]%] // [%$Action.ERROR.message%] - final var errorMessage = f.recordBuilder() // - .requiredProperty("message", f.string()) // - .build(); - return f.unionStringBuilder() // - .add(EWorkflowElementNodeError.OZGCLOUD_CANNOT_SEND.name(), errorMessage) // + // TODO das ist dafür gedacht, Fehler an der Oberfläche zu zeigen, was wir eigentlich nicht brauchen man könnte es einfach löschen + return factory.unionStringBuilder() // + .add(EWorkflowElementNodeError.OZGCLOUD_CANNOT_SEND.name(), f -> f.recordBuilder() + .requiredProperty(NodeThrewExceptionFactory.ERROR_MESSAGE_KEY, f.string()) + .build() + ) + .add(EWorkflowElementNodeError.PLUGIN_CANNOT_GET_ATTACHMENT.name(), f -> f.recordBuilder() + .requiredProperty(NodeThrewExceptionFactory.ERROR_MESSAGE_KEY, f.string()) + .build() + ) + .add(EWorkflowElementNodeError.PLUGIN_CONFIG_ERROR.name(), f -> f.recordBuilder() + .requiredProperty(NodeThrewExceptionFactory.ERROR_MESSAGE_KEY, v -> v.string()) + .build()) .build(); } @Override - public IUnionValueDescriptor<String> getSoftErrorValueDescriptor(IValueDescriptorFactory f) { + public IUnionValueDescriptor<String> getSoftErrorValueDescriptor(IValueDescriptorFactory factory) { // For each error that can occur, additional data can be provided // Users can access this data e.g. via placeholders, for example: // [%$Action.ERROR_CODE%] @@ -164,14 +177,14 @@ public final class WorkflowElementNodePlugin // [%$Action.ERROR.file%] // [%$Action.ERROR.requiredPermissions[0]%] // [%$Action.ERROR.message%] - final var wrongHostName = f.recordBuilder() // - .requiredProperty("expectedHostName", f.string()) // - .build(); - final var userDoesNotExist = f.recordBuilder() // - .build(); - return f.unionStringBuilder() // - .add(EWorkflowElementNodeSoftError.WRONG_HOST_NAME.name(), wrongHostName) // - .add(EWorkflowElementNodeSoftError.USER_DOES_NOT_EXIST.name(), userDoesNotExist) // + return factory.unionStringBuilder() // + .add(EWorkflowElementNodeSoftError.WRONG_HOST_NAME.name(), f -> f.recordBuilder() // + .requiredProperty("expectedHostName", v -> v.string()) // + .build()) // + .add(EWorkflowElementNodeSoftError.USER_DOES_NOT_EXIST.name(), f -> f.string()) // + .add(EWorkflowElementNodeError.PLUGIN_CONFIG_ERROR.name(), f -> f.recordBuilder() + .requiredProperty(NodeThrewExceptionFactory.ERROR_MESSAGE_KEY, v -> v.string()) + .build()) .build(); } @@ -191,19 +204,29 @@ public final class WorkflowElementNodePlugin var ozgCloudFormDataMapper = new OzgCloudFormDataMapper(); var exceptionFactory = new NodeThrewExceptionFactory(params.throwingException()); var attachmentsAdapter = new AttachmentMapper(exceptionFactory); - var pluginExecutor = new WorkflowElementNodeExecutor(ozgCloudFormDataMapper, createOzgClient(formProperties), exceptionFactory, + var pluginExecutor = new WorkflowElementNodeExecutor(ozgCloudFormDataMapper, createOzgClient(formProperties, exceptionFactory), + exceptionFactory, attachmentsAdapter, pluginFormDataAdapter, createAttachmentSupplier(workflowExecutionEnvironmentData)); var executionResult = pluginExecutor.execute(); return params.normalResult().success(executionResult.get()).build(); } - OzgCloudFormDataHttpClient createOzgClient(WorkflowElementNodeProps formProperties) { - return new OzgCloudFormDataHttpClient(buildOzgCloudConfig(formProperties), new SystemPropertiesProvider()); + // TODO hier braucht man die Factory eigentlich nicht, es würde reichen einfaches Exception zu werfen + OzgCloudFormDataHttpClient createOzgClient(WorkflowElementNodeProps formProperties, NodeThrewExceptionFactory exceptionFactory) + throws NodeThrewException { + var ozgCloudConfig = buildOzgCloudConfig(formProperties, exceptionFactory); + return new OzgCloudFormDataHttpClient(ozgCloudConfig, new SystemPropertiesProvider()); } - OzgCloudConfig buildOzgCloudConfig(WorkflowElementNodeProps formProperties) { + OzgCloudConfig buildOzgCloudConfig(WorkflowElementNodeProps formProperties, NodeThrewExceptionFactory exceptionFactory) + throws NodeThrewException { + var eingangsAdapterUrl = getEingangsAdapterUrl(formProperties); + if (isBlank(eingangsAdapterUrl)) { + throw exceptionFactory.createConfigurationException("Eingangsadapter URL cannot be blank"); + } + return OzgCloudConfig.builder() - .eingangsAdapterUrl(getEingangsAdapterUrl(formProperties)) + .eingangsAdapterUrl(eingangsAdapterUrl) .proxyConfig(pluginPropertiesMapper.mapProxyProperties(initializeData.getProperties())) .build(); } @@ -214,6 +237,7 @@ public final class WorkflowElementNodePlugin } return pluginPropertiesMapper.getEingangsAdapterUrl(initializeData.getProperties()); } + private Supplier<List<Attachment>> createAttachmentSupplier(IWorkflowExecutionEnvironmentData environmentData) { return () -> Optional.ofNullable(environmentData.getFormRecord().getAttachments()).orElse(List.of()); } diff --git a/src/main/java/de/ozgcloud/formcycle/errorhandling/EWorkflowElementNodeError.java b/src/main/java/de/ozgcloud/formcycle/errorhandling/EWorkflowElementNodeError.java index 11d6bc436c785889d1c72277906901ad4e7017c3..9c8eb36f290e517cc72377d91073a5130bc3bb93 100644 --- a/src/main/java/de/ozgcloud/formcycle/errorhandling/EWorkflowElementNodeError.java +++ b/src/main/java/de/ozgcloud/formcycle/errorhandling/EWorkflowElementNodeError.java @@ -23,5 +23,5 @@ package de.ozgcloud.formcycle.errorhandling; public enum EWorkflowElementNodeError { - OZGCLOUD_CANNOT_SEND, PLUGIN_CANNOT_GET_ATTACHMENT + OZGCLOUD_CANNOT_SEND, PLUGIN_CANNOT_GET_ATTACHMENT, PLUGIN_CONFIG_ERROR } diff --git a/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java b/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java index fcbb85e0b67bf062a990fbf6c978bcf806eb13de..97e6f5053665915e04020c5961c7af14f7791be9 100644 --- a/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java +++ b/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java @@ -11,19 +11,25 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class NodeThrewExceptionFactory { - static final String ERROR_MESSAGE_KEY = "message"; + public static final String ERROR_MESSAGE_KEY = "message"; private final INodeThrewExceptionBuilder exceptionBuilder; public NodeThrewException createCannotSendException(String message, Exception cause) { final var data = new JSONObject(); data.put(ERROR_MESSAGE_KEY, message); - return exceptionBuilder.error(OZGCLOUD_CANNOT_SEND.name(), data).cause(cause).build(); + return exceptionBuilder.error(OZGCLOUD_CANNOT_SEND.name(), data).message(message).cause(cause).build(); } public NodeThrewException createCannotGetAttachmentException(String message) { final var data = new JSONObject(); data.put(ERROR_MESSAGE_KEY, message); - return exceptionBuilder.error(PLUGIN_CANNOT_GET_ATTACHMENT.name(), data).build(); + return exceptionBuilder.error(PLUGIN_CANNOT_GET_ATTACHMENT.name(), data).message(message).build(); + } + + public NodeThrewException createConfigurationException(String message) { + final var data = new JSONObject(); + data.put(ERROR_MESSAGE_KEY, message); + return exceptionBuilder.error(PLUGIN_CONFIG_ERROR.name(), data).message(message).build(); } } diff --git a/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java b/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java index 136db664a3b30887b36495e588f14e9b176d5fef..fd97a32272be2c5de45c483acf4b59c59a5f506f 100644 --- a/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java +++ b/src/main/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapper.java @@ -32,15 +32,15 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.ObjectUtils; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleAttachmentGroup; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormHeader; -import de.itvsh.kop.eingangsadapter.formcycle.FormCyclePostfachAddress; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleServiceKonto; -import de.itvsh.ozg.pluto.vorgang.GrpcFormData; -import de.itvsh.ozg.pluto.vorgang.GrpcFormField; -import de.itvsh.ozg.pluto.vorgang.GrpcSubForm; +import de.ozgcloud.eingang.formcycle.FormCycleAttachmentGroup; +import de.ozgcloud.eingang.formcycle.FormCycleFormData; +import de.ozgcloud.eingang.formcycle.FormCycleFormHeader; +import de.ozgcloud.eingang.formcycle.FormCyclePostfachAddress; +import de.ozgcloud.eingang.formcycle.FormCycleServiceKonto; import de.ozgcloud.formcycle.HtmlUtils; +import de.ozgcloud.vorgang.vorgang.GrpcFormData; +import de.ozgcloud.vorgang.vorgang.GrpcFormField; +import de.ozgcloud.vorgang.vorgang.GrpcSubForm; public class OzgCloudFormDataMapper { static final String ATTACHMENTS_GROUP_NAME = "attachments"; diff --git a/src/test/java/de/ozgcloud/formcycle/FormCycleConfirmationResponseTestFactory.java b/src/test/java/de/ozgcloud/formcycle/FormCycleConfirmationResponseTestFactory.java index ad3b9342a4dc44171dd29ee270bc643c528a9e4e..282d4aef7e738673991c647f4fc0adba59b4be1f 100644 --- a/src/test/java/de/ozgcloud/formcycle/FormCycleConfirmationResponseTestFactory.java +++ b/src/test/java/de/ozgcloud/formcycle/FormCycleConfirmationResponseTestFactory.java @@ -1,6 +1,6 @@ package de.ozgcloud.formcycle; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleConfirmationResponse; +import de.ozgcloud.eingang.formcycle.FormCycleConfirmationResponse; public class FormCycleConfirmationResponseTestFactory { diff --git a/src/test/java/de/ozgcloud/formcycle/HttpPostRequestBuilderTest.java b/src/test/java/de/ozgcloud/formcycle/HttpPostRequestBuilderTest.java index 3f840ebc7baf78aa806292475d25f8ed8c73c1ab..15d7ae6a282d48faaa8b7c95eb01be956dc1e374 100644 --- a/src/test/java/de/ozgcloud/formcycle/HttpPostRequestBuilderTest.java +++ b/src/test/java/de/ozgcloud/formcycle/HttpPostRequestBuilderTest.java @@ -22,14 +22,9 @@ */ package de.ozgcloud.formcycle; -import static de.ozgcloud.formcycle.HttpPostRequestBuilder.ATTACHMENT_KEY; -import static de.ozgcloud.formcycle.HttpPostRequestBuilder.FORM_DATA_KEY; -import static de.ozgcloud.formcycle.HttpPostRequestBuilder.PROTOBUF_CONTENT_TYPE; -import static de.ozgcloud.formcycle.HttpPostRequestBuilder.REPRESENTATION_KEY; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static de.ozgcloud.formcycle.HttpPostRequestBuilder.*; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import java.net.URI; import java.util.List; @@ -44,7 +39,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData; +import de.ozgcloud.eingang.formcycle.FormCycleFormData; import de.ozgcloud.formcycle.attachment.FormcycleAttachmentTestFactory; import lombok.SneakyThrows; @@ -150,7 +145,6 @@ class HttpPostRequestBuilderTest { @Nested class TestBuildPostRequest { - @BeforeEach void setup() { when(cloudConfig.getEingangsAdapterUrl()).thenReturn(TARGET_URL); @@ -158,7 +152,7 @@ class HttpPostRequestBuilderTest { @Test void shouldSetTargetUrl() { - var expectedUrl = TARGET_URL + "/" + HttpPostRequestBuilder.FORMCYCLE_ENDPOINT; + var expectedUrl = TARGET_URL + "/" + HttpPostRequestBuilder.FORMCYCLE_ENDPOINT; when(cloudConfig.getEingangsAdapterUrl()).thenReturn(TARGET_URL); var httpPost = requestBuilder.build(); diff --git a/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientITCase.java b/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientITCase.java index 5b463a3399bbd5997f854116d9211a32aba409f5..e2257a3df39c111d59eaec0e835f1ac0b09c0bf7 100644 --- a/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientITCase.java +++ b/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientITCase.java @@ -33,12 +33,12 @@ import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleAttachmentGroup; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleConfirmationResponse; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormHeader; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleServiceKonto; -import de.itvsh.ozg.pluto.vorgang.GrpcFormData; +import de.ozgcloud.eingang.formcycle.FormCycleAttachmentGroup; +import de.ozgcloud.eingang.formcycle.FormCycleConfirmationResponse; +import de.ozgcloud.eingang.formcycle.FormCycleFormData; +import de.ozgcloud.eingang.formcycle.FormCycleFormHeader; +import de.ozgcloud.eingang.formcycle.FormCycleServiceKonto; +import de.ozgcloud.vorgang.vorgang.GrpcFormData; class OzgCloudFormDataHttpClientITCase { @@ -48,7 +48,7 @@ class OzgCloudFormDataHttpClientITCase { @Disabled("Test sollte nur manuell ausgeführt werden, da die Daten in ein Dev System eingeliefert werden") void testReal() throws IOException { - String url = "https://fuerth-formcycle.dev.by.kop-cloud.de/formData"; + String url = "https://fuerth-formcycle.dev.by.ozg-cloud.de/formData"; OzgCloudFormDataHttpClient client = new OzgCloudFormDataHttpClient(OzgCloudConfig.builder() .eingangsAdapterUrl(url).build(), new SystemPropertiesProvider()); diff --git a/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientTest.java b/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientTest.java index 596ca6ebeb164023777471943184f238111381f0..55aa9a9d98d755b9091fea21288e29752b0faa0b 100644 --- a/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientTest.java +++ b/src/test/java/de/ozgcloud/formcycle/OzgCloudFormDataHttpClientTest.java @@ -54,8 +54,9 @@ import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mock; import org.springframework.util.ReflectionUtils; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleConfirmationResponse; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData; +import de.ozgcloud.eingang.formcycle.FormCycleConfirmationResponse; +import de.ozgcloud.eingang.formcycle.FormCycleFormData; +import de.ozgcloud.formcycle.OzgCloudFormDataHttpClient.UnexpectedStatusCodeException; import de.ozgcloud.formcycle.attachment.FormcycleAttachment; import de.ozgcloud.formcycle.attachment.FormcycleAttachmentTestFactory; import lombok.SneakyThrows; @@ -145,7 +146,7 @@ class OzgCloudFormDataHttpClientTest { when(httpResponse.getEntity()).thenReturn(entityMock); when(httpResponse.getStatusLine()).thenReturn(statusLineMock); when(statusLineMock.getStatusCode()).thenReturn(HttpStatus.SC_OK); - + ByteArrayOutputStream out = new ByteArrayOutputStream(); response.writeTo(out); when(entityMock.getContent()).thenReturn(new ByteArrayInputStream(out.toByteArray())); @@ -162,7 +163,7 @@ class OzgCloudFormDataHttpClientTest { @Test void shouldThrowException() { when(statusLineMock.getStatusCode()).thenReturn(HttpStatus.SC_SERVICE_UNAVAILABLE); - + assertThatThrownBy(()->client.parseResponse(httpResponse)).isInstanceOf(UnexpectedStatusCodeException.class); } } diff --git a/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodeExecutorTest.java b/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodeExecutorTest.java index 6cd983cbd68cc973d29a37b57df65ef5d52ff1c7..ef68358ce6aa9bb6d4e8c06ea831ad57f22997bb 100644 --- a/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodeExecutorTest.java +++ b/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodeExecutorTest.java @@ -23,6 +23,7 @@ package de.ozgcloud.formcycle; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.io.IOException; @@ -42,8 +43,8 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleConfirmationResponse; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormData; +import de.ozgcloud.eingang.formcycle.FormCycleConfirmationResponse; +import de.ozgcloud.eingang.formcycle.FormCycleFormData; import de.ozgcloud.formcycle.attachment.AttachmentMapper; import de.ozgcloud.formcycle.attachment.AttachmentType; import de.ozgcloud.formcycle.attachment.FormcycleAttachment; @@ -154,8 +155,7 @@ class WorkflowElementNodeExecutorTest { var expectedAttachment = FormcycleAttachmentTestFactory.create(); doReturn(Map.of( AttachmentType.ATTACHMENT, Set.of(expectedAttachment), - AttachmentType.REPRESENTATION, Set.of(FormcycleAttachmentTestFactory.create())) - ).when(executor).getAttachedFiles(any()); + AttachmentType.REPRESENTATION, Set.of(FormcycleAttachmentTestFactory.create()))).when(executor).getAttachedFiles(any()); executor.execute(); @@ -169,8 +169,7 @@ class WorkflowElementNodeExecutorTest { var expectedRepresentations = FormcycleAttachmentTestFactory.create(); doReturn(Map.of( AttachmentType.ATTACHMENT, Set.of(FormcycleAttachmentTestFactory.create()), - AttachmentType.REPRESENTATION, Set.of(expectedRepresentations)) - ).when(executor).getAttachedFiles(any()); + AttachmentType.REPRESENTATION, Set.of(expectedRepresentations))).when(executor).getAttachedFiles(any()); executor.execute(); diff --git a/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodePluginTest.java b/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodePluginTest.java index 9acce43e3b9cebf26d11af7adf52756cec0db08e..d851698ee47a3867d9c03a9e51bc1a0fc4ec1ba0 100644 --- a/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodePluginTest.java +++ b/src/test/java/de/ozgcloud/formcycle/WorkflowElementNodePluginTest.java @@ -14,11 +14,13 @@ import org.mockito.Mock; import org.mockito.Spy; import org.springframework.util.ReflectionUtils; +import de.ozgcloud.formcycle.errorhandling.NodeThrewExceptionFactory; import de.xima.fc.interfaces.plugin.lifecycle.IPluginInitializeData; import de.xima.fc.interfaces.workflow.value.IRecordValueDescriptorBuilder; import de.xima.fc.interfaces.workflow.value.IStringValueDescriptor; import de.xima.fc.interfaces.workflow.value.IValueDescriptor; import de.xima.fc.interfaces.workflow.value.IValueDescriptorFactory; +import lombok.SneakyThrows; class WorkflowElementNodePluginTest { @@ -89,14 +91,17 @@ class WorkflowElementNodePluginTest { @Mock private WorkflowElementNodeProps formProperties; + @Mock + private NodeThrewExceptionFactory exceptionFactory; private OzgCloudConfig ozgCloudConfig = OzgCloudConfigTestFactory.create(); @Test + @SneakyThrows void shouldSetOzgCloudConfig() { - doReturn(ozgCloudConfig).when(plugin).buildOzgCloudConfig(any()); + doReturn(ozgCloudConfig).when(plugin).buildOzgCloudConfig(any(), any()); - var ozgClient = plugin.createOzgClient(formProperties); + var ozgClient = plugin.createOzgClient(formProperties, exceptionFactory); assertThat(getOzgCloudConfig(ozgClient)).isEqualTo(ozgCloudConfig); } @@ -129,7 +134,7 @@ class WorkflowElementNodePluginTest { } @Nested - class TestBuildOzgClientConfig{ + class TestBuildOzgClientConfig { @Mock private Properties properties; @@ -138,7 +143,7 @@ class WorkflowElementNodePluginTest { void shouldSetEingangsAdapterUrl() { doReturn(PropertiesTestFactory.EINGANGSADAPTER_URL).when(plugin).getEingangsAdapterUrl(any()); - var ozgClientConfig = plugin.buildOzgCloudConfig(formProperties); + var ozgClientConfig = buildOzgCloudConfig(); assertThat(ozgClientConfig.getEingangsAdapterUrl()).isEqualTo(PropertiesTestFactory.EINGANGSADAPTER_URL); } @@ -146,22 +151,41 @@ class WorkflowElementNodePluginTest { @Test void shouldSetProxyConfig() { var expectedProxyConfig = ProxyConfigTestFactory.create(); + when(propertiesMapper.getEingangsAdapterUrl(any())).thenReturn(PropertiesTestFactory.EINGANGSADAPTER_URL); when(propertiesMapper.mapProxyProperties(any())).thenReturn(expectedProxyConfig); - var ozgClientConfig = plugin.buildOzgCloudConfig(formProperties); + var ozgClientConfig = buildOzgCloudConfig(); assertThat(ozgClientConfig.getProxyConfig()).isEqualTo(expectedProxyConfig); } @Test void shouldCallMapProxyProperties() { + doReturn(PropertiesTestFactory.EINGANGSADAPTER_URL).when(plugin).getEingangsAdapterUrl(any()); when(initializeData.getProperties()).thenReturn(properties); - plugin.buildOzgCloudConfig(formProperties); + buildOzgCloudConfig(); verify(propertiesMapper).mapProxyProperties(properties); } + + @Test + void shouldCallCreateException() { + try { + buildOzgCloudConfig(); + } catch (NullPointerException e) { + // ignore exception + } + + verify(exceptionFactory).createConfigurationException(anyString()); + } + + @SneakyThrows + private OzgCloudConfig buildOzgCloudConfig() { + return plugin.buildOzgCloudConfig(formProperties, exceptionFactory); + } } + private OzgCloudConfig getOzgCloudConfig(OzgCloudFormDataHttpClient ozgClient) { var ozgCloudConfigField = ReflectionUtils.findField(OzgCloudFormDataHttpClient.class, "config"); ozgCloudConfigField.setAccessible(true); diff --git a/src/test/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactoryTest.java b/src/test/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactoryTest.java index 9e54581e3f65e8c75ddebafee10b617d8dde6305..fc9ed294f733899cb4353c9db23a573d37193429 100644 --- a/src/test/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactoryTest.java +++ b/src/test/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactoryTest.java @@ -41,6 +41,7 @@ class NodeThrewExceptionFactoryTest { @BeforeEach void setup() { when(exceptionBuilder.error(errorKeyCaptor.capture(), errorDataCaptor.capture())).thenReturn(exceptionBuilder); + when(exceptionBuilder.message(anyString())).thenReturn(exceptionBuilder); } @Nested diff --git a/src/test/java/de/ozgcloud/formcycle/formdata/GrpcFormFieldTestFactory.java b/src/test/java/de/ozgcloud/formcycle/formdata/GrpcFormFieldTestFactory.java index f58d7d89400ae31484c8a153023be6f7544aff4f..21f902b0a16e1dc8130a25c460e470e04d5e32df 100644 --- a/src/test/java/de/ozgcloud/formcycle/formdata/GrpcFormFieldTestFactory.java +++ b/src/test/java/de/ozgcloud/formcycle/formdata/GrpcFormFieldTestFactory.java @@ -25,8 +25,8 @@ package de.ozgcloud.formcycle.formdata; import static de.ozgcloud.formcycle.formdata.FormDataTestFactory.*; import static de.ozgcloud.formcycle.formdata.StructureMockFactory.*; -import de.itvsh.ozg.pluto.vorgang.GrpcFormField; -import de.itvsh.ozg.pluto.vorgang.GrpcFormField.Builder; +import de.ozgcloud.vorgang.vorgang.GrpcFormField; +import de.ozgcloud.vorgang.vorgang.GrpcFormField.Builder; public class GrpcFormFieldTestFactory { diff --git a/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java b/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java index 90df659e18d28bf42d18b734be73c6fbff5ff927..8b2bd5258e85bb86cba17a50c7fa1f53c64d7392 100644 --- a/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java +++ b/src/test/java/de/ozgcloud/formcycle/formdata/OzgCloudFormDataMapperTest.java @@ -37,13 +37,13 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.Spy; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleAttachmentGroup; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleFormHeader; -import de.itvsh.kop.eingangsadapter.formcycle.FormCycleServiceKonto; -import de.itvsh.ozg.pluto.vorgang.GrpcFormData; -import de.itvsh.ozg.pluto.vorgang.GrpcFormField; -import de.itvsh.ozg.pluto.vorgang.GrpcFormFieldOrBuilder; -import de.itvsh.ozg.pluto.vorgang.GrpcSubForm; +import de.ozgcloud.eingang.formcycle.FormCycleAttachmentGroup; +import de.ozgcloud.eingang.formcycle.FormCycleFormHeader; +import de.ozgcloud.eingang.formcycle.FormCycleServiceKonto; +import de.ozgcloud.vorgang.vorgang.GrpcFormData; +import de.ozgcloud.vorgang.vorgang.GrpcFormField; +import de.ozgcloud.vorgang.vorgang.GrpcFormFieldOrBuilder; +import de.ozgcloud.vorgang.vorgang.GrpcSubForm; class OzgCloudFormDataMapperTest {