From ccbb4b87952d620fa5522dd9d7a2c3b68a98d2db Mon Sep 17 00:00:00 2001
From: Klaus Fischer <klaus.fischer@eloware.com>
Date: Thu, 7 Jul 2022 17:23:50 +0200
Subject: [PATCH] Updated Mockind and FluentApi calls for ServiceType

---
 DummyClient/Program.cs                        |  2 ++
 E2ETests/SenderTest.cs                        | 21 ++++++++++---------
 FitConnect/FluentSender.cs                    | 14 ++++++++++++-
 FitConnect/Interfaces/IFluentSender.cs        |  3 +++
 .../IFluentSenderWithDestination.cs           |  6 +++++-
 FitConnect/Models/Submission.cs               |  2 +-
 FluentApiTest/FluentSenderTests.cs            |  2 ++
 MockContainer/MockContainer.cs                |  8 ++++++-
 8 files changed, 44 insertions(+), 14 deletions(-)

diff --git a/DummyClient/Program.cs b/DummyClient/Program.cs
index b4490483..78d5563c 100644
--- a/DummyClient/Program.cs
+++ b/DummyClient/Program.cs
@@ -15,12 +15,14 @@ X509Certificate2 certificate;
 void FluentSenderCall() {
     client.GetSender()
         .WithDestination("destinationId")
+        .WithServiceType("", "")
         .WithAttachments(Array.Empty<Attachment>())
         .WithData("")
         .Submit();
 
     client.GetSender()
         .WithDestination("destinationId")
+        .WithServiceType("", "")
         .WithAttachments(Array.Empty<Attachment>())
         .Submit();
 }
diff --git a/E2ETests/SenderTest.cs b/E2ETests/SenderTest.cs
index b8ef4640..2f6be876 100644
--- a/E2ETests/SenderTest.cs
+++ b/E2ETests/SenderTest.cs
@@ -81,9 +81,11 @@ public class SenderTest {
     }
 
     [Test]
-    public void WithAttachments_IntroduceSubmission_ShouldThrowArgumentException() {
+    public void WithAttachments_IntroduceSubmission_ShouldGetIdFromServer() {
         // Arrange
-        var dut = _fluentSender.WithDestination(desitnationId);
+        var dut = _fluentSender
+            .WithDestination(desitnationId)
+            .WithServiceType("ServcieName", "urn:de:fim:leika:leistung:99400048079000");
 
         var attachments = new List<Attachment>();
         for (var i = 0; i < 10; i++) {
@@ -98,16 +100,15 @@ public class SenderTest {
         }
 
         // Act
-
-        Assert.Throws<ArgumentException>(() => { dut.WithAttachments(attachments); });
+        dut.WithAttachments(attachments);
 
 
         // Assert
-        // var submission = _fluentSender.GetType().GetProperties()
-        //     .FirstOrDefault(p => p.Name == "Submission")
-        //     .GetValue(_fluentSender) as Submission;
-        // submission.Attachments.Should().HaveCount(attachments.Count);
-        //
-        // submission.Id.Should().NotBeNullOrWhiteSpace();
+        var submission = _fluentSender.GetType().GetProperties()
+            .FirstOrDefault(p => p.Name == "Submission")
+            .GetValue(_fluentSender) as Submission;
+        submission.Attachments.Should().HaveCount(attachments.Count);
+
+        submission.Id.Should().NotBeNullOrWhiteSpace();
     }
 }
diff --git a/FitConnect/FluentSender.cs b/FitConnect/FluentSender.cs
index 24c251c9..6f675193 100644
--- a/FitConnect/FluentSender.cs
+++ b/FitConnect/FluentSender.cs
@@ -25,7 +25,7 @@ namespace FitConnect;
 /// </code>
 /// </example>
 public class FluentSender : Sender, IFluentSender, IFluentSenderWithDestination,
-    IFluentSenderWithAttachments, IFluentSenderWithData {
+    IFluentSenderWithAttachments, IFluentSenderWithData, IFluentSenderWithService {
     private State _nextStep = State.Authenticate;
     private OAuthAccessToken? token;
 
@@ -61,6 +61,10 @@ public class FluentSender : Sender, IFluentSender, IFluentSenderWithDestination,
         return this;
     }
 
+    public IFluentSenderWithService WithService(string serviceName, string leikaKey) {
+        throw new NotImplementedException();
+    }
+
     public IFluentSenderWithData WithData(string data) {
         Submission.Data = Data.FromString(data);
         return this;
@@ -206,4 +210,12 @@ public class FluentSender : Sender, IFluentSender, IFluentSenderWithDestination,
         Logger?.LogInformation("Sending submission");
         return this;
     }
+
+    public IFluentSenderWithService WithServiceType(string serviceName, string leikaKey) {
+        Submission.ServiceType = new ServiceType() {
+            Name = serviceName,
+            Identifier = leikaKey
+        };
+        return this;
+    }
 }
diff --git a/FitConnect/Interfaces/IFluentSender.cs b/FitConnect/Interfaces/IFluentSender.cs
index 3becc589..41c3fa50 100644
--- a/FitConnect/Interfaces/IFluentSender.cs
+++ b/FitConnect/Interfaces/IFluentSender.cs
@@ -22,6 +22,9 @@ public interface IFluentSender {
     /// <param name="destinationId">unique identifier of the clients destination</param>
     /// <returns>the upload step for attachments</returns>
     public IFluentSenderWithDestination WithDestination(string destinationId);
+    
+    
+    public IFluentSenderWithService WithService(string serviceName, string leikaKey );
 
     public IFluentSenderWithData WithData(string data);
 
diff --git a/FitConnect/Interfaces/IFluentSenderWithDestination.cs b/FitConnect/Interfaces/IFluentSenderWithDestination.cs
index a8f85fcb..f816f2fb 100644
--- a/FitConnect/Interfaces/IFluentSenderWithDestination.cs
+++ b/FitConnect/Interfaces/IFluentSenderWithDestination.cs
@@ -2,7 +2,7 @@ using FitConnect.Models;
 
 namespace FitConnect.Interfaces;
 
-public interface IFluentSenderWithDestination {
+public interface IFluentSenderWithService {
     /// <summary>
     ///     Sends the submission with a list of attachments
     /// </summary>
@@ -12,3 +12,7 @@ public interface IFluentSenderWithDestination {
 
     public string PublicKey { get; set; }
 }
+
+public interface IFluentSenderWithDestination {
+    IFluentSenderWithService WithServiceType(string serviceName, string leikaKey);
+};
diff --git a/FitConnect/Models/Submission.cs b/FitConnect/Models/Submission.cs
index ff71dcbf..6917a36f 100644
--- a/FitConnect/Models/Submission.cs
+++ b/FitConnect/Models/Submission.cs
@@ -15,7 +15,7 @@ public class Submission {
 
     public List<Attachment> Attachments { get; set; } = new();
 
-    public ServiceType? ServiceType { get; init; }
+    public ServiceType? ServiceType { get; set; }
 
     public Callback? Callback { get; set; }
     public Metadata? Metadata { get; set; }
diff --git a/FluentApiTest/FluentSenderTests.cs b/FluentApiTest/FluentSenderTests.cs
index a98a0590..d9498bcb 100644
--- a/FluentApiTest/FluentSenderTests.cs
+++ b/FluentApiTest/FluentSenderTests.cs
@@ -34,6 +34,7 @@ public class FluentSenderTests {
     public void FluentSender_ShouldNotThrowAnError_MockingServicesWithData() {
         _client.GetSender()
             .WithDestination("destinationId")
+            .WithServiceType("","")
             .WithAttachments(Array.Empty<Attachment>())
             .WithData("")
             .Submit();
@@ -43,6 +44,7 @@ public class FluentSenderTests {
     public void FluentSender_ShouldNotThrowAnError_MockingServicesWithoutData() {
         _client.GetSender()
             .WithDestination("destinationId")
+            .WithServiceType("","")
             .WithAttachments(Array.Empty<Attachment>())
             .Submit();
     }
diff --git a/MockContainer/MockContainer.cs b/MockContainer/MockContainer.cs
index 4a4527c2..46299686 100644
--- a/MockContainer/MockContainer.cs
+++ b/MockContainer/MockContainer.cs
@@ -1,4 +1,5 @@
-using System.Security.Authentication;
+using System.Runtime.CompilerServices;
+using System.Security.Authentication;
 using Autofac;
 using FitConnect.Encryption;
 using FitConnect.Models.Api.Metadata;
@@ -96,6 +97,11 @@ public static class Container {
                 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}");
-- 
GitLab