Skip to content
Snippets Groups Projects
SecurityEventTokenTests.cs 8.56 KiB
using System;
using Autofac;
using FitConnect.Encryption;
using FitConnect.Models;
using FluentAssertions;
using MockContainer;
using Newtonsoft.Json;
using NUnit.Framework;

namespace BasicUnitTest;

[TestFixture]
public class SecurityEventTokenTests {
    [SetUp]
    public void Setup() {
        var container = Container.Create();
        new FitEncryption(container.Resolve<KeySet>(), null);
    }

    [Test]
    public void DecodeRejectSubmissionEvent() {
        const string json = @"{
  ""$schema"": ""https://schema.fitko.de/fit-connect/set-payload/1.0.0/set-payload.schema.json"",
  ""jti"": ""4ac47caa-bce1-435a-b04f-3322b224b32e"",
  ""iss"": ""40847c29-06aa-40e2-bf28-c29884c694c4"",
  ""iat"": 1622796532,
  ""sub"": ""submission:02bf1d9f-282d-4abf-810a-c4104baf0afe"",
  ""txn"": ""case:452b5ee6-35df-441a-bd39-6141723cf914"",
  ""events"": {
    ""https://schema.fitko.de/fit-connect/events/reject-submission"": {
      ""problems"": [
        {
          ""type"": ""https://schema.fitko.de/fit-connect/events/problems/authentication-tag-incorrect"",
          ""title"": ""Das Authentication Tag des Metadatensatzes ist ungültig"",
          ""detail"": ""Das Authentication Tag des Metadatensatzes stimmt nicht mit dem im Submit-Submission-Event angegebenen Wert überein."",
          ""instance"": ""metadata""
        }
      ]
    }
  }
}";

        var securityEventToken = SecurityEventToken.FromJson(json);
        securityEventToken?.EventType.Should().Be(EventType.Reject);
        securityEventToken?.Events?.RejectSubmissionEvent?.Problems![0].Type.Should()
            .Contain("authentication-tag-incorrect");
    }

    [Test]
    public void DecodeCreatedSubmissionEvent() {
        const string json = @"{
  ""$schema"": ""https://schema.fitko.de/fit-connect/set-payload/1.0.0/set-payload.schema.json"",
  ""jti"": ""ada1b5b4-1bd2-4fab-b236-c30ef88e8c72"",
  ""iss"": ""https://submission-api-dev.fit-connect.fitko.dev"",
  ""iat"": 1622796532,
  ""sub"": ""submission:02bf1d9f-282d-4abf-810a-c4104baf0afe"",
  ""txn"": ""case:452b5ee6-35df-441a-bd39-6141723cf914"",
  ""events"": {
    ""https://schema.fitko.de/fit-connect/events/create-submission"": {
    }
  }
}";

        var securityEventToken = SecurityEventToken.FromJson(json);
        securityEventToken.Events?.CreatedSubmissionEvent.Should().NotBeNull();
    }


    [Test]
    public void DecodeSubmitSubmissionEvent() {
        const string json = @"{
  ""$schema"": ""https://schema.fitko.de/fit-connect/set-payload/1.0.0/set-payload.schema.json"",
  ""jti"": ""25d2eb77-458d-4c9d-991c-6428c4651646"",
  ""iss"": ""https://submission-api-dev.fit-connect.fitko.dev"",
  ""iat"": 1622796532,
  ""sub"": ""submission:02bf1d9f-282d-4abf-810a-c4104baf0afe"",
  ""txn"": ""case:452b5ee6-35df-441a-bd39-6141723cf914"",
  ""events"": {
    ""https://schema.fitko.de/fit-connect/events/submit-submission"": {
      ""authenticationTags"": {
        ""metadata"": ""XFBoMYUZodetZdvTiFvSkQ"",
        ""data"": ""UCGiqJxhBI3IFVdPalHHvA"",
        ""attachments"": {
          ""0b799252-deb9-42b0-98d3-c50d24bbafe0"": ""rT99rwrBTbTI7IJM8fU3El"",
          ""25abf553-0e53-43b9-a14a-1581b32a9ee5"": ""i7226HEB7IchCxNuh7lCiu"",
          ""046a9fa5-bed6-494b-aab6-d41056c6db79"": ""d48LxeolRdtFF4nzQibeYO""
        }
      }
    }
  }
}";

        var securityEventToken = SecurityEventToken.FromJson(json);
        securityEventToken.EventType.Should().Be(EventType.Submit);
        securityEventToken?.Events?.SubmitSubmissionEvent?.Should().NotBeNull();
        securityEventToken?.Events?.SubmitSubmissionEvent?.AuthenticationTags?.Data.Should()
            .Be("UCGiqJxhBI3IFVdPalHHvA");
    }

    [Test]
    public void DecodeNotifySubmissionEvent() {
        const string json = @"{
  ""$schema"": ""https://schema.fitko.de/fit-connect/set-payload/1.0.0/set-payload.schema.json"",
  ""jti"": ""116c3c03-5f31-4d4c-9e65-d36e1e3895f7"",
  ""iss"": ""https://submission-api-dev.fit-connect.fitko.dev"",
  ""iat"": 1622796532,
  ""sub"": ""submission:02bf1d9f-282d-4abf-810a-c4104baf0afe"",
  ""txn"": ""case:452b5ee6-35df-441a-bd39-6141723cf914"",
  ""events"": {
    ""https://schema.fitko.de/fit-connect/events/notify-submission"": {
      ""notifyType"": ""callback""
    }
  }
}";

        var securityEventToken = SecurityEventToken.FromJson(json);
        securityEventToken.Events?.NotifySubmissionEvent?.NotifyType.Should().Be("callback");
    }

    [Test]
    public void DecodeDeleteSubmissionEvent() {
        const string json = @"{
  ""$schema"": ""https://schema.fitko.de/fit-connect/set-payload/1.0.0/set-payload.schema.json"",
  ""jti"": ""29d091aa-86ab-4806-beb5-fb462d18e2a1"",
  ""iss"": ""https://submission-api-dev.fit-connect.fitko.dev"",
  ""iat"": 1622796532,
  ""sub"": ""submission:02bf1d9f-282d-4abf-810a-c4104baf0afe"",
  ""txn"": ""case:452b5ee6-35df-441a-bd39-6141723cf914"",
  ""events"": {
    ""https://schema.fitko.de/fit-connect/events/delete-submission"": {
    }
  }
}";
        var securityEventToken = SecurityEventToken.FromJson(json);
        securityEventToken.Events?.DeleteSubmissionEvent.Should().NotBeNull();
    }

    [Test]
    public void DecodeAcceptSubmissionEvent() {
        const string json = @"{
  ""$schema"": ""https://schema.fitko.de/fit-connect/set-payload/1.0.0/set-payload.schema.json"",
  ""jti"": ""8538165b-9ce3-4097-871d-5b9581a3b4d9"",
  ""iss"": ""40847c29-06aa-40e2-bf28-c29884c694c4"",
  ""iat"": 1622796532,
  ""sub"": ""submission:F65FEAB2-4883-4DFF-85FB-169448545D9F"",
  ""txn"": ""case:F73D30C6-8894-4444-8687-00AE756FEA90"",
  ""events"": {
    ""https://schema.fitko.de/fit-connect/events/accept-submission"": {
      ""authenticationTags"": {
        ""metadata"": ""XFBoMYUZodetZdvTiFvSkQ"",
        ""data"": ""UCGiqJxhBI3IFVdPalHHvA"",
        ""attachments"": {
          ""0b799252-deb9-42b0-98d3-c50d24bbafe0"": ""rT99rwrBTbTI7IJM8fU3El"",
          ""25abf553-0e53-43b9-a14a-1581b32a9ee5"": ""i7226HEB7IchCxNuh7lCiu"",
          ""046a9fa5-bed6-494b-aab6-d41056c6db79"": ""d48LxeolRdtFF4nzQibeYO""
        }
      }
    }
  }
}";
        var securityEventToken = SecurityEventToken.FromJson(json);
        securityEventToken.Events?.AcceptSubmissionEvent.Should().NotBeNull();
        securityEventToken.Events?.AcceptSubmissionEvent?.Problems.Should().BeNullOrEmpty();
        securityEventToken.Events?.AcceptSubmissionEvent?.AuthenticationTags
            ?.Attachments![Guid.Parse("0b799252-deb9-42b0-98d3-c50d24bbafe0")].Should()
            .Be("rT99rwrBTbTI7IJM8fU3El");
    }

    [Test]
    public void DecodeAcceptSubmissionWithProblemsEvent() {
        const string json = @"{
  ""$schema"": ""https://schema.fitko.de/fit-connect/set-payload/1.0.0/set-payload.schema.json"",
  ""jti"": ""6872b19f-5ee2-47d7-a0e9-ebfe87ab2563"",
  ""iss"": ""40847c29-06aa-40e2-bf28-c29884c694c4"",
  ""iat"": 1622796532,
  ""sub"": ""submission:F65FEAB2-4883-4DFF-85FB-169448545D9F"",
  ""txn"": ""case:F73D30C6-8894-4444-8687-00AE756FEA90"",
  ""events"": {
    ""https://schema.fitko.de/fit-connect/events/accept-submission"": {
      ""problems"": [
        {
          ""type"": ""https://schema.fitko.de/fit-connect/events/problems/schema-missing"",
          ""title"": ""Schemareferenz fehlt im Metadatensatz"",
          ""detail"": ""Die Referenz auf das Metadatenschema ('$schema') fehlt im Metadatensatz."",
          ""instance"": ""metadata""
        }
      ],
      ""authenticationTags"": {
        ""metadata"": ""XFBoMYUZodetZdvTiFvSkQ"",
        ""data"": ""UCGiqJxhBI3IFVdPalHHvA"",
        ""attachments"": {
          ""0b799252-deb9-42b0-98d3-c50d24bbafe0"": ""rT99rwrBTbTI7IJM8fU3El"",
          ""25abf553-0e53-43b9-a14a-1581b32a9ee5"": ""i7226HEB7IchCxNuh7lCiu"",
          ""046a9fa5-bed6-494b-aab6-d41056c6db79"": ""d48LxeolRdtFF4nzQibeYO""
        }
      }
    }
  }
}";
        var securityEventToken = SecurityEventToken.FromJson(json);
        securityEventToken.Events?.AcceptSubmissionEvent?.Should().NotBeNull();
        securityEventToken.Events?.AcceptSubmissionEvent?.AuthenticationTags
            ?.Attachments?[Guid.Parse("0b799252-deb9-42b0-98d3-c50d24bbafe0")].Should()
            .Be("rT99rwrBTbTI7IJM8fU3El");

        securityEventToken.Events?.AcceptSubmissionEvent?.Problems?.Count.Should().Be(1);
        securityEventToken.Events?.AcceptSubmissionEvent?.Problems?[0].Type.Should()
            .Be("https://schema.fitko.de/fit-connect/events/problems/schema-missing");

        securityEventToken.EventTime.Should().BeCloseTo(new DateTime(2021, 06, 04, 08, 48, 52),
            TimeSpan.FromMinutes(3));
        var jsonResult = JsonConvert.SerializeObject(securityEventToken);
        jsonResult.Should().NotBeNullOrWhiteSpace();
    }
}