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(); } }