Skip to content
Snippets Groups Projects
StraightPreEncryptedForwardTest.cs 3.85 KiB
using FitConnect;
using FitConnect.Encryption;
using FitConnect.Models;
using FluentAssertions;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace E2ETest;

[Order(30)]
[TestFixture]
public class StraightPreEncryptedForwardTest : EndToEndTestBase {
    private string _caseId = null!;
    private string _submissionId = null!;

    [Order(10)]
    [Test]
    public void SendingSubmission() {
        // Arrange
        var publicKey = (Sender as Sender)!.GetPublicKeyForDestinationAsync(Settings.DestinationId)
            .Result;

        var joseEncryptor = new JoseEncryptor();
        var encryptedAttachment =
            joseEncryptor.Encrypt(publicKey, File.ReadAllBytes("Test.pdf"));

        var data = JsonConvert.SerializeObject(new {
            Name = "Encrypted Test",
            Content = "A simple test to upload pre-encrypted data"
        });

        var dataHash = FitEncryption.CalculateHash(data);
        var encryptedData = joseEncryptor.Encrypt(publicKey, data);

        var attachment = new Attachment("Test.pdf", "Simple Test");
        var metadata = FitConnect.Sender.CreateMetadata(new Submission {
            Data = encryptedData,
            Attachments = new List<Attachment> { attachment },
            ServiceType = new ServiceType
                { Identifier = Settings.LeikaKey, Name = "Straight forward test" }
        }, dataHash);

        var encryptedMetadata = joseEncryptor.Encrypt(publicKey, metadata);


        // Act
        var submission = EncryptedSubmissionBuilder
            .WithDestination(Settings.DestinationId)
            .WithServiceType("Straight forward test", Settings.LeikaKey)
            .WithEncryptedMetaData(encryptedMetadata)
            .WithEncryptedData(encryptedData)
            .WithEncryptedAttachments(new Dictionary<string, string> {
                {
                    attachment.Id,
                    encryptedAttachment
                }
            })
            .Build();

        var result = Sender.SendAsync(submission).Result;
        _caseId = result.CaseId;
        _submissionId = result.SubmissionId;
    }

    [Test]
    [Order(20)]
    public void Sender_GetSubmissionState() {
        // Act
        var status = Sender.GetStatusForSubmissionAsync(_caseId, Settings.DestinationId).Result;
        // Assert
        status.Count.Should().BeGreaterThan(0);
        status.Any(s => s.EventType == EventType.Submit).Should().BeTrue();
        status.ForEach(
            s => Logger.LogInformation("Status {When} {Event}", s.EventTime, s.EventType));
    }

    [Test]
    [Order(30)]
    public void Subscriber_GetSubmissionState() {
        // Act
        var status = Subscriber.GetStatusForSubmissionAsync(_caseId, Settings.DestinationId).Result;

        // Assert
        status.Count.Should().BeGreaterThan(0);
        status.ForEach(
            s => Logger.LogInformation("Status {When} {Event}", s.EventTime, s.EventType));
    }

    [Test]
    [Order(40)]
    public void RequestSubmission() {
        var subscriberWithSubmission = Subscriber.RequestSubmissionAsync(_submissionId).Result;

        var data = subscriberWithSubmission.GetDataString();
        Logger.LogInformation("Data {Data}", data);

        data.Should()
            .Contain("A simple test to upload pre-encrypted data");

        var attachments = subscriberWithSubmission.GetAttachmentsAsync().Result;
        attachments.First().Filename.Should().Be("Test.pdf");

        subscriberWithSubmission.AcceptSubmissionAsync().Wait();
    }

    [Test]
    [Order(50)]
    public void Sender_GetSubmissionState_AfterAccepting() {
        // Act
        var status = Sender.GetStatusForSubmissionAsync(_caseId, Settings.DestinationId).Result;

        // Assert
        status.Count.Should().BeGreaterThan(0);
        status.ForEach(
            s => Logger.LogInformation("Status {When} {Event}", s.EventTime, s.EventType));
    }
}