diff --git a/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java b/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java index 46b4b349080f85bfe01f34df937d571d55811870..dd7006b729b1a0b3ddab9cc77a4eef1a46b9cee3 100644 --- a/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java +++ b/src/main/java/de/ozgcloud/formcycle/OzgCloudConfig.java @@ -36,10 +36,7 @@ public class OzgCloudConfig implements Serializable { private static final long serialVersionUID = 1L; public static final String KEY_EINGANGSADAPTER_URL = "eingangsAdapterUrl"; - public static final String KEY_PLUGIN_VERSION = "pluginVersion"; - // TODO pluginVersion soll hier wieder raus und z.B. direkt in de.ozgcloud.formcycle.errorhandling.NodeThrewExceptionFactory eingebaut werden - private String pluginVersion; private String eingangsAdapterUrl; private ProxyConfig proxyConfig; diff --git a/src/main/java/de/ozgcloud/formcycle/OzgCloudPlugin.java b/src/main/java/de/ozgcloud/formcycle/OzgCloudPlugin.java index a86d2c20e0b105b8c6cc9cf348235dec517dfb66..a3879220107b3d48a4994f706afe339eb32fbe04 100644 --- a/src/main/java/de/ozgcloud/formcycle/OzgCloudPlugin.java +++ b/src/main/java/de/ozgcloud/formcycle/OzgCloudPlugin.java @@ -67,6 +67,7 @@ public final class OzgCloudPlugin implements IPluginActionNodeHandler<OzgPluginWorkflowNodeProperties>, IKeyValueSummarizableNode<OzgPluginWorkflowNodeProperties> { static final String VORGANGNUMMER_PROPERTY_KEY = "vorgangnummer"; + public static final String KEY_PLUGIN_VERSION = "pluginVersion"; private final transient PortParser portParser = new PortParser(); private final transient BuildProperties buildProperties = new BuildProperties(); @@ -172,25 +173,16 @@ public final class OzgCloudPlugin } OzgCloudFormDataHttpClient createOzgCloudClient(INodeExecutionParams<OzgPluginWorkflowNodeProperties> params) { - return new OzgCloudFormDataHttpClient(buildOzgCloudConfig(params.getData()), new SystemPropertiesProvider(), portParser, + var ozgCloudConfig = buildOzgCloudConfig(params.getData()); + validateOzgCloudConfig(ozgCloudConfig); + return new OzgCloudFormDataHttpClient(ozgCloudConfig, new SystemPropertiesProvider(), portParser, new OzgCloudResponseHandler(new ObjectMapper())); } - OzgCloudConfig buildOzgCloudConfig(OzgPluginWorkflowNodeProperties formProperties) { - var ozgCloudConfigBuilder = OzgCloudConfig.builder().pluginVersion(pluginVersion).eingangsAdapterUrl(getEingangsAdapterUrl(formProperties)); - ozgPluginPropertiesSupplier.getProxyProperties().ifPresent(ozgCloudConfigBuilder::proxyConfig); - return ozgCloudConfigBuilder.build(); - } - - String getEingangsAdapterUrl(OzgPluginWorkflowNodeProperties formProperties) { - var eingangsAdapterUrl = formProperties.isUseCustomEingangsAdapterUrl() - ? formProperties.getEingangsAdapterUrl() - : ozgPluginPropertiesSupplier.getEingangsAdapterUrl(); - - if (isBlank(eingangsAdapterUrl)) { + void validateOzgCloudConfig(OzgCloudConfig ozgCloudConfig) { + if (isBlank(ozgCloudConfig.getEingangsAdapterUrl())) { throw new TechnicalException("Eingangsadapter URL cannot be blank"); } - return eingangsAdapterUrl; } PluginFormDataAdapter createFormDataAdapter(INodeExecutionParams<OzgPluginWorkflowNodeProperties> params) { @@ -203,7 +195,19 @@ public final class OzgCloudPlugin } NodeThrewExceptionFactory createExceptionFactory(INodeExecutionParams<OzgPluginWorkflowNodeProperties> params) { - return new NodeThrewExceptionFactory(params.throwingException(), buildOzgCloudConfig(params.getData())); + return new NodeThrewExceptionFactory(params.throwingException(), pluginVersion, buildOzgCloudConfig(params.getData())); + } + + OzgCloudConfig buildOzgCloudConfig(OzgPluginWorkflowNodeProperties formProperties) { + var ozgCloudConfigBuilder = OzgCloudConfig.builder().eingangsAdapterUrl(getEingangsAdapterUrl(formProperties)); + ozgPluginPropertiesSupplier.getProxyProperties().ifPresent(ozgCloudConfigBuilder::proxyConfig); + return ozgCloudConfigBuilder.build(); + } + + String getEingangsAdapterUrl(OzgPluginWorkflowNodeProperties formProperties) { + return formProperties.isUseCustomEingangsAdapterUrl() + ? formProperties.getEingangsAdapterUrl() + : ozgPluginPropertiesSupplier.getEingangsAdapterUrl(); } INormalCompletionResult buildSuccessResult(ExecutionResult pluginExecutionResult, INodeExecutionParams<OzgPluginWorkflowNodeProperties> params) { diff --git a/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java b/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java index 8520f4ad53dc939d23c24eb178a7f327290d8f23..2599b5329ddc4c3786d1a113c5f37f00cdeb6c90 100644 --- a/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java +++ b/src/main/java/de/ozgcloud/formcycle/errorhandling/NodeThrewExceptionFactory.java @@ -9,6 +9,7 @@ import java.util.Optional; import org.apache.commons.lang3.StringUtils; import de.ozgcloud.formcycle.OzgCloudConfig; +import de.ozgcloud.formcycle.OzgCloudPlugin; import de.xima.fc.exceptions.NodeThrewException; import de.xima.fc.interfaces.workflow.params.INodeThrewExceptionBuilder; import lombok.RequiredArgsConstructor; @@ -19,6 +20,7 @@ public class NodeThrewExceptionFactory { public static final String KEY_EXCEPTION_ID = "exceptionId"; private final INodeThrewExceptionBuilder exceptionBuilder; + private final String pluginVersion; private final OzgCloudConfig pluginConfig; public NodeThrewException createInternalException(TechnicalException e) { @@ -48,10 +50,12 @@ public class NodeThrewExceptionFactory { String formatWithPluginConfig(String message) { var builder = StringUtils.isBlank(message) ? new StringBuilder("An error happened.") : new StringBuilder(message); builder.append("\nPlugin configuration:") - .append("\n\t").append(OzgCloudConfig.KEY_PLUGIN_VERSION).append(": ").append(pluginConfig.getPluginVersion()) - .append("\n\t").append(OzgCloudConfig.KEY_EINGANGSADAPTER_URL).append(": ").append(pluginConfig.getEingangsAdapterUrl()); - if (nonNull(pluginConfig.getProxyConfig())) { - builder.append("\n\t").append(pluginConfig.getProxyConfig()); + .append("\n\t").append(OzgCloudPlugin.KEY_PLUGIN_VERSION).append(": ").append(pluginVersion); + if (nonNull(pluginConfig)) { + builder.append("\n\t").append(OzgCloudConfig.KEY_EINGANGSADAPTER_URL).append(": ").append(pluginConfig.getEingangsAdapterUrl()); + if (nonNull(pluginConfig.getProxyConfig())) { + builder.append("\n\t").append(pluginConfig.getProxyConfig()); + } } return builder.toString(); } diff --git a/src/test/java/de/ozgcloud/formcycle/OzgCloudPluginTest.java b/src/test/java/de/ozgcloud/formcycle/OzgCloudPluginTest.java index 797c06829a248cc3eeaf47e379f1bf42308057a3..736fff9d29af66efc07b69a3ea520b2c272bb6ff 100644 --- a/src/test/java/de/ozgcloud/formcycle/OzgCloudPluginTest.java +++ b/src/test/java/de/ozgcloud/formcycle/OzgCloudPluginTest.java @@ -76,107 +76,118 @@ class OzgCloudPluginTest { } @Nested - class TestCreateOzgClient { + class TestCreateOzgCloudClient { @Mock private OzgPluginWorkflowNodeProperties formProperties; @Mock - private NodeThrewExceptionFactory exceptionFactory; + private OzgCloudConfig ozgCloudConfig; + + @BeforeEach + void init() { + doNothing().when(plugin).validateOzgCloudConfig(any()); + } @Test - @SneakyThrows void shouldCallBuildOzgCloudConfig() { when(invocationParameters.getData()).thenReturn(formProperties); - doReturn("").when(plugin).getEingangsAdapterUrl(any()); plugin.createOzgCloudClient(invocationParameters); verify(plugin).buildOzgCloudConfig(formProperties); } - @Nested - class TestEingangsAdapterUrl { + @Test + void shouldCallValidateOzgCloudConfig() { + doReturn(ozgCloudConfig).when(plugin).buildOzgCloudConfig(any()); - private static final String CUSTOM_URL = "http://custom.url"; + plugin.createOzgCloudClient(invocationParameters); - @Test - void shouldReturnCustomUrl() { - when(formProperties.getEingangsAdapterUrl()).thenReturn(CUSTOM_URL); - when(formProperties.isUseCustomEingangsAdapterUrl()).thenReturn(true); + verify(plugin).validateOzgCloudConfig(ozgCloudConfig); + } - var eingangsAdapterUrl = plugin.getEingangsAdapterUrl(formProperties); + } - assertThat(eingangsAdapterUrl).isEqualTo(CUSTOM_URL); - } + @Nested + class TestValidateOzgCloudConfig { - @Test - void shouldReturnDefaultUrl() { - when(formProperties.isUseCustomEingangsAdapterUrl()).thenReturn(false); - when(propertiesMapper.getEingangsAdapterUrl()).thenReturn(PropertiesTestFactory.EINGANGSADAPTER_URL); + @Test + void shouldValidateEingangsAdapterUrl() { + var ozgCloudConfig = OzgCloudConfigTestFactory.create(); - var eingangsAdapterUrl = plugin.getEingangsAdapterUrl(formProperties); + assertDoesNotThrow(() -> plugin.validateOzgCloudConfig(ozgCloudConfig)); + } - assertThat(eingangsAdapterUrl).isEqualTo(PropertiesTestFactory.EINGANGSADAPTER_URL); - } + @Test + void shouldThrowExceptionWhenMissingEngangsadapterUrl() { + var ozgCloudConfig = OzgCloudConfig.builder().build(); - @Test - void shouldThrowExceptionIfNoUrl() { - when(formProperties.isUseCustomEingangsAdapterUrl()).thenReturn(false); + assertThrows(TechnicalException.class, () -> plugin.validateOzgCloudConfig(ozgCloudConfig)); + } - assertThrows(TechnicalException.class, () -> plugin.getEingangsAdapterUrl(formProperties)); - } + } + + @Nested + class TestBuildOzgClientConfig { + + @Mock + private OzgPluginWorkflowNodeProperties formProperties; + + @BeforeEach + void init() { + when(propertiesMapper.getEingangsAdapterUrl()).thenReturn(PropertiesTestFactory.EINGANGSADAPTER_URL); } - @Nested - class TestBuildOzgClientConfig { + @Test + void shouldSetEingangsAdapterUrl() { + var ozgClientConfig = buildOzgCloudConfig(); - @Mock - private Properties properties; + assertThat(ozgClientConfig.getEingangsAdapterUrl()).isEqualTo(PropertiesTestFactory.EINGANGSADAPTER_URL); + } - @BeforeEach - void init() { - when(propertiesMapper.getEingangsAdapterUrl()).thenReturn(PropertiesTestFactory.EINGANGSADAPTER_URL); - } + @SneakyThrows + @Test + void shouldSetProxyConfig() { + var expectedProxyConfig = ProxyConfigTestFactory.create(); + when(propertiesMapper.getProxyProperties()).thenReturn(Optional.of(expectedProxyConfig)); - @Test - void shouldSetPluginVersion() { - var pluginVersion = "version"; - setPluginVersion(pluginVersion); + var ozgClientConfig = buildOzgCloudConfig(); - var ozgClientConfig = buildOzgCloudConfig(); + assertThat(ozgClientConfig.getProxyConfig()).isEqualTo(expectedProxyConfig); + } - assertThat(ozgClientConfig.getPluginVersion()).isEqualTo(pluginVersion); - } + @SneakyThrows + private OzgCloudConfig buildOzgCloudConfig() { + return plugin.buildOzgCloudConfig(formProperties); + } + } - @Test - void shouldSetEingangsAdapterUrl() { - var ozgClientConfig = buildOzgCloudConfig(); + @Nested + class TestGetEingangsAdapterUrl { - assertThat(ozgClientConfig.getEingangsAdapterUrl()).isEqualTo(PropertiesTestFactory.EINGANGSADAPTER_URL); - } + private static final String CUSTOM_URL = "http://custom.url"; - @SneakyThrows - @Test - void shouldSetProxyConfig() { - var expectedProxyConfig = ProxyConfigTestFactory.create(); - when(propertiesMapper.getProxyProperties()).thenReturn(Optional.of(expectedProxyConfig)); + @Mock + private OzgPluginWorkflowNodeProperties formProperties; + + @Test + void shouldReturnCustomUrl() { + when(formProperties.getEingangsAdapterUrl()).thenReturn(CUSTOM_URL); + when(formProperties.isUseCustomEingangsAdapterUrl()).thenReturn(true); - var ozgClientConfig = buildOzgCloudConfig(); + var eingangsAdapterUrl = plugin.getEingangsAdapterUrl(formProperties); - assertThat(ozgClientConfig.getProxyConfig()).isEqualTo(expectedProxyConfig); - } + assertThat(eingangsAdapterUrl).isEqualTo(CUSTOM_URL); + } - @SneakyThrows - private OzgCloudConfig buildOzgCloudConfig() { - return plugin.buildOzgCloudConfig(formProperties); - } + @Test + void shouldReturnDefaultUrl() { + when(formProperties.isUseCustomEingangsAdapterUrl()).thenReturn(false); + when(propertiesMapper.getEingangsAdapterUrl()).thenReturn(PropertiesTestFactory.EINGANGSADAPTER_URL); - @SneakyThrows - private void setPluginVersion(String pluginVersion) { - var pluginVersionField = OzgCloudPlugin.class.getDeclaredField("pluginVersion"); - pluginVersionField.setAccessible(true); - pluginVersionField.set(plugin, pluginVersion); - } + var eingangsAdapterUrl = plugin.getEingangsAdapterUrl(formProperties); + + assertThat(eingangsAdapterUrl).isEqualTo(PropertiesTestFactory.EINGANGSADAPTER_URL); } }