Skip to content
Snippets Groups Projects
Commit 66575ae3 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

KOP-2139 KOP-2445 checkAccountActive: Add wrapper around xta service

parent f0b3d0cd
No related branches found
No related tags found
No related merge requests found
Showing
with 175 additions and 22 deletions
...@@ -86,6 +86,11 @@ ...@@ -86,6 +86,11 @@
<version>${jsr305.version}</version> <version>${jsr305.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<!-- Test --> <!-- Test -->
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
......
...@@ -3,10 +3,11 @@ package de.ozgcloud.xta.client; ...@@ -3,10 +3,11 @@ package de.ozgcloud.xta.client;
import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.NotImplementedException;
import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.core.WrappedXtaService;
import de.ozgcloud.xta.client.exception.ClientException;
import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessage;
import de.ozgcloud.xta.client.model.XtaMessageId; import de.ozgcloud.xta.client.model.XtaMessageId;
import de.ozgcloud.xta.client.model.XtaMessageMetaDatasAndHeader; import de.ozgcloud.xta.client.model.XtaMessageMetaDatasAndHeader;
import genv3.de.xoev.transport.xta.x211.XTAService;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
...@@ -17,11 +18,12 @@ import lombok.RequiredArgsConstructor; ...@@ -17,11 +18,12 @@ import lombok.RequiredArgsConstructor;
@Getter(AccessLevel.PROTECTED) @Getter(AccessLevel.PROTECTED)
public class XtaClient { public class XtaClient {
private final XTAService service; private final WrappedXtaService service;
private final XtaClientConfig config; private final XtaClientConfig config;
public XtaMessageMetaDatasAndHeader getMessagesMetadata(String xtaIdentifier) { public XtaMessageMetaDatasAndHeader getMessagesMetadata(String xtaIdentifier) throws ClientException {
throw new NotImplementedException(""); service.checkAccountActive(xtaIdentifier);
return null;
} }
public XtaMessageMetaDatasAndHeader getNextMessagesMetadata(String xtaIdentifier, String msgBoxRequestId) { public XtaMessageMetaDatasAndHeader getNextMessagesMetadata(String xtaIdentifier, String msgBoxRequestId) {
......
...@@ -2,6 +2,7 @@ package de.ozgcloud.xta.client; ...@@ -2,6 +2,7 @@ package de.ozgcloud.xta.client;
import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.config.XtaConfigValidator; import de.ozgcloud.xta.client.config.XtaConfigValidator;
import de.ozgcloud.xta.client.core.WrappedXtaService;
import de.ozgcloud.xta.client.core.XTAServiceFactory; import de.ozgcloud.xta.client.core.XTAServiceFactory;
import de.ozgcloud.xta.client.exception.ClientInitializationException; import de.ozgcloud.xta.client.exception.ClientInitializationException;
import lombok.Builder; import lombok.Builder;
...@@ -26,7 +27,9 @@ public class XtaClientFactory { ...@@ -26,7 +27,9 @@ public class XtaClientFactory {
configValidator.validate(config); configValidator.validate(config);
return XtaClient.builder() return XtaClient.builder()
.config(config) .config(config)
.service(WrappedXtaService.builder()
.service(xtaServiceFactory.create()) .service(xtaServiceFactory.create())
.build())
.build(); .build();
} }
} }
package de.ozgcloud.xta.client.core;
import org.mapstruct.Mapper;
import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
@Mapper
public interface WebServiceTypeMapper {
PartyType mapPartyTypeFromIdentifierString(String identifier);
PartyIdentifierType mapPartyIdentifierTypeFromIdentifierString(String value);
}
package de.ozgcloud.xta.client.core;
import de.ozgcloud.xta.client.exception.ClientException;
import genv3.de.xoev.transport.xta.x211.PermissionDeniedException;
import genv3.de.xoev.transport.xta.x211.XTAService;
import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
import lombok.Builder;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Builder
@Getter
public class WrappedXtaService {
private final XTAService service;
private final WebServiceTypeMapper typeMapper;
public void checkAccountActive(String clientIdentifier) throws ClientException {
try {
service.getManagementPort().checkAccountActive(typeMapper.mapPartyTypeFromIdentifierString(clientIdentifier));
} catch (XTAWSTechnicalProblemException | PermissionDeniedException e) {
throw new ClientException("checkAccountActive call failed due to: " + e.getMessage(), e);
}
}
}
...@@ -13,7 +13,6 @@ import org.apache.cxf.interceptor.Interceptor; ...@@ -13,7 +13,6 @@ import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.message.Message; import org.apache.cxf.message.Message;
import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transport.http.HTTPConduit;
import de.ozgcloud.xta.client.XtaClient;
import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.config.XtaClientConfig;
import de.ozgcloud.xta.client.exception.ClientInitializationException; import de.ozgcloud.xta.client.exception.ClientInitializationException;
import genv3.de.xoev.transport.xta.x211.XTAService; import genv3.de.xoev.transport.xta.x211.XTAService;
...@@ -42,7 +41,7 @@ public class XTAServiceFactory { ...@@ -42,7 +41,7 @@ public class XTAServiceFactory {
public XTAService create() throws ClientInitializationException { public XTAService create() throws ClientInitializationException {
log.debug("[createXtaService] Using config: {}", config); log.debug("[createXtaService] Using config: {}", config);
var service = new XTAService(XtaClient.class.getResource("wsdl/XTA.wsdl")); var service = new XTAService();
configureServiceBindings(service); configureServiceBindings(service);
return service; return service;
} }
......
...@@ -20,7 +20,7 @@ import lombok.SneakyThrows; ...@@ -20,7 +20,7 @@ import lombok.SneakyThrows;
public class XtaClientConfigTestFactory { public class XtaClientConfigTestFactory {
static final String SELF_IDENTIFIER = "selfIdentifier"; public static final String SELF_IDENTIFIER = "selfIdentifier";
static final String SELF_IDENTIFIER2 = "selfIdentifier2"; static final String SELF_IDENTIFIER2 = "selfIdentifier2";
public static final String KEYSTORE_ALIAS = "selfSigned"; public static final String KEYSTORE_ALIAS = "selfSigned";
......
...@@ -50,7 +50,7 @@ class XtaClientFactoryTest { ...@@ -50,7 +50,7 @@ class XtaClientFactoryTest {
void shouldHaveService() { void shouldHaveService() {
var client = factory.create(); var client = factory.create();
assertThat(client.getService()).isEqualTo(service); assertThat(client.getService().getService()).isEqualTo(service);
} }
@DisplayName("should have config") @DisplayName("should have config")
......
package de.ozgcloud.xta.client; package de.ozgcloud.xta.client;
import static org.junit.jupiter.api.Assertions.*; import static de.ozgcloud.xta.client.XtaClientConfigTestFactory.*;
import static org.mockito.Mockito.*;
import org.apache.commons.lang3.NotImplementedException;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -12,15 +12,14 @@ import org.mockito.Mock; ...@@ -12,15 +12,14 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import de.ozgcloud.xta.client.config.XtaClientConfig; import de.ozgcloud.xta.client.config.XtaClientConfig;
import genv3.de.xoev.transport.xta.x211.XTAService; import de.ozgcloud.xta.client.core.WrappedXtaService;
import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType; import lombok.SneakyThrows;
import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
class XtaClientTest { class XtaClientTest {
@Mock @Mock
private XTAService service; private WrappedXtaService service;
@Mock @Mock
private XtaClientConfig config; private XtaClientConfig config;
...@@ -31,15 +30,14 @@ class XtaClientTest { ...@@ -31,15 +30,14 @@ class XtaClientTest {
@DisplayName("get messages metadata") @DisplayName("get messages metadata")
@Nested @Nested
class TestGetMessagesMetadata { class TestGetMessagesMetadata {
@DisplayName("should something")
@DisplayName("should call checkAccountActive")
@Test @Test
void shouldSomething() { @SneakyThrows
var p = new PartyType(); void shouldCallCheckAccountActive() {
var selfIdentifier = new PartyIdentifierType(); client.getMessagesMetadata(SELF_IDENTIFIER);
selfIdentifier.setValue("selfIdentifier");
p.setIdentifier(selfIdentifier);
assertThrows(NotImplementedException.class, () -> client.getMessagesMetadata("selfIdentifier")); verify(service).checkAccountActive(SELF_IDENTIFIER);
} }
} }
......
package de.ozgcloud.xta.client.core;
import static de.ozgcloud.xta.client.XtaClientConfigTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
class WebServiceTypeMapperTest {
@InjectMocks
private WebServiceTypeMapperImpl mapper;
@DisplayName("map party type from identifier string")
@Nested
class TestMapPartyTypeFromIdentifierString {
@DisplayName("should map party type from identifier string")
@Test
void shouldMapPartyTypeFromIdentifierString() {
var result = mapper.mapPartyTypeFromIdentifierString(SELF_IDENTIFIER);
assertThat(result.getIdentifier().getValue()).isEqualTo(SELF_IDENTIFIER);
}
}
}
\ No newline at end of file
package de.ozgcloud.xta.client.core;
import static de.ozgcloud.xta.client.XtaClientConfigTestFactory.*;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import de.ozgcloud.xta.client.exception.ClientException;
import genv3.de.xoev.transport.xta.x211.ManagementPortType;
import genv3.de.xoev.transport.xta.x211.XTAService;
import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
import lombok.SneakyThrows;
@ExtendWith(MockitoExtension.class)
class WrappedXtaServiceTest {
@Mock
private XTAService rawService;
@Mock
private WebServiceTypeMapper typeMapper;
@InjectMocks
private WrappedXtaService service;
@DisplayName("check account active")
@Nested
class TestCheckAccountActive {
@Mock
private PartyType partyType;
@Mock
private ManagementPortType managementPortType;
@BeforeEach
void mock() {
when(rawService.getManagementPort()).thenReturn(managementPortType);
when(typeMapper.mapPartyTypeFromIdentifierString(SELF_IDENTIFIER)).thenReturn(partyType);
}
@DisplayName("should call raw service method")
@Test
@SneakyThrows
void shouldCallRawServiceMethod() {
service.checkAccountActive(SELF_IDENTIFIER);
verify(managementPortType).checkAccountActive(partyType);
}
@DisplayName("should throw client exception on technical problem")
@Test
@SneakyThrows
void shouldThrowClientExceptionOnTechnicalProblem() {
var message = "technical problem";
doThrow(new XTAWSTechnicalProblemException(message)).when(managementPortType).checkAccountActive(partyType);
assertThatThrownBy(() -> service.checkAccountActive(SELF_IDENTIFIER))
.isInstanceOf(ClientException.class)
.hasMessageContaining(message);
}
}
}
\ 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