Skip to content
Snippets Groups Projects
SubscriberClientIT.java 4.83 KiB
Newer Older
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;

Henry Borasch's avatar
Henry Borasch committed
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)
Henry Borasch's avatar
Henry Borasch committed
                .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)
Henry Borasch's avatar
Henry Borasch committed
                .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)
Henry Borasch's avatar
Henry Borasch committed
                .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\" }"));
    }