From b9513ba384e14163172257a36af9737a28487f35 Mon Sep 17 00:00:00 2001
From: Henry Borasch <Henry.Borasch@sinc.de>
Date: Thu, 2 Mar 2023 13:24:53 +0100
Subject: [PATCH] fixed tests

---
 .../fitconnect/api/config/Environment.java    |  1 +
 .../client/ClientIntegrationTest.java         | 55 ++++++++++---------
 .../fitconnect/client/SenderClientTest.java   |  6 +-
 .../factory/ApplicationConfigLoaderTest.java  |  3 +-
 .../client/factory/ClientFactoryTest.java     | 10 ++--
 .../validation/DefaultValidationService.java  |  5 ++
 .../fitconnect/core/RestEndpointBase.java     |  2 +-
 .../DefaultValidationServiceTest.java         |  2 +-
 8 files changed, 46 insertions(+), 38 deletions(-)

diff --git a/api/src/main/java/dev/fitko/fitconnect/api/config/Environment.java b/api/src/main/java/dev/fitko/fitconnect/api/config/Environment.java
index b46a55147..af6565566 100644
--- a/api/src/main/java/dev/fitko/fitconnect/api/config/Environment.java
+++ b/api/src/main/java/dev/fitko/fitconnect/api/config/Environment.java
@@ -13,4 +13,5 @@ public class Environment {
     private String submissionBaseUrl;
     private String selfServicePortalBaseUrl;
     private boolean allowInsecurePublicKey;
+    private boolean skipSubmissionDataValidation;
 }
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java b/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java
index 997a573d7..152b935b8 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/ClientIntegrationTest.java
@@ -67,12 +67,12 @@ class ClientIntegrationTest {
         void testSendAndConfirmCycle() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -89,7 +89,7 @@ class ClientIntegrationTest {
             // Then
             assertNotNull(receivedSubmission);
             assertThat(receivedSubmission.getData(), is("{ \"data\": \"Beispiel Fachdaten\" }"));
-            assertThat(receivedSubmission.getDataSchemaUri(), is(URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json")));
+            assertThat(receivedSubmission.getDataSchemaUri(), is(URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json")));
             assertThat(receivedSubmission.getDataMimeType().toString(), is("application/json"));
             assertThat(new String(receivedSubmission.getAttachments().get(0).getData()), is("Test attachment"));
         }
@@ -98,7 +98,7 @@ class ClientIntegrationTest {
         void testSendAndConfirmCycleWithEncryptedData() throws ParseException, IOException {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final UUID destinationId = UUID.fromString(System.getenv("TEST_DESTINATION_ID"));
 
@@ -189,12 +189,12 @@ class ClientIntegrationTest {
         void testAbortedSendSubmissionWithKeyValidationNotSilent() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("PROD", false);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("PROD", false, true);
 
             // When
             final var submission = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -213,7 +213,7 @@ class ClientIntegrationTest {
         void testListSubmissions() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final var senderClient = ClientFactory.senderClient(config);
             final var subscriberClient = ClientFactory.subscriberClient(config);
@@ -224,14 +224,14 @@ class ClientIntegrationTest {
 
             final var submissionOne = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten 1\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(destinationId)
                     .withServiceType(serviceName, leikaKey)
                     .build();
 
             final var submissionTwo = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten 2\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(destinationId)
                     .withServiceType(serviceName, leikaKey)
                     .build();
@@ -265,12 +265,12 @@ class ClientIntegrationTest {
         void testRejectEvent() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -296,12 +296,12 @@ class ClientIntegrationTest {
         void testAcceptEvent() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -327,11 +327,11 @@ class ClientIntegrationTest {
         void testReadEventLogFromSender() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final var submission = SubmissionBuilder.Builder()
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -358,12 +358,12 @@ class ClientIntegrationTest {
         void testReadEventLogFromSubscriber() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -395,14 +395,14 @@ class ClientIntegrationTest {
         void testReadSubmissionStatusWithAuthTagEventValidationFromSender() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final SenderClient senderClient = ClientFactory.senderClient(config);
 
             final var submission = SubmissionBuilder.Builder()
                     .withAttachment(new File("src/test/resources/attachment.txt"))
                     .withJsonData("{ \"data\": \"Beispiel Fachdaten\" }",
-                            URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json"))
+                            URI.create("https://schema.fitko.de/fim/s00000096_1.0.schema.json"))
                     .withDestination(UUID.fromString(System.getenv("TEST_DESTINATION_ID")))
                     .withServiceType("Test Service", "urn:de:fim:leika:leistung:99400048079000")
                     .build();
@@ -430,7 +430,7 @@ class ClientIntegrationTest {
         void testFindDestinationsWithRegionalKey() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final RoutingClient routingClient = ClientFactory.routingClient(config);
 
@@ -451,7 +451,7 @@ class ClientIntegrationTest {
         void testFindDestinationsWithAreaId() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final RoutingClient routingClient = ClientFactory.routingClient(config);
 
@@ -472,7 +472,7 @@ class ClientIntegrationTest {
         void testFindDestinationsWithMultipleAreaSearchCriteria() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final RoutingClient routingClient = ClientFactory.routingClient(config);
 
@@ -493,7 +493,7 @@ class ClientIntegrationTest {
         void testFindAreaWithMultipleSearchCriteria() {
 
             // Given
-            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true);
+            final ApplicationConfig config = getConfigWithCredentialsFromGitlab("TESTING", true, true);
 
             final RoutingClient routingClient = ClientFactory.routingClient(config);
 
@@ -534,7 +534,8 @@ class ClientIntegrationTest {
     }
 
 
-    private ApplicationConfig getConfigWithCredentialsFromGitlab(final String environmentName, final boolean allowInsecurePublicKey) {
+    private ApplicationConfig getConfigWithCredentialsFromGitlab(final String environmentName, final boolean allowInsecurePublicKey,
+                                                                 final boolean skipSubmissiomDataValidation) {
 
         final var sender = new SenderConfig(System.getenv("SENDER_CLIENT_ID"), System.getenv("SENDER_CLIENT_SECRET"));
 
@@ -546,7 +547,7 @@ class ClientIntegrationTest {
                 .build();
 
         final var envName = new EnvironmentName(environmentName);
-        final Environment env = getEnvironment(allowInsecurePublicKey);
+        final Environment env = getEnvironment(allowInsecurePublicKey, skipSubmissiomDataValidation);
 
         return ApplicationConfig.builder()
                 .senderConfig(sender)
@@ -556,11 +557,11 @@ class ClientIntegrationTest {
                 .build();
     }
 
-    private static Environment getEnvironment(final boolean allowInsecurePublicKey) {
+    private static Environment getEnvironment(final boolean allowInsecurePublicKey, final boolean skipSubmissiomDataValidation) {
         final String authBaseUrl = "https://auth-testing.fit-connect.fitko.dev";
         final String routingBaseUrl = "https://routing-api-testing.fit-connect.fitko.dev";
         final String selfServicePortalUrl = "https://portal.auth-testing.fit-connect.fitko.dev";
         final String submissionBaseUrl = "https://submission-api-testing.fit-connect.fitko.dev";
-        return new Environment(authBaseUrl, routingBaseUrl, submissionBaseUrl, selfServicePortalUrl, allowInsecurePublicKey);
+        return new Environment(authBaseUrl, routingBaseUrl, submissionBaseUrl, selfServicePortalUrl, allowInsecurePublicKey, skipSubmissiomDataValidation);
     }
 }
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java b/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java
index a7ef9d0a2..5122354f6 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/SenderClientTest.java
@@ -77,7 +77,7 @@ public class SenderClientTest {
         when(senderMock.sendSubmission(any())).thenReturn(expectedSubmission);
         when(senderMock.validatePublicKey(any())).thenReturn(ValidationResult.ok());
         when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey);
-        when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
+        when(senderMock.validateJsonFormat(any(), eq(URI.create("https://json.mimetype")))).thenReturn(ValidationResult.ok());
         when(senderMock.validateMetadata(any())).thenReturn(ValidationResult.ok());
 
 
@@ -182,7 +182,7 @@ public class SenderClientTest {
         when(senderMock.getDestination(any())).thenReturn(destination);
         when(senderMock.createSubmission(any())).thenReturn(announcedSubmission);
         when(senderMock.validatePublicKey(any())).thenReturn(ValidationResult.ok());
-        when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
+        when(senderMock.validateJsonFormat(any(), eq(URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json")))).thenReturn(ValidationResult.ok());
         when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey);
 
         // When
@@ -513,7 +513,7 @@ public class SenderClientTest {
         when(senderMock.getEncryptionKeyForDestination(any())).thenReturn(publicKey);
         when(senderMock.validateMetadata(any())).thenReturn(ValidationResult.ok());
         when(senderMock.validateXmlFormat(any())).thenReturn(ValidationResult.ok());
-        when(senderMock.validateJsonFormat(any(), URI.create("urn:something"))).thenReturn(ValidationResult.ok());
+        when(senderMock.validateJsonFormat(any(), eq(URI.create("https://mimetype.test.de")))).thenReturn(ValidationResult.ok());
         when(senderMock.sendSubmission(any())).thenReturn(new Submission());
 
         return destinationId;
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java b/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java
index cbba30055..9a0657dc3 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java
@@ -51,7 +51,8 @@ class ApplicationConfigLoaderTest {
                 "https://routing-api-testing.fit-connect.fitko.dev",
                 "https://submission-api-testing.fit-connect.fitko.dev",
                 "https://portal.auth-testing.fit-connect.fitko.dev",
-                true
+                true,
+                false
         );
 
         final SenderConfig senderConfig = new SenderConfig("1", "123");
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java b/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java
index 9c1c539a6..1e43e8070 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java
@@ -23,7 +23,7 @@ class ClientFactoryTest {
     void testSenderClientConstruction() {
 
         final var envName = new EnvironmentName("DEV");
-        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true));
+        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true, false));
 
         final var sender = new SenderConfig("123", "abc");
 
@@ -42,7 +42,7 @@ class ClientFactoryTest {
     void testSubscriberClientConstruction() {
 
         final var envName = new EnvironmentName("DEV");
-        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true));
+        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true, false));
 
         final var subscriber = SubscriberConfig.builder()
                 .clientSecret("123")
@@ -66,7 +66,7 @@ class ClientFactoryTest {
     void testRoutingClientConstruction() {
 
         final var envName = new EnvironmentName("DEV");
-        final var environment = new Environment("", "https://routing.fitko.fitconnect.de", "", "", true);
+        final var environment = new Environment("", "https://routing.fitko.fitconnect.de", "", "", true, false);
 
         final var senderConfig = new SenderConfig("1234", "abcd");
 
@@ -83,7 +83,7 @@ class ClientFactoryTest {
     void testSigningKeyCannotBeParsed() {
 
         final var envName = new EnvironmentName("DEV");
-        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true));
+        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true, false));
 
         final var subscriberConfig = SubscriberConfig.builder()
                 .clientSecret("123")
@@ -111,7 +111,7 @@ class ClientFactoryTest {
     void testDecryptionKeyCannotBeParsed() {
 
         final var envName = new EnvironmentName("DEV");
-        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true));
+        final var environments = Map.of(envName, new Environment("https://auth", "", "", "", true, false));
 
         final var subscriberConfigWithoutKey = SubscriberConfig.builder()
                 .clientSecret("123")
diff --git a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java
index 0ffa40b74..128de388f 100644
--- a/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java
+++ b/core/src/main/java/dev/fitko/fitconnect/core/validation/DefaultValidationService.java
@@ -153,6 +153,11 @@ public class DefaultValidationService implements ValidationService {
     @Override
     public ValidationResult validateJsonFormat(final String json, final URI schemaUri) {
 
+        if (config.getCurrentEnvironment().isSkipSubmissionDataValidation()) {
+            LOGGER.warn("Submission data validation is deactivated. This should be done only on secure test environments.");
+            return  ValidationResult.ok();
+        }
+
         String schema = schemaProvider.loadSubmissionDataSchema(schemaUri);
         try {
             return returnValidationResult(SCHEMA_FACTORY_DRAFT_2020.getSchema(schema).validate(MAPPER.readTree(json)));
diff --git a/core/src/test/java/dev/fitko/fitconnect/core/RestEndpointBase.java b/core/src/test/java/dev/fitko/fitconnect/core/RestEndpointBase.java
index 7ddaeffe0..bfac3e87b 100644
--- a/core/src/test/java/dev/fitko/fitconnect/core/RestEndpointBase.java
+++ b/core/src/test/java/dev/fitko/fitconnect/core/RestEndpointBase.java
@@ -30,7 +30,7 @@ public abstract class RestEndpointBase {
     protected ApplicationConfig getTestConfig(final String fakeBaseUrl) {
 
         final var envName = new EnvironmentName("TESTING");
-        final var environments = Map.of(envName, new Environment(fakeBaseUrl, fakeBaseUrl, fakeBaseUrl, fakeBaseUrl, false));
+        final var environments = Map.of(envName, new Environment(fakeBaseUrl, fakeBaseUrl, fakeBaseUrl, fakeBaseUrl, false, false));
 
         return ApplicationConfig.builder()
                 .environments(environments)
diff --git a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
index c61b72989..a8675a48e 100644
--- a/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
+++ b/core/src/test/java/dev/fitko/fitconnect/core/validation/DefaultValidationServiceTest.java
@@ -109,7 +109,7 @@ class DefaultValidationServiceTest {
         //Given
         final String urlDummy = "https://localhost";
         final EnvironmentName envName = new EnvironmentName("DEV");
-        final Environment env = new Environment(urlDummy, urlDummy, urlDummy, urlDummy, false);
+        final Environment env = new Environment(urlDummy, urlDummy, urlDummy, urlDummy, false, false);
 
         final var config = new ApplicationConfig();
         config.setHttpProxyHost(urlDummy);
-- 
GitLab