diff --git a/.gitignore b/.gitignore index 3fc1d884b983db7cd48581b4198239e70ebc5119..4c1a41b2c5665e76dae6bd753ebdbe7fdfe74337 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ target/ .idea *.iml *.orig +.vscode/settings.json diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java index 80496bb8b53b809302bfb7d426be4dafcff80bda..331b155a60b7e4ca3fbd112ab4ad99e487d69e5f 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationManagerConfiguration.java @@ -64,6 +64,7 @@ public class CollaborationManagerConfiguration { public static final String TEMPLATE_HANDLER_NAME = "collaboration_TemplateHandler"; public static final String VORGANG_ATTACHED_ITEM_REMOTE_SERVICE_NAME = "collaboration_VorgangAttachedItemRemoteService"; public static final String VORGANG_ATTACHED_ITEM_SERVICE_NAME = "collaboration_VorgangAttachedItemService"; + public static final String VORGANG_MANAGER_PROPERTIES_NAME = "collaboration_vorgangManagerProperties"; public static final String CALL_CONTEXT_INTERCEPTOR_NAME = "collaboration_CallContextInterceptor"; public static final String CALL_CONTEXT_PROVIDER_NAME = "collaboration_CallContextProvider"; diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java index 367588a12e4519d7f136b699cd1b85c859f8c4eb..257d19c5ad692c1f026bdff02e62d96175857aca 100644 --- a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/CollaborationService.java @@ -23,7 +23,6 @@ */ package de.ozgcloud.collaboration; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -51,7 +50,7 @@ public class CollaborationService { static final String CREATE_ATTACHED_ITEM_ORDER = "CREATE_ATTACHED_ITEM"; static final String SUBCOMMANDS_EXECUTION_MODE = "PARALLEL"; - public static final String KEY_TEMPLATE_URL = "url"; + public static final String KEY_VORGANG_LINK = "linkToVorgang"; public static final String COLLABORATION_NACHRICHT_TEMPLATE = "collaboration.nachrichtTemplate.txt.ftlh"; static final String SEND_POSTFACH_NACHRICHT_ORDER = "SEND_POSTFACH_NACHRICHT"; @@ -78,6 +77,7 @@ public class CollaborationService { private final CommandMapper commandMapper; @Qualifier(CollaborationManagerConfiguration.TEMPLATE_HANDLER_NAME) // NOSONAR private final TemplateHandler templateHandler; + private final FachstelleVorgangUrlProvider urlProvider; public void createCollaborationRequest(@Valid CollaborationRequest collaborationRequest) { var enrichedRequest = enrichCollaborationRequest(collaborationRequest, vorgangService.createCollaborationVorgang(collaborationRequest)); @@ -125,7 +125,8 @@ public class CollaborationService { } OzgCloudCommand buildSendPostfachNachrichtCommand(CollaborationRequest collaborationRequest, ServiceKonto serviceKonto) { - var bodyObject = buildPostfachSendNachrichtCommandBody(buildPostfachAddress(serviceKonto.getAddresses().getFirst(), serviceKonto.getType())); + var bodyObject = buildPostfachSendNachrichtCommandBody(buildPostfachAddress(serviceKonto.getAddresses().getFirst(), serviceKonto.getType()), + collaborationRequest.getVorgangId()); return OzgCloudCommand.builder() .vorgangId(commandMapper.toOzgCloudVorgangId(collaborationRequest.getVorgangId())) .relationId(commandMapper.mapRelationId(collaborationRequest.getVorgangId())) @@ -143,19 +144,19 @@ public class CollaborationService { ServiceKonto.FIELD_SERVICEKONTO_TYPE, serviceKontoType); } - Map<String, Object> buildPostfachSendNachrichtCommandBody(Map<String, Object> postfachAddress) { + Map<String, Object> buildPostfachSendNachrichtCommandBody(Map<String, Object> postfachAddress, String vorgangId) { return Map.of( FIELD_REPLY_OPTION, REPLY_OPTION, FIELD_SUBJECT, SUBJECT, - FIELD_MAIL_BODY, getAnfrageText(), + FIELD_MAIL_BODY, getAnfrageText(vorgangId), ServiceKonto.FIELD_POSTFACH_ADDRESS, postfachAddress); } - String getAnfrageText() { - return templateHandler.fillTemplate(COLLABORATION_NACHRICHT_TEMPLATE, getTemplateParameters()); + String getAnfrageText(String vorgangId) { + return templateHandler.fillTemplate(COLLABORATION_NACHRICHT_TEMPLATE, getTemplateParameters(vorgangId)); } - Map<String, Object> getTemplateParameters() { - return Collections.emptyMap(); + Map<String, Object> getTemplateParameters(String vorgangId) { + return Map.of(KEY_VORGANG_LINK, urlProvider.getUrl(vorgangId)); } } \ No newline at end of file diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/FachstelleProperties.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/FachstelleProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..f7af41f49b8778af927df2f44918c18e071d65ec --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/FachstelleProperties.java @@ -0,0 +1,18 @@ +package de.ozgcloud.collaboration; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import lombok.Getter; +import lombok.Setter; + +@Configuration +@ConfigurationProperties(prefix = FachstelleProperties.PREFIX) +@Getter +@Setter +class FachstelleProperties { + + static final String PREFIX = "ozgcloud.fachstelle"; + + private String host; +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/FachstelleVorgangUrlProvider.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/FachstelleVorgangUrlProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..5952aeab811e7d0eec5c8a9d211886a0a3b7953c --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/FachstelleVorgangUrlProvider.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.collaboration; + +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.regex.Pattern; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +import de.ozgcloud.common.errorhandling.TechnicalException; +import lombok.RequiredArgsConstructor; + +@Component +@RequiredArgsConstructor +class FachstelleVorgangUrlProvider { + + private final FachstelleProperties fachstelleProperties; + @Qualifier(CollaborationManagerConfiguration.VORGANG_MANAGER_PROPERTIES_NAME) // NOSONAR + private final VorgangManagerProperties vorgangManagerProperties; + + public static final String VORGANG_URL_TEMPLATE = "%s/resources?uri=%s"; + private static final String RESOURCE_URI_TEMPLATE = "%s/vorgangs/%s"; + private static final String SERVICE_DOMAIN_NAME_PATTERN = "^(.*:/+)?([a-zA-Z.-]+)(:\\d*)?$"; + + public String getUrl(String vorgangId) { + var fachstelleHost = fachstelleProperties.getHost(); + var serviceAddress = vorgangManagerProperties.getServiceAddress(); + if (StringUtils.isAnyBlank(fachstelleHost, serviceAddress)) { + throw new TechnicalException("Link to Fachstelle is not configured!"); + } + return VORGANG_URL_TEMPLATE.formatted(fachstelleHost, buildVorgangUri(vorgangId, serviceAddress)); + } + + String buildVorgangUri(String vorgangId, String serviceAddress) { + var domainName = extractServiceDomainName(serviceAddress); + var vorgangUri = RESOURCE_URI_TEMPLATE.formatted(domainName, vorgangId); + return URLEncoder.encode(vorgangUri, StandardCharsets.UTF_8); + } + + String extractServiceDomainName(String serviceAddress) { + var match = Pattern.compile(SERVICE_DOMAIN_NAME_PATTERN).matcher(serviceAddress); + if (!match.find()) { + throw new TechnicalException("No domain name found in " + serviceAddress); + } + return match.group(2); + } +} diff --git a/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/VorgangManagerProperties.java b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/VorgangManagerProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..97d517e31f5e0a2308ef28fcfe188701a1cb2507 --- /dev/null +++ b/collaboration-manager-server/src/main/java/de/ozgcloud/collaboration/VorgangManagerProperties.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.collaboration; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import lombok.Getter; +import lombok.Setter; + +@Configuration(CollaborationManagerConfiguration.VORGANG_MANAGER_PROPERTIES_NAME) // NOSONAR +@ConfigurationProperties(prefix = VorgangManagerProperties.PREFIX) +@Getter +@Setter +class VorgangManagerProperties { + + static final String PREFIX = "ozgcloud.vorgang-manager"; + + private String serviceAddress; +} diff --git a/collaboration-manager-server/src/main/resources/templates/collaboration.nachrichtTemplate.txt.ftlh b/collaboration-manager-server/src/main/resources/templates/collaboration.nachrichtTemplate.txt.ftlh index 5874936fb45fd176e05cef6a7e888b4b6fb0379c..5259992504dabd4761c1c656363a765d2f8a417d 100644 --- a/collaboration-manager-server/src/main/resources/templates/collaboration.nachrichtTemplate.txt.ftlh +++ b/collaboration-manager-server/src/main/resources/templates/collaboration.nachrichtTemplate.txt.ftlh @@ -1,7 +1,4 @@ -Hallo Fachstelle, +Guten Tag, +Sie haben eine Zuarbeitsanfrage erhalten. Bitte klicken Sie auf folgenden Link, um zum Vorgang zu gelangen: -bitte bearbeiten: -${url!"http://www.host.local"} - -Danke, -Verwaltung \ No newline at end of file +${linkToVorgang} \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java index b5c9c52e92d34ba535e9563c7891d4a7d5c0a2b8..1d0867baad9d780b636d5421070b7f824fe0f11f 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceITCase.java @@ -34,7 +34,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.NullAndEmptySource; import org.junit.jupiter.params.provider.ValueSource; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.annotation.DirtiesContext; import de.ozgcloud.common.test.ITCase; diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java index 4d1f78dda4fac0508c147c1cd8e8c8a74767dfd0..68dc021e4f75af3f230a19d73cbe778a91b9aa74 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/CollaborationServiceTest.java @@ -24,6 +24,7 @@ package de.ozgcloud.collaboration; import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.InstanceOfAssertFactories.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -37,6 +38,8 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import com.thedeanda.lorem.LoremIpsum; + import de.ozgcloud.apilib.common.command.OzgCloudCommand; import de.ozgcloud.apilib.common.command.OzgCloudCommandService; import de.ozgcloud.apilib.common.command.OzgCloudCreateSubCommandsRequest; @@ -77,6 +80,8 @@ class CollaborationServiceTest { private CommandMapper commandMapper; @Mock private TemplateHandler templateHandler; + @Mock + private FachstelleVorgangUrlProvider urlProvider; @Nested class TestCreateCollaborationRequest { @@ -400,7 +405,7 @@ class CollaborationServiceTest { when(commandMapper.toOzgCloudVorgangId(anyString())).thenReturn(VORGANG_ID); when(commandMapper.mapRelationId(anyString())).thenReturn(RELATION_ID); when(commandMapper.toOzgCloudUserId(anyString())).thenReturn(OZG_CLOUD_ID); - doReturn(OBJECT_MAP).when(service).buildPostfachSendNachrichtCommandBody(any()); + doReturn(OBJECT_MAP).when(service).buildPostfachSendNachrichtCommandBody(any(), any()); } @Test @@ -417,7 +422,7 @@ class CollaborationServiceTest { buildSendPostfachNachrichtCommand(); - verify(service).buildPostfachSendNachrichtCommandBody(postfachAddressMap); + verify(service).buildPostfachSendNachrichtCommandBody(postfachAddressMap, VorgangTestFactory.ID_STR); } @Test @@ -524,7 +529,7 @@ class CollaborationServiceTest { @BeforeEach void init() { - doReturn(CollaborationRequestTestFactory.BESCHREIBUNG).when(service).getAnfrageText(); + doReturn(CollaborationRequestTestFactory.BESCHREIBUNG).when(service).getAnfrageText(any()); } @Test @@ -549,53 +554,74 @@ class CollaborationServiceTest { } private Map<String, Object> buildSendNachrichtCommandBody() { - return service.buildPostfachSendNachrichtCommandBody(POSTFACH_ADDRESS); + return service.buildPostfachSendNachrichtCommandBody(POSTFACH_ADDRESS, VorgangTestFactory.ID_STR); } } @Nested - class TestGetDefaultAnfrageText { + class TestGetAnfrageText { private static final String DEFAULT_MAIL_TEXT = "default mail text"; + private static final Map<String, Object> TEMPLATE_PARAMETERS = Map.of("key", "value "); + @BeforeEach void init() { when(templateHandler.fillTemplate(anyString(), any())).thenReturn(DEFAULT_MAIL_TEXT); + doReturn(TEMPLATE_PARAMETERS).when(service).getTemplateParameters(any()); } @Test void shouldCallGetTemplateParameters() { - service.getAnfrageText(); + getAnfrageText(); - verify(service).getTemplateParameters(); + verify(service).getTemplateParameters(VorgangTestFactory.ID_STR); } @Test void shouldCallTemplateHandler() { - var templateParameters = Map.<String, Object>of("key", "value "); - doReturn(templateParameters).when(service).getTemplateParameters(); - - service.getAnfrageText(); + getAnfrageText(); - verify(templateHandler).fillTemplate(CollaborationService.COLLABORATION_NACHRICHT_TEMPLATE, templateParameters); + verify(templateHandler).fillTemplate(CollaborationService.COLLABORATION_NACHRICHT_TEMPLATE, TEMPLATE_PARAMETERS); } @Test void shouldReturnDefaultMailText() { - var result = service.getAnfrageText(); + var result = getAnfrageText(); assertThat(result).isEqualTo(DEFAULT_MAIL_TEXT); } + + private String getAnfrageText() { + return service.getAnfrageText(VorgangTestFactory.ID_STR); + } } @Nested class TestGetTemplateParameters { + private final String linkToVorgang = LoremIpsum.getInstance().getUrl(); + + @Test + void shouldCallUrlProvider() { + when(urlProvider.getUrl(any())).thenReturn(linkToVorgang); + + getTemplateParameters(); + + verify(urlProvider).getUrl(VorgangTestFactory.ID_STR); + } + @Test void shouldReturnTemplateParameters() { - var result = service.getTemplateParameters(); + when(urlProvider.getUrl(any())).thenReturn(linkToVorgang); + + var result = getTemplateParameters(); + + assertThat(result).containsExactly(Map.entry(CollaborationService.KEY_VORGANG_LINK, linkToVorgang)); + } - assertThat(result).isEmpty(); + private Map<String, Object> getTemplateParameters() { + return service.getTemplateParameters(VorgangTestFactory.ID_STR); } } } \ No newline at end of file diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/FachstelleVorgangUrlProviderTest.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/FachstelleVorgangUrlProviderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..161eb0af86cc6e7c5d936de4d76ccd73272a1cf3 --- /dev/null +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/FachstelleVorgangUrlProviderTest.java @@ -0,0 +1,162 @@ +package de.ozgcloud.collaboration; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; +import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import de.ozgcloud.collaboration.vorgang.VorgangTestFactory; +import de.ozgcloud.common.errorhandling.TechnicalException; + +class FachstelleVorgangUrlProviderTest { + + @Mock + private FachstelleProperties fachstelleProperties; + @Mock + private VorgangManagerProperties vorgangManagerProperties; + + @Spy + @InjectMocks + private FachstelleVorgangUrlProvider provider; + + @Nested + class TestGetUrl { + + private static final String FACHSTELLE_HOST = "https://test.fachstelle.de"; + private static final String VORGANG_MANAGER_SERVICE_ADDRESS = "vorgang-manager.test-namespace"; + + @Nested + class OnPropertiesSet { + + private static final String RESOURCES_URL = FACHSTELLE_HOST + "/resources"; + private static final String URI_PARAM = VORGANG_MANAGER_SERVICE_ADDRESS + "/vorgangs/" + VorgangTestFactory.ID_STR; + + @BeforeEach + void mock() { + when(fachstelleProperties.getHost()).thenReturn(FACHSTELLE_HOST); + when(vorgangManagerProperties.getServiceAddress()).thenReturn(VORGANG_MANAGER_SERVICE_ADDRESS); + + } + + @Test + void shouldGetFachstelleHost() { + provider.getUrl(VorgangTestFactory.ID_STR); + + verify(fachstelleProperties).getHost(); + } + + @Test + void shouldGetVorgangManagerServiceAddress() { + provider.getUrl(VorgangTestFactory.ID_STR); + + verify(vorgangManagerProperties).getServiceAddress(); + } + + @Test + void shouldCallBuildVorgangUri() { + provider.getUrl(VorgangTestFactory.ID_STR); + + verify(provider).buildVorgangUri(VorgangTestFactory.ID_STR, VORGANG_MANAGER_SERVICE_ADDRESS); + } + + @Test + void shouldReturnUrl() { + doReturn(URI_PARAM).when(provider).buildVorgangUri(any(), any()); + + var vorgangUrl = provider.getUrl(VorgangTestFactory.ID_STR); + + assertThat(vorgangUrl).isEqualTo(RESOURCES_URL + "?uri=" + URI_PARAM); + } + } + + @Nested + class OnPropertiesNotSet { + + @ParameterizedTest + @NullAndEmptySource + void shouldThrowExceptionIfFachstelleHostIsNotSet(String host) { + when(fachstelleProperties.getHost()).thenReturn(host); + when(vorgangManagerProperties.getServiceAddress()).thenReturn(VORGANG_MANAGER_SERVICE_ADDRESS); + + assertThrows(TechnicalException.class, () -> provider.getUrl(VorgangTestFactory.ID_STR)); + } + + @ParameterizedTest + @NullAndEmptySource + void shouldThrowExceptionIfServiceAddressIsNotSet(String serviceAddress) { + when(vorgangManagerProperties.getServiceAddress()).thenReturn(serviceAddress); + when(fachstelleProperties.getHost()).thenReturn(FACHSTELLE_HOST); + + assertThrows(TechnicalException.class, () -> provider.getUrl(VorgangTestFactory.ID_STR)); + } + } + } + + @Nested + class TestBuildVorgangUri { + + private static final String VORGANG_MANAGER_DOMAIN_NAME = "vorgang-manager.by-kiel-dev"; + private static final String VORGANG_MANAGER_SERVICE_ADDRESS = "dns:///vorgang-manager.by-kiel-dev:9090"; + + @BeforeEach + void setUp() { + doReturn(VORGANG_MANAGER_DOMAIN_NAME).when(provider).extractServiceDomainName(any()); + } + + @Test + void shouldCallExtractServiceDomainName() { + buildVorgangUri(); + + verify(provider).extractServiceDomainName(VORGANG_MANAGER_SERVICE_ADDRESS); + } + + @Test + void shouldReturnEncodedVorgangUri() { + var vorgangUri = buildVorgangUri(); + + assertThat(vorgangUri).isEqualTo(VORGANG_MANAGER_DOMAIN_NAME + "%2Fvorgangs%2F" + VorgangTestFactory.ID_STR); + } + + private String buildVorgangUri() { + return provider.buildVorgangUri(VorgangTestFactory.ID_STR, VORGANG_MANAGER_SERVICE_ADDRESS); + } + } + + @Nested + class TestExtractServiceDomainName { + @ParameterizedTest + @ValueSource(strings = { + "dns:///vorgang-manager.by-kiel-dev:9090", + "dns:///vorgang-manager.by-kiel-dev", + "vorgang-manager.by-kiel-dev:9090", + "vorgang-manager.by-kiel-dev", + "dns://vorgang-manager.by-kiel-dev:9090", + "dns:/vorgang-manager.by-kiel-dev:9090", + "dns:/vorgang-manager.by-kiel-dev:", + "dns:/vorgang-manager.by-kiel-dev:1", + "abc:/vorgang-manager.by-kiel-dev:9090" }) + void shouldReturnDomainName(String serviceAddress) { + var address = provider.extractServiceDomainName(serviceAddress); + + assertThat(address).isEqualTo("vorgang-manager.by-kiel-dev"); + } + + @Test + void shouldThrowTechnicalException() { + var invalidServiceAddress = "123"; + + assertThatThrownBy(() -> provider.extractServiceDomainName(invalidServiceAddress)).isInstanceOf( + TechnicalException.class).hasMessageStartingWith("No domain name found in " + invalidServiceAddress); + } + } +} diff --git a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandlerITCase.java b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandlerITCase.java index faac634359143e548636ed8bf0503c5719555ea3..3859ca14813c564bc84d949c576561199eb5934c 100644 --- a/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandlerITCase.java +++ b/collaboration-manager-server/src/test/java/de/ozgcloud/collaboration/common/freemarker/TemplateHandlerITCase.java @@ -67,7 +67,7 @@ class TemplateHandlerITCase { void shouldReturnFilledTemplate() { var value = "http://test.url"; var content = handler.fillTemplate(CollaborationService.COLLABORATION_NACHRICHT_TEMPLATE, - Map.of(CollaborationService.KEY_TEMPLATE_URL, value)); + Map.of(CollaborationService.KEY_VORGANG_LINK, value)); assertThat(content) .contains("Hallo Fachstelle,")