Skip to content
Snippets Groups Projects
MockContainer.cs 10.04 KiB
using Autofac;
using FitConnect.Encryption;
using FitConnect.Models.Api.Metadata;
using FitConnect.Services.Interfaces;
using FitConnect.Services.Models;
using FitConnect.Services.Models.v1.Submission;
using Microsoft.Extensions.Logging;
using Moq;
using Newtonsoft.Json;
using Data = FitConnect.Models.Data;
using Metadata = FitConnect.Models.Api.Metadata.Metadata;
using Route = FitConnect.Services.Models.v1.Routes.Route;

namespace MockContainer;

public record MockSettings(string PrivateKeyDecryption, string PrivateKeySigning,
    string PublicKeyEncryption, string PublicKeySignatureVerification, string SenderClientId,
    string SenderClientSecret, string SubscriberClientId, string SubscriberClientSecret,
    string DestinationId, string LeikaKey, string CallbackSecret);

public class TestFile {
    public byte[] Content;
    public string Name;

    public TestFile() {
        Content = File.ReadAllBytes("Test.pdf");
        Name = "Test.pdf";
    }
}

public static class Container {
    public static IContainer Create() {
        var builder = new ContainerBuilder();

        builder.Register(c => new TestFile()).As<TestFile>();
        builder.Register(c => CreateOAuthService().Object).As<IOAuthService>();
        builder.Register(c => CreateRouteService().Object).As<IRouteService>();
        builder.Register(c => CreateSubmissionService().Object).As<ISubmissionService>();
        builder.Register(c => CreateDestinationService().Object).As<IDestinationService>();
        builder.Register(c => Mock.Of<ICasesService>()).As<ICasesService>();
        builder.Register(c => LoggerFactory.Create(
                b => {
                    b.AddSimpleConsole();
                    b.SetMinimumLevel(LogLevel.Information);
                }).CreateLogger("FluentSenderTests")
        ).As<ILogger>();

        CreateEncryptionSettings(builder);

        return builder.Build();
    }

    private static Mock<IDestinationService> CreateDestinationService() {
        var mock = new Mock<IDestinationService>();
        mock.Setup(x => x.GetPublicKey(It.IsAny<string>())).Returns(() =>
            File.ReadAllTextAsync("./encryptionKeys/publicKey_encryption.json"));
        return mock;
    }

    private static void CreateEncryptionSettings(ContainerBuilder builder) {
        var privateKeyDecryption = File.ReadAllText("./encryptionKeys/privateKey_decryption.json");
        var privateKeySigning = File.ReadAllText("./encryptionKeys/privateKey_signing.json");
        var publicKeyEncryption = File.ReadAllText("./encryptionKeys/publicKey_encryption.json");
        var publicKeySignature =
            File.ReadAllText("./encryptionKeys/publicKey_signature_verification.json");

        var credentials =
            JsonConvert.DeserializeObject<dynamic>(
                File.ReadAllText("./encryptionKeys/credentials.json"));
        var senderClientId = (string)credentials.sender.clientId;
        var senderClientSecret = (string)credentials.sender.clientSecret;
        var subscriberClientId = (string)credentials.subscriber.clientId;
        var subscriberClientSecret = (string)credentials.subscriber.clientSecret;
        var destinationId = (string)credentials.destinationId;
        var leikaKey = (string)credentials.leikaKey;
        var callbackSecret = (string)credentials.callbackSecret;

        builder.Register(c => new MockSettings(
                privateKeyDecryption, privateKeySigning,
                publicKeyEncryption, publicKeySignature,
                senderClientId, senderClientSecret,
                subscriberClientId, subscriberClientSecret,
                destinationId, leikaKey, callbackSecret))
            .As<MockSettings>();
        builder.Register(c => new KeySet {
            PrivateKeyDecryption = privateKeyDecryption,
            PrivateKeySigning = privateKeySigning,
            PublicKeyEncryption = publicKeyEncryption,
            PublicKeySignatureVerification = publicKeySignature
        }).As<KeySet>();
    }

    private static Mock<IRouteService> CreateRouteService() {
        var routeService = new Mock<IRouteService>();
        routeService.Setup(r => r.GetDestinationIdAsync(
                It.Is<string>(s => !string.IsNullOrWhiteSpace(s)),
                It.IsAny<string>(),
                It.IsAny<string>(),
                It.IsAny<string?>()))
            .Returns(() => Task.Run(() => new List<Route>()));
        return routeService;
    }

    private static Mock<IOAuthService> CreateOAuthService() {
        var oAuthService = new Mock<IOAuthService>();
        oAuthService.SetupGet(o => o.IsAuthenticated).Returns(true);
        return oAuthService;
    }

    private static Mock<ISubmissionService> CreateSubmissionService() {
        var submissionService = new Mock<ISubmissionService>();
        submissionService.Setup(s =>
            s.ListSubmissions(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>())).Returns(
            () =>
                Task.Run(() => JsonConvert.DeserializeObject<SubmissionsForPickupDto>(
                    @"{""offset"":0,""count"":3,""totalCount"":3,""submissions"":[{""destinationId"":""879ee109-a690-4db8-ab32-424284184d7d"",""submissionId"":""ce75a6b8-d72f-4b94-b09e-af6be35bc2ae""},{""destinationId"":""19c8489b-29b8-422f-b7db-919852cfb04b"",""submissionId"":""e364430f-5a3b-4284-ba9a-f2867ba421e6""},{""destinationId"":""80a0aac3-148d-42bb-9366-516ce6355348"",""submissionId"":""530ba588-2db9-4899-ab0d-0c0b57689271""}]}"))
        );
        submissionService.Setup(s => s.CreateSubmission(It.IsAny<CreateSubmissionDto>())).Returns(
            () => new SubmissionCreatedDto {
                DestinationId = "destinationId",
                CaseId = "caseId"
            });

        submissionService.Setup(s => s.GetKey(It.IsAny<string>())).Returns(() =>
            "{\"kty\":\"RSA\",\"key_ops\":[\"wrapKey\"],\"alg\":\"RSA-OAEP-256\",\"x5c\":[\"MIIFCTCCAvECBAONrDowDQYJKoZIhvcNAQENBQAwSTELMAkGA1UEBhMCREUxFTATBgNVBAoMDFRlc3RiZWhvZXJkZTEjMCEGA1UEAwwaRklUIENvbm5lY3QgVGVzdHplcnRpZmlrYXQwHhcNMjIwNjI4MTE1MzE1WhcNMzIwNjI1MTE1MzE1WjBJMQswCQYDVQQGEwJERTEVMBMGA1UECgwMVGVzdGJlaG9lcmRlMSMwIQYDVQQDDBpGSVQgQ29ubmVjdCBUZXN0emVydGlmaWthdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM4xtyHNdvpBlol6lROwg4yAsgG9zKQ7oQkjNTUxnbsuiqhRPpniY1/ZbtTEZqrsDLtSzb9B48eJLIgdGS+mI5Z6kFTG1XaMZ46XEJxZNY/Ldf53YTmrW3QqxGV05t7/ylqWQZtSCPDsHjfX5SyoJOFTPWMqFjLiKllJzBi2j/FTbJ73K1gVUv7V7UiRuARfqScDUH6egNKza7CpvzARft7kyF3za3cm4w1rtV6yBkduWOq/JLzctMsp7vbX4S8AW6m4BvD2JLSMukx7KXY2u0AgtmnzNCDXItRo/+PGH3rC3C27/oyIyykJ94fZsSiz2FffnbEUgmU+x6RzwWfT3KorgG3wI6cECiBmFCZLdBhjoZzPpYyr6LBrIeMbAip3CWxNnayB2zNZIhlrhkPw1WkxcZDBLJaql/P7dQKknU1g94KiPtNjxnO8NSfolFkLGQ3zT0LIoSXYPyHMOiG8xgKczSMgBXkkoCTTSUqWOXlx2QeFdCKBkxxW947fMKpA8nGIhIk4JiycpV1Xf5eQ5alz+Ox3QeUSi22mSN4hhDMyvfLwZeKlpIsQwcQ8zjWuXllHJAdfr3WGLj5LCk6i5NVpYfWtm++SrDiSnGgTlxB7n1SAWcvGvhhm5INta5xgmFOY5i3DwYo9A9NzxZw+7tEZT2k3uY1gmxd6GDJkOhIXAgMBAAEwDQYJKoZIhvcNAQENBQADggIBAI2knmZldxsrJp6Lyk+eLEVbrZI3BuHdfs+9q5I8R2b/RoqEuI05ZxoFPMZGyOMUINsXpthWMGsyALs512nmzR4bD1NGu5Ada3P/UiK3zaZk+xpJ9qAJo9xATRlGkdPhW5HyztUap1M+UW0GA/fDZJLRDVAlF+8czCPahP8ZhP5pkZcPTL/xxvQwDmadmdDRAEObOQlx58SwqQYC/FnO6lEFRhY+Hak9W4E1MoegoG8KFwOvqVRiRx3IVy1vdMQZgRRLDLkZzKIlI8WwkJONObVqdSrF2HfnEk6jhsG7/4Prn16XBSRi7wdqLOnnUpxwKsvL7BZVqAPcJ821XLxZ8wmRVItMnO3qJPP6RqVj7wfB7hnUOLHDywbGGWSrk0gi3x81x3tYXf8S+AbEn59uGIiArZjKmErvgFdtCWS8ILd7EFGYaMSYCCaJxoM/N5LckxAQXmsCgiLeOxXez2+H/uTRbctc5XEgNuVt+k92bF8amaGi5gUO60v7k4hPsnSHFzIqhsfiiOE6Pewyt96teAx4Xc2vMULcc2MUOHeiqK77OzHj8jN+/nztVSnYSrbaPYhJuIXVW5UZExG8kCTSNKK3aS+4++El7sbIHsqBTKvTmQvOMaBrGbZZR5jy5RTZSPi4njBdkjzRogloZRBoOSLebbR4B+4LMeoidxoOQN6O\"],\"kid\":\"vr7cWKGl-g4Wa_CRGowNhAYW_gQb-akMbiigxN0EkDI\",\"n\":\"zjG3Ic12-kGWiXqVE7CDjICyAb3MpDuhCSM1NTGduy6KqFE-meJjX9lu1MRmquwMu1LNv0Hjx4ksiB0ZL6YjlnqQVMbVdoxnjpcQnFk1j8t1_ndhOatbdCrEZXTm3v_KWpZBm1II8OweN9flLKgk4VM9YyoWMuIqWUnMGLaP8VNsnvcrWBVS_tXtSJG4BF-pJwNQfp6A0rNrsKm_MBF-3uTIXfNrdybjDWu1XrIGR25Y6r8kvNy0yynu9tfhLwBbqbgG8PYktIy6THspdja7QCC2afM0INci1Gj_48YfesLcLbv-jIjLKQn3h9mxKLPYV9-dsRSCZT7HpHPBZ9PcqiuAbfAjpwQKIGYUJkt0GGOhnM-ljKvosGsh4xsCKncJbE2drIHbM1kiGWuGQ_DVaTFxkMEslqqX8_t1AqSdTWD3gqI-02PGc7w1J-iUWQsZDfNPQsihJdg_Icw6IbzGApzNIyAFeSSgJNNJSpY5eXHZB4V0IoGTHFb3jt8wqkDycYiEiTgmLJylXVd_l5DlqXP47HdB5RKLbaZI3iGEMzK98vBl4qWkixDBxDzONa5eWUckB1-vdYYuPksKTqLk1Wlh9a2b75KsOJKcaBOXEHufVIBZy8a-GGbkg21rnGCYU5jmLcPBij0D03PFnD7u0RlPaTe5jWCbF3oYMmQ6Ehc\",\"e\":\"AQAB\",\"use\":null}");

        submissionService
            .Setup(c => c.SubmitSubmission(It.IsAny<string>(), It.IsAny<SubmitSubmissionDto>()))
            .Returns(
                (string id, SubmitSubmissionDto dto) => {
                    Console.WriteLine(
                        $@"Submitting submission {id} with 
                            {JsonConvert.SerializeObject(dto, new JsonSerializerSettings {
                                NullValueHandling = NullValueHandling.Ignore,
                                Formatting = Formatting.Indented
                            })}");
                    return Task.Run(() => new SubmissionReducedDto());
                });
        var data = new Data();

        var metadata = new Metadata {
            PublicServiceType = new Verwaltungsleistung {
                Name = "Verwaltungsleistung"
            }
        };


        var encryptData = "";

        var encryptMetadata = "";

        submissionService.Setup(s => s.GetSubmission(It.IsAny<string>()))
            .Returns((string id) =>
                new SubmissionDto {
                    SubmissionId = id,
                    DestinationId = "destination",
                    Callback = new CallbackDto {
                        Secret = "secret",
                        Url = "http://localhost:8080/callback"
                    },
                    EncryptedData = encryptData,
                    EncryptedMetadata = encryptMetadata,
                    Attachments = new List<string>(),
                    CaseId = "caseId",
                    ServiceType = new ServiceTypeDto {
                        Description = "ServiceType",
                        Identifier = "Service identifier",
                        Name = "Dummy Service Type"
                    }
                });
        return submissionService;
    }
}