From be86717c30b4642dacdbc7ed70c778dff5e04632 Mon Sep 17 00:00:00 2001 From: Martin Vogel <martin.vogel@sinc.de> Date: Tue, 6 Jun 2023 17:32:00 +0200 Subject: [PATCH] refactor(#1073): test no available reply channel on destination --- .../validation/DefaultValidationService.java | 11 ++-- .../DefaultValidationServiceTest.java | 55 ++++++++++++++++++- 2 files changed, 57 insertions(+), 9 deletions(-) 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 e6ec919c3..deb83638c 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 @@ -355,13 +355,10 @@ public class DefaultValidationService implements ValidationService { } // https://docs.fitko.de/fit-connect/docs/receiving/verification/#r%C3%BCckkanal - final ReplyChannel submissionReplyChannel = metadata.getReplyChannel(); - final ReplyChannel destinationReplyChannel = destination.getReplyChannels(); - - if (submissionReplyChannel != null) { - final List<Class<?>> submissionReplyChannelClass = getNonNullReplyChannelTypes(submissionReplyChannel); - final List<Class<?>> destinationReplyChannelClass = getNonNullReplyChannelTypes(destinationReplyChannel); - if (!new HashSet<>(destinationReplyChannelClass).containsAll(submissionReplyChannelClass)) { + if (metadata.getReplyChannel() != null && destination.getReplyChannels()!= null) { + final List<Class<?>> submissionReplyChannelClasses = getNonNullReplyChannelTypes(metadata.getReplyChannel()); + final List<Class<?>> destinationReplyChannelClasses = getNonNullReplyChannelTypes(destination.getReplyChannels()); + if (!new HashSet<>(destinationReplyChannelClasses).containsAll(submissionReplyChannelClasses)) { return ValidationResult.problem(new UnsupportedReplyChannel()); } } 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 8e7f0d145..73747ecb8 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 @@ -669,6 +669,58 @@ class DefaultValidationServiceTest { assertThat(validationResult.getProblems().get(0), instanceOf(UnsupportedReplyChannel.class)); } + @Test + void testDestinationWithNoReplyChannelAndSubmissionWithReplyChannel() { + + // Given + final SubmissionSchema schema = new SubmissionSchema(); + schema.setSchemaUri(URI.create("https://schema.fitko.de/fit-connect/metadata/1.0.0/metadata.schema.json")); + schema.setMimeType(MimeType.APPLICATION_JSON); + + final Hash hash = new Hash(); + hash.setContent(hashService.toHexString(hashService.createHash("someBogusContent".getBytes()))); + hash.setSignatureType(SignatureType.SHA_512); + + final Data data = new Data(); + data.setSubmissionSchema(schema); + data.setHash(hash); + + final ContentStructure contentStructure = new ContentStructure(); + contentStructure.setAttachments(Collections.emptyList()); + contentStructure.setData(data); + + final var metadata = new Metadata(); + metadata.setSchema(SchemaConfig.METADATA_V_1_0_0.toString()); + metadata.setContentStructure(contentStructure); + + final DestinationService destinationService = new DestinationService(); + destinationService.setIdentifier("urn:de:fim:leika:leistung:99400048079000"); + destinationService.setSubmissionSchemas(Set.of(schema)); + + final var destination = new Destination(); + destination.setServices(Set.of(destinationService)); + + final ServiceType submissionServiceType = new ServiceType(); + submissionServiceType.setIdentifier("urn:de:fim:leika:leistung:99400048079000"); + + final var submission = new Submission(); + submission.setEncryptedMetadata("header.encryption_key.init_vector.ciphertext.metadataAuthTag"); + submission.setServiceType(submissionServiceType); + + final var authenticationTags = new AuthenticationTags(); + authenticationTags.setMetadata("metadataAuthTag"); + + final ReplyChannel submissionReplyChannel = new ReplyChannel(); + submissionReplyChannel.setEMail(new Email("test@mail.org", false, null)); + metadata.setReplyChannel(submissionReplyChannel); + + // When + final ValidationResult validationResult = underTest.validateMetadata(metadata, submission, destination, authenticationTags); + + // Then + assertTrue(validationResult.isValid()); + } + @Test void validateMetadataWithoutSchemaAttributeButValidSchema() { @@ -1415,11 +1467,10 @@ class DefaultValidationServiceTest { final var testing = new Environment(); testing.setAllowInsecurePublicKey(allowInsecureKey); testing.setSkipSubmissionDataValidation(skipSubmissionDataValidation); - final var config = ApplicationConfig.builder() + return ApplicationConfig.builder() .environments(Map.of(envName, testing)) .activeEnvironment(envName) .build(); - return config; } } \ No newline at end of file -- GitLab