-
Klaus Fischer authoredKlaus Fischer authored
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();
}
}