Skip to content
Snippets Groups Projects
Select Git revision
  • 897bc6ed36e5aacc0833c11641792eca447b7a52
  • master default protected
  • add-frequency-to-form
  • dev protected
  • ckan-2.11.0
  • add-package-custom-fields
  • fix-adding-datasets-for-users-and-editors
  • add-auth-subroute
  • 71-migrate-custom-fields-to-ckanext-scheming
  • add-author-maintainer-information
  • fix-inline-flex-btns
  • fix-known-spatial-uri-validation
  • py3
  • 47-aktuelle-resource-einer-collection-wird-nicht-mehr-gefunden
  • 10-eingabe-der-dct-accrualperiodicity-in-weboberflache
  • v1.3
  • 2.5.3
  • 2.5.2
  • 2.5.1
  • 2.5.0
  • 2.4.7
  • 2.4.6
  • 2.4.5
  • 2.4.4
  • 2.4.3
  • 2.4.2
  • 2.4.1
  • 2.4.0
  • 2.3.1
  • 2.3.0
  • 2.2.0
  • 2.1.0
  • 2.0.0
  • 1.4.3
  • 1.4.2
  • 1.4.1
36 results

validation.py

Blame
  • XtaClientRemoteITCase.java 6.97 KiB
    package de.ozgcloud.xta.client;
    
    import static de.ozgcloud.xta.client.extension.XtaServerSetupExtensionTestUtil.*;
    import static org.assertj.core.api.Assertions.*;
    
    import org.junit.jupiter.api.AfterEach;
    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.condition.EnabledIfEnvironmentVariable;
    import org.junit.jupiter.api.extension.RegisterExtension;
    import org.junit.jupiter.params.ParameterizedTest;
    import org.junit.jupiter.params.provider.ValueSource;
    
    import de.ozgcloud.xta.client.extension.XtaMessageExampleLoader;
    import de.ozgcloud.xta.client.extension.XtaRemoteServerSetupExtension;
    import de.ozgcloud.xta.client.model.XtaFile;
    import de.ozgcloud.xta.client.model.XtaMessage;
    import de.ozgcloud.xta.client.model.XtaMessageStatus;
    import de.ozgcloud.xta.client.xdomea.XdomeaXtaMessageCreatorFactory;
    import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
    import genv3.de.xoev.transport.xta.x211.MessageSchemaViolationException;
    import lombok.SneakyThrows;
    import lombok.extern.slf4j.Slf4j;
    
    @Slf4j
    @EnabledIfEnvironmentVariable(
    		named = "KOP_SH_KIEL_DEV_PATH",
    		matches = ".+",
    		disabledReason =
    				"This test requires the path KOP_SH_KIEL_{DEV,TEST}_PATH and password KOP_SH_KIEL_{DEV,TEST}_PASSWORD of KOP_SH_KIEL_DEV.p12 and OZG-CLOUD_SH_KIEL_TEST.pfx. "
    						+ "Additionally, the endpoint of the DEV-xta-server at li33-0005.dp.dsecurecloud.de must be reachable."
    )
    class XtaClientRemoteITCase {
    
    	@RegisterExtension
    	static final XtaRemoteServerSetupExtension XTA_REMOTE_SERVER_SETUP_EXTENSION = new XtaRemoteServerSetupExtension();
    
    	private XtaClient authorClient;
    	private XtaClient readerClient;
    
    	@BeforeEach
    	@SneakyThrows
    	void setup() {
    		authorClient = XTA_REMOTE_SERVER_SETUP_EXTENSION.getAuthorClient();
    		readerClient = XTA_REMOTE_SERVER_SETUP_EXTENSION.getReaderClient();
    	}
    
    	@DisplayName("get messages metadata")
    	@Nested
    	class TestGetMessagesMetadata {
    
    		@DisplayName("with no messages")
    		@Nested
    		class TestWithNoMessages {
    
    			@DisplayName("should return zero pending messages")
    			@Test
    			@SneakyThrows
    			void shouldReturnZeroPendingMessages() {
    				var result = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER1.value());
    
    				assertThat(result.pendingMessageCount()).isZero();
    			}
    		}
    
    		@DisplayName("with one message")
    		@Nested
    		class TestWithOneMessage {
    
    			@BeforeEach
    			void setup() {
    				XTA_REMOTE_SERVER_SETUP_EXTENSION.sendTestMessage();
    			}
    
    			@DisplayName("should return one pending message for client")
    			@Test
    			@SneakyThrows
    			void shouldReturnOnePendingMessageClient() {
    				var result = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER1.value());
    
    				assertThat(result.pendingMessageCount()).isOne();
    			}
    
    			@DisplayName("should return no pending message for another client")
    			@Test
    			@SneakyThrows
    			void shouldReturnNoPendingMessageForAnotherClient() {
    				var result = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER2.value());
    
    				assertThat(result.pendingMessageCount()).isZero();
    			}
    		}
    
    	}
    
    	@DisplayName("get message")
    	@Nested
    	class TestGetMessage {
    
    		private String messageId;
    		private XtaMessage message;
    
    		@BeforeEach
    		@SneakyThrows
    		void setup() {
    			var messageConfig = XtaMessageExampleLoader.MessageExampleConfig.builder()
    					.messageLabel("dfoerdermittel")
    					.reader(READER_CLIENT_IDENTIFIER1)
    					.author(AUTHOR_CLIENT_IDENTIFIER)
    					.build();
    			message = XtaMessageExampleLoader.load(messageConfig);
    			messageId = XTA_REMOTE_SERVER_SETUP_EXTENSION.sendTestMessage(message);
    		}
    
    		@DisplayName("should return message with green status")
    		@Test
    		@SneakyThrows
    		void shouldReturnMessageWithGreenStatus() {
    			var result = readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId);
    
    			assertThat(result.message().metaData().messageId()).isEqualTo(messageId);
    			assertThat(result.transportReport().metaData().messageId()).isEqualTo(messageId);
    			assertThat(result.transportReport().status()).isEqualTo(XtaMessageStatus.GREEN);
    		}
    
    		@DisplayName("should return message with correct message file content")
    		@Test
    		@SneakyThrows
    		void shouldReturnMessageWithCorrectMessageFileContent() {
    			var messageContent = extractMessageFileContent(message);
    
    			var result = readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId);
    			var resultContent = extractMessageFileContent(result.message());
    
    			assertThat(messageContent).isEqualTo(resultContent);
    		}
    
    		@DisplayName("should not show message id for a closed message in status list")
    		@Test
    		@SneakyThrows
    		void shouldNotShowMessageIdForClosedMessageInStatusList() {
    			assertThatNoException().isThrownBy(() -> readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId));
    			var metadataResult = readerClient.getMessagesMetadata(READER_CLIENT_IDENTIFIER1.value());
    			if (!metadataResult.messages().isEmpty()) {
    				assertThat(metadataResult.messages()).allMatch(metadata -> !messageId.equals(metadata.messageId()));
    			}
    		}
    
    		@DisplayName("should throw invalid message id exception for modified message id")
    		@Test
    		void shouldThrowInvalidMessageIdExceptionForModifiedMessageId() {
    			assertThatThrownBy(() -> readerClient.getMessage(READER_CLIENT_IDENTIFIER1.value(), messageId + "1"))
    					.isInstanceOf(InvalidMessageIDException.class);
    		}
    
    		@DisplayName("should throw invalid message id exception for other client")
    		@Test
    		void shouldThrowInvalidMessageIdExceptionForOtherClient() {
    			assertThatThrownBy(() -> readerClient.getMessage(READER_CLIENT_IDENTIFIER2.value(), messageId))
    					.isInstanceOf(InvalidMessageIDException.class);
    		}
    
    	}
    
    	@DisplayName("send message")
    	@Nested
    	class TestSendMessage {
    
    		@AfterEach
    		@SneakyThrows
    		void afterEach() {
    			closeAllMessages(readerClient, READER_CLIENT_IDENTIFIER1);
    		}
    
    		@DisplayName("should return transport report with open status")
    		@SneakyThrows
    		@ParameterizedTest
    		@ValueSource(strings = { "dfoerdermittel", "abgabe0401-kleiner-waffenschein" })
    		void shouldReturn(String messageLabel) {
    			XtaMessage xtaMessage = createXdomeaMessage(messageLabel);
    
    			try {
    				var result = authorClient.sendMessage(xtaMessage);
    
    				assertThat(result.status()).isEqualTo(XtaMessageStatus.OPEN);
    			} catch (MessageSchemaViolationException exception) {
    				log.error(exception.getFaultInfo().getErrorCode().toString(), exception);
    				fail(exception.getFaultInfo().getErrorCode().toString());
    			}
    
    		}
    
    		@SneakyThrows
    		private static XtaMessage createXdomeaMessage(
    				String messageLabel) {
    			var creator = XdomeaXtaMessageCreatorFactory
    					.createInstance()
    					.create();
    
    			return creator.createMessage(loadMessageFile(messageLabel));
    		}
    
    		private static XtaFile loadMessageFile(String messageLabel) {
    			var message = XtaMessageExampleLoader.load(XtaMessageExampleLoader.MessageExampleConfig.builder()
    					.messageLabel(messageLabel)
    					.author(AUTHOR_CLIENT_IDENTIFIER)
    					.reader(READER_CLIENT_IDENTIFIER1)
    					.build());
    			return message.messageFile();
    		}
    	}
    
    }