package dev.fitko.fitconnect.integrationtests; import dev.fitko.fitconnect.api.config.ApplicationConfig; import dev.fitko.fitconnect.api.domain.model.submission.SubmissionForPickup; import dev.fitko.fitconnect.client.factory.ClientFactory; import dev.fitko.fitconnect.client.sender.model.Attachment; import dev.fitko.fitconnect.client.sender.model.SendableSubmission; import dev.fitko.fitconnect.client.subscriber.ReceivedSubmission; import dev.fitko.fitconnect.integrationtests.condition.EnableIfEnvironmentVariablesAreSet; import org.hamcrest.Matchers; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.net.URI; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertNotNull; @EnableIfEnvironmentVariablesAreSet public class SubscriberClientIT extends IntegrationTestBase { @BeforeEach public void cleanup(){ cleanupTestSubmissions(); } @Test void testListSubmissionsForDestination() { // Given final ApplicationConfig config = getConfigWithCredentialsFromEnvironment("TESTING", true); final var senderClient = ClientFactory.getSenderClient(config); final var subscriberClient = ClientFactory.getSubscriberClient(config); final UUID destinationId = UUID.fromString(System.getenv("TEST_DESTINATION_ID")); final String leikaKey = "urn:de:fim:leika:leistung:99400048079000"; final String serviceName = "Test Service"; final var submissionOne = SendableSubmission.Builder() .setDestination(destinationId) .setServiceType(leikaKey, serviceName) .setJsonData("{ \"data\": \"Beispiel Fachdaten 1\" }", URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json")) .build(); final var submissionTwo = SendableSubmission.Builder() .setDestination(destinationId) .setServiceType(leikaKey, serviceName) .setJsonData("{ \"data\": \"Beispiel Fachdaten 2\" }", URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json")) .build(); final var sentSubmissionOne = senderClient.send(submissionOne); final var sentSubmissionTwo = senderClient.send(submissionTwo); assertNotNull(sentSubmissionOne); assertNotNull(sentSubmissionTwo); // When final Set<SubmissionForPickup> submissions = subscriberClient.getAvailableSubmissionsForDestination(destinationId); // Then Assertions.assertFalse(submissions.isEmpty()); final List<UUID> submissionIds = submissions.stream().map(SubmissionForPickup::getSubmissionId).collect(Collectors.toList()); assertThat(submissionIds, Matchers.hasItems(sentSubmissionOne.getSubmissionId(), sentSubmissionTwo.getSubmissionId())); // remove by confirming subscriberClient.requestSubmission(sentSubmissionOne.getSubmissionId()).acceptSubmission(); subscriberClient.requestSubmission(sentSubmissionTwo.getSubmissionId()).acceptSubmission(); } @Test void testReceiveSingleSubmission() { // Given final ApplicationConfig config = getConfigWithCredentialsFromEnvironment("TESTING", true); final var senderClient = ClientFactory.getSenderClient(config); final var subscriberClient = ClientFactory.getSubscriberClient(config); final UUID destinationId = UUID.fromString(System.getenv("TEST_DESTINATION_ID")); final String leikaKey = "urn:de:fim:leika:leistung:99400048079000"; final String serviceName = "Test Service"; final var submission = SendableSubmission.Builder() .setDestination(destinationId) .setServiceType(leikaKey, serviceName) .setJsonData("{ \"data\": \"Beispiel Fachdaten 1\" }", URI.create("https://schema.fitko.de/fim/s00000000009_1.0.0.schema.json")) .addAttachment(Attachment.fromString("foo", "plain/text")) .build(); final var sentSubmission = senderClient.send(submission); assertNotNull(sentSubmission); // When final ReceivedSubmission receivedSubmission = subscriberClient.requestSubmission(sentSubmission.getSubmissionId()); // Then assertNotNull(receivedSubmission); assertThat(receivedSubmission.getAttachments(), hasSize(1)); assertThat(receivedSubmission.getAttachments().get(0).getDataAString(StandardCharsets.UTF_8), is("foo")); assertThat(receivedSubmission.getDataAsString(), is("{ \"data\": \"Beispiel Fachdaten 1\" }")); } }