From ecb90c76ad149cf6e7e7b03543207eb2b5963ee3 Mon Sep 17 00:00:00 2001 From: pmosk Date: Tue, 28 May 2024 19:03:32 +0400 Subject: [PATCH] Add InvalidFileSize failure code. Use .NET8 only --- .github/workflows/dotnet.yml | 5 +- .../Api.Abstractions.ChangeSetExecute.csproj | 10 +-- .../Api.Abstractions.EmailSend.csproj | 8 +- .../DataverseEmailCreateIn.cs | 12 --- .../DataverseEmailRecipient.cs | 4 +- .../DataverseEmailSendOut.cs | 2 +- .../IDataverseEmailSendSupplier.cs | 2 +- .../Api.Abstractions.EntityCreate.csproj | 10 +-- .../Api.Abstractions.EntityDelete.csproj | 10 +-- .../Api.Abstractions.EntityGet.csproj | 10 +-- .../Api.Abstractions.EntitySetGet.csproj | 8 +- .../Api.Abstractions.EntityUpdate.csproj | 12 +-- .../Api.Abstractions.FetchXml.csproj | 8 +- .../Api.Abstractions.Impersonate.csproj | 4 +- .../Api.Abstractions.Search.csproj | 8 +- .../Api.Abstractions.WhoAmI.csproj | 6 +- .../Api.Abstractions/Api.Abstractions.csproj | 26 +++--- .../Api.Abstractions/IDataverseApiClient.cs | 4 +- .../Api.Core.EntityKey.Test.csproj | 8 +- .../Test.Constructor.cs | 2 +- .../Api.Core.EntityKey.csproj | 4 +- .../DataverseAlternateKey.cs | 3 +- .../Api.Core.ExpandedField.csproj | 6 +- .../Api.Core.FailureCode.csproj | 4 +- .../DataverseFailureCode.cs | 2 + .../Api.Core.Transaction.csproj | 4 +- .../Api.Impersonation.Test.csproj | 8 +- .../Api.Impersonation.csproj | 4 +- src/api/Api.Test/Api.Test.csproj | 10 +-- .../ApiClientTestDataSource.cs | 5 +- .../In/In.ChangeSet.Execute.TOut.cs | 79 ++++++++++--------- .../In/In.ChangeSet.Execute.cs | 42 +++++----- .../Source.ApiClient/In/In.Email.Create.cs | 27 ++++--- .../Source.ApiClient/In/In.Email.Send.cs | 20 ++--- .../In/In.Entity.Create.TOut.cs | 28 ++++--- .../Source.ApiClient/In/In.Entity.Create.cs | 38 +++++---- .../Source.ApiClient/In/In.Entity.Delete.cs | 8 +- .../Source.ApiClient/In/In.Entity.Get.cs | 72 ++++++++--------- .../Source.ApiClient/In/In.Entity.GetSet.cs | 76 +++++++++--------- .../In/In.Entity.Update.TOut.cs | 26 +++--- .../Source.ApiClient/In/In.Entity.Update.cs | 20 ++--- .../Source.ApiClient/In/In.FetchXml.cs | 3 +- .../Api.Test/Source.ApiClient/In/In.Ping.cs | 8 +- .../Api.Test/Source.ApiClient/In/In.Search.cs | 8 +- .../Api.Test/Source.ApiClient/In/In.WhoAmI.cs | 6 +- .../Source.ApiClient/Out/Out.Failure.cs | 6 ++ .../Source.ApiClient/Out/Out.Search.cs | 12 +-- .../Out/Out.StubResponseJsonSet.cs | 24 +++--- .../Source.ChangeSet.Request.cs | 49 ++++++------ .../Source.ChangeSet.Success.cs | 6 +- .../Api.Test/Source.HttpApi/Source.Failure.cs | 14 ++++ .../Source.HttpApi/Source.Json.Request.cs | 31 ++++---- src/api/Api.Test/Stub/IStubRequestJson.cs | 4 +- .../DataverseApiClientTest.cs | 50 ++++++------ .../Test.ChangeSet.Execute.TOut.cs | 14 ++-- .../Test.ChangeSet.Execute.cs | 6 +- .../DataverseHttpApiTest.cs | 22 +++--- src/api/Api/Api.csproj | 8 +- .../Internal.HttpApi/Api/DataverseHttpApi.cs | 1 + 59 files changed, 471 insertions(+), 446 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 0fb19f6..badc895 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -15,10 +15,7 @@ jobs: - name: Setup .NET uses: actions/setup-dotnet@v3 with: - dotnet-version: | - 6.0.x - 7.0.x - 8.0.x + dotnet-version: 8.0.x # Add NuGet Sources diff --git a/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj b/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj index b45a97e..1da4dc5 100644 --- a/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj +++ b/src/api-abstractions/Api.Abstractions.ChangeSetExecute/Api.Abstractions.ChangeSetExecute.csproj @@ -1,17 +1,17 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.ChangeSetExecute - 1.2.0 + 1.3.0 - - + + - + diff --git a/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj b/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj index edb39f8..0cee3c8 100644 --- a/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj +++ b/src/api-abstractions/Api.Abstractions.EmailSend/Api.Abstractions.EmailSend.csproj @@ -1,16 +1,16 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EmailSend - 1.4.0 + 1.5.0 - + - + diff --git a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateIn.cs b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateIn.cs index 1a3181d..8925d48 100644 --- a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateIn.cs +++ b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailCreateIn.cs @@ -1,17 +1,13 @@ using System; using System.Collections.Generic; using System.Text.Json; -#if NET7_0_OR_GREATER using System.Diagnostics.CodeAnalysis; -#endif namespace GarageGroup.Infra; public sealed record class DataverseEmailCreateIn { -#if NET7_0_OR_GREATER [SetsRequiredMembers] -#endif public DataverseEmailCreateIn( string subject, string body, @@ -26,9 +22,7 @@ public DataverseEmailCreateIn( ExtensionData = extensionData; } -#if NET7_0_OR_GREATER [SetsRequiredMembers] -#endif public DataverseEmailCreateIn( string subject, string body, @@ -41,7 +35,6 @@ public DataverseEmailCreateIn( Recipients = recipients; } -#if NET7_0_OR_GREATER public DataverseEmailCreateIn( string subject, string body, @@ -51,7 +44,6 @@ public DataverseEmailCreateIn( Body = body ?? string.Empty; Sender = sender; } -#endif public string Subject { get; } @@ -59,11 +51,7 @@ public DataverseEmailCreateIn( public DataverseEmailSender Sender { get; } -#if NET7_0_OR_GREATER public required FlatArray Recipients { get; init; } -#else - public FlatArray Recipients { get; } -#endif public FlatArray> ExtensionData { get; init; } } \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailRecipient.cs b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailRecipient.cs index dd46bc4..c5e8be1 100644 --- a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailRecipient.cs +++ b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailRecipient.cs @@ -19,8 +19,8 @@ public DataverseEmailRecipient( } public string SenderRecipientEmail { get; } - + public DataverseEmailMember? EmailMember { get; } - + public DataverseEmailRecipientType EmailRecipientType { get; } } \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailSendOut.cs b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailSendOut.cs index 8b92bfc..6886a25 100644 --- a/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailSendOut.cs +++ b/src/api-abstractions/Api.Abstractions.EmailSend/DataverseEmailSendOut.cs @@ -7,6 +7,6 @@ public readonly record struct DataverseEmailSendOut public DataverseEmailSendOut(Guid emailId) => EmailId = emailId; - + public Guid EmailId { get; } } \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.EmailSend/IDataverseEmailSendSupplier.cs b/src/api-abstractions/Api.Abstractions.EmailSend/IDataverseEmailSendSupplier.cs index 343a501..a0dae76 100644 --- a/src/api-abstractions/Api.Abstractions.EmailSend/IDataverseEmailSendSupplier.cs +++ b/src/api-abstractions/Api.Abstractions.EmailSend/IDataverseEmailSendSupplier.cs @@ -8,7 +8,7 @@ public interface IDataverseEmailSendSupplier { ValueTask>> CreateEmailAsync( DataverseEmailCreateIn input, CancellationToken cancellationToken = default); - + ValueTask>> SendEmailAsync( DataverseEmailSendIn input, CancellationToken cancellationToken = default); } \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj b/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj index 7eb2187..6ecda90 100644 --- a/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityCreate/Api.Abstractions.EntityCreate.csproj @@ -1,16 +1,16 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityCreate - 3.12.0 + 3.13.0 - - - + + + diff --git a/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj b/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj index 001f842..9442564 100644 --- a/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityDelete/Api.Abstractions.EntityDelete.csproj @@ -1,16 +1,16 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityDelete - 3.4.1 + 3.4.2 - - - + + + diff --git a/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj b/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj index 351f852..ed4ab32 100644 --- a/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityGet/Api.Abstractions.EntityGet.csproj @@ -1,16 +1,16 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityGet - 3.10.0 + 3.11.0 - - - + + + diff --git a/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj b/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj index 0bb6751..0c11ae9 100644 --- a/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj +++ b/src/api-abstractions/Api.Abstractions.EntitySetGet/Api.Abstractions.EntitySetGet.csproj @@ -1,15 +1,15 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntitySetGet - 3.10.0 + 3.11.0 - - + + diff --git a/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj b/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj index d30a714..a8566e0 100644 --- a/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj +++ b/src/api-abstractions/Api.Abstractions.EntityUpdate/Api.Abstractions.EntityUpdate.csproj @@ -1,17 +1,17 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.EntityUpdate - 3.12.1 + 3.13.0 - - - - + + + + diff --git a/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj b/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj index 5ef4c10..5b47c41 100644 --- a/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj +++ b/src/api-abstractions/Api.Abstractions.FetchXml/Api.Abstractions.FetchXml.csproj @@ -1,16 +1,16 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.FetchXml - 1.3.0 + 1.4.0 - + - + diff --git a/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj b/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj index ff95897..35b171c 100644 --- a/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj +++ b/src/api-abstractions/Api.Abstractions.Impersonate/Api.Abstractions.Impersonate.csproj @@ -1,10 +1,10 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.Impersonate - 2.1.1 + 2.1.2 \ No newline at end of file diff --git a/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj b/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj index af29d1a..e24e56e 100644 --- a/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj +++ b/src/api-abstractions/Api.Abstractions.Search/Api.Abstractions.Search.csproj @@ -1,16 +1,16 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.Search - 3.10.0 + 3.11.0 - + - + diff --git a/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj b/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj index 6f79fb9..75b5b66 100644 --- a/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj +++ b/src/api-abstractions/Api.Abstractions.WhoAmI/Api.Abstractions.WhoAmI.csproj @@ -1,14 +1,14 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions.WhoAmI - 1.4.1 + 1.4.2 - + diff --git a/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj b/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj index ad75c47..5d79237 100644 --- a/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj +++ b/src/api-abstractions/Api.Abstractions/Api.Abstractions.csproj @@ -1,24 +1,24 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Abstractions - 3.14.1 + 3.15.0 - - - - - - - - - - - + + + + + + + + + + + diff --git a/src/api-abstractions/Api.Abstractions/IDataverseApiClient.cs b/src/api-abstractions/Api.Abstractions/IDataverseApiClient.cs index e55ce4b..9d0c828 100644 --- a/src/api-abstractions/Api.Abstractions/IDataverseApiClient.cs +++ b/src/api-abstractions/Api.Abstractions/IDataverseApiClient.cs @@ -4,6 +4,4 @@ public interface IDataverseApiClient : IDataverseImpersonateSupplier, IDataverseChangeSetExecuteSupplier, IDataverseEntitySetGetSupplier, IDataverseEntityGetSupplier, IDataverseEntityCreateSupplier, IDataverseEntityDeleteSupplier, IDataverseEntityUpdateSupplier, IDataverseSearchSupplier, - IDataverseWhoAmISupplier, IDataverseEmailSendSupplier, IDataverseFetchXmlSupplier, IPingSupplier -{ -} \ No newline at end of file + IDataverseWhoAmISupplier, IDataverseEmailSendSupplier, IDataverseFetchXmlSupplier, IPingSupplier; \ No newline at end of file diff --git a/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj b/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj index 765ef9a..fc6c4da 100644 --- a/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj +++ b/src/api-core/Api.Core.EntityKey.Test/Api.Core.EntityKey.Test.csproj @@ -1,7 +1,7 @@ - net6.0;net7.0;net8.0 + net8.0 false GarageGroup.Infra.Dataverse.Api.Core.EntityKey.Test GarageGroup.Infra.Dataverse.Api.Core.EntityKey.Test @@ -12,9 +12,9 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/Test.Constructor.cs b/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/Test.Constructor.cs index e9365e4..25724a3 100644 --- a/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/Test.Constructor.cs +++ b/src/api-core/Api.Core.EntityKey.Test/Test.DataverseAlternateKey/Test.Constructor.cs @@ -16,7 +16,7 @@ public void Constructor_ArgumentsAreNull_ExpectEmpty() public void Constructor_ArgumentsAreEmpty_ExpectEmpty() { var entityKey = new DataverseAlternateKey( - idArguments: new Dictionary()); + idArguments: []); Assert.Empty(entityKey.Value); } diff --git a/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj b/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj index b897cca..4054d55 100644 --- a/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj +++ b/src/api-core/Api.Core.EntityKey/Api.Core.EntityKey.csproj @@ -1,10 +1,10 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.EntityKey - 3.1.4 + 3.1.5 \ No newline at end of file diff --git a/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs b/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs index 7e7a6ea..bfcf229 100644 --- a/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs +++ b/src/api-core/Api.Core.EntityKey/DataverseAlternateKey.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace GarageGroup.Infra; @@ -15,7 +16,7 @@ public DataverseAlternateKey(string fieldName, string fieldValue) public string Value { get; } - private static string BuildValue(IReadOnlyCollection>? idArguments) + private static string BuildValue([AllowNull] IReadOnlyCollection> idArguments) { if (idArguments?.Count is not > 0) { diff --git a/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj b/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj index ab81f69..bf899fc 100644 --- a/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj +++ b/src/api-core/Api.Core.ExpandedField/Api.Core.ExpandedField.csproj @@ -1,14 +1,14 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.ExpandedField - 1.6.0 + 1.7.0 - + \ No newline at end of file diff --git a/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj b/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj index 3d5b373..18d40d4 100644 --- a/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj +++ b/src/api-core/Api.Core.FailureCode/Api.Core.FailureCode.csproj @@ -1,10 +1,10 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.FailureCode - 2.2.3 + 2.2.4 \ No newline at end of file diff --git a/src/api-core/Api.Core.FailureCode/DataverseFailureCode.cs b/src/api-core/Api.Core.FailureCode/DataverseFailureCode.cs index 48278d2..dec0ed1 100644 --- a/src/api-core/Api.Core.FailureCode/DataverseFailureCode.cs +++ b/src/api-core/Api.Core.FailureCode/DataverseFailureCode.cs @@ -23,4 +23,6 @@ public enum DataverseFailureCode InvalidPayload, RecipientEmailNotFound, + + InvalidFileSize } \ No newline at end of file diff --git a/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj b/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj index 2fc5d46..46ea1b4 100644 --- a/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj +++ b/src/api-core/Api.Core.Transaction/Api.Core.Transaction.csproj @@ -1,10 +1,10 @@ - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Core.Transaction - 1.0.1 + 1.0.2 \ No newline at end of file diff --git a/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj b/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj index 28f6f6b..0c3332c 100644 --- a/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj +++ b/src/api-impersonation/Api.Impersonation.Test/Api.Impersonation.Test.csproj @@ -1,7 +1,7 @@ - net6.0;net7.0;net8.0 + net8.0 false GarageGroup.Infra.Dataverse.Api.Impersonation.Test GarageGroup.Infra.Dataverse.Api.Impersonation.Test @@ -12,11 +12,11 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj b/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj index d8891e4..a891a93 100644 --- a/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj +++ b/src/api-impersonation/Api.Impersonation/Api.Impersonation.csproj @@ -1,10 +1,10 @@  - net6.0;net7.0;net8.0 + net8.0 GarageGroup.Infra GarageGroup.Infra.Dataverse.Api.Impersonation - 2.2.1 + 2.2.2 diff --git a/src/api/Api.Test/Api.Test.csproj b/src/api/Api.Test/Api.Test.csproj index c1ef0a5..412b18e 100644 --- a/src/api/Api.Test/Api.Test.csproj +++ b/src/api/Api.Test/Api.Test.csproj @@ -1,7 +1,7 @@ - net6.0;net7.0;net8.0 + net8.0 false GarageGroup.Infra.Dataverse.Api.Test GarageGroup.Infra.Dataverse.Api.Test @@ -13,11 +13,11 @@ - - + + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/src/api/Api.Test/Source.ApiClient/ApiClientTestDataSource.cs b/src/api/Api.Test/Source.ApiClient/ApiClientTestDataSource.cs index ba42289..ef3842d 100644 --- a/src/api/Api.Test/Source.ApiClient/ApiClientTestDataSource.cs +++ b/src/api/Api.Test/Source.ApiClient/ApiClientTestDataSource.cs @@ -11,11 +11,10 @@ private static readonly JsonSerializerOptions SerializerOptions private static readonly FlatArray DefaultSendEmailHeaders = - new DataverseHttpHeader[] - { + [ new("Accept", "application/json"), new("Prefer", "return=representation") - }; + ]; private static readonly DataverseHttpHeader PreferRepresentationHeader = diff --git a/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.TOut.cs b/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.TOut.cs index d7d0853..04d9c59 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.TOut.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.TOut.cs @@ -11,37 +11,37 @@ partial class ApiClientTestDataSource { { null, - Guid.Parse("ce1a0575-e83e-4b5f-865a-8d501df4e40c"), - Guid.Parse("d7762c7e-7774-4771-a5dc-64578840a210"), + new("ce1a0575-e83e-4b5f-865a-8d501df4e40c"), + new("d7762c7e-7774-4771-a5dc-64578840a210"), new( - requests: new IDataverseTransactableIn[] - { + requests: + [ new DataverseEntityCreateIn( entityPluralName: "SomeEntities", - selectFields: new[] { string.Empty, "field 1" }, + selectFields: [ string.Empty, "field 1" ], entityData: new()) { - ExpandFields = new DataverseExpandedField[] - { + ExpandFields = + [ new("LookupOne", new("field1.1", "field1.2")), new( fieldName: "LookupTwo", selectFields: default, - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("field2.1", default) - }) - }, + ]) + ], SuppressDuplicateDetection = false } - }), + ]), new( url: "/api/data/v9.2/$batch", - batchId: Guid.Parse("ce1a0575-e83e-4b5f-865a-8d501df4e40c"), - changeSetId: Guid.Parse("d7762c7e-7774-4771-a5dc-64578840a210"), + batchId: new("ce1a0575-e83e-4b5f-865a-8d501df4e40c"), + changeSetId: new("d7762c7e-7774-4771-a5dc-64578840a210"), headers: default, - requests: new DataverseJsonRequest[] - { + requests: + [ new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/SomeEntities?$select=field 1" + @@ -50,52 +50,59 @@ partial class ApiClientTestDataSource PreferRepresentationHeader, CreateSuppressDuplicateDetectionHeader("false")), content: new StubRequestJson().InnerToJsonContentIn()) - }) + ]) }, { - Guid.Parse("e97607f1-8716-4efc-947c-c631d81be853"), - Guid.Parse("1f23da9e-be1b-4967-9aff-f0723876d275"), - Guid.Parse("f2882787-a456-4ff5-bb13-87fdb377849f"), + new("e97607f1-8716-4efc-947c-c631d81be853"), + new("1f23da9e-be1b-4967-9aff-f0723876d275"), + new("f2882787-a456-4ff5-bb13-87fdb377849f"), new( - requests: new IDataverseTransactableIn[] - { + requests: + [ new DataverseEntityUpdateIn( entityPluralName: "Some/Entities", entityKey: new StubEntityKey("Some Key"), selectFields: default, entityData: new()) { - ExpandFields = new DataverseExpandedField[] - { + ExpandFields = + [ new("Field1", new("Lookup Field")) - }, + ], OperationType = DataverseUpdateOperationType.Upsert }, new DataverseEntityDeleteIn( entityPluralName: "SomeEntities", entityKey: new StubEntityKey("SomeKey")) - }), + ]), new( url: "/api/data/v9.2/$batch", - batchId: Guid.Parse("1f23da9e-be1b-4967-9aff-f0723876d275"), - changeSetId: Guid.Parse("f2882787-a456-4ff5-bb13-87fdb377849f"), - headers: CreateCallerIdHeader("e97607f1-8716-4efc-947c-c631d81be853").AsFlatArray(), - requests: new DataverseJsonRequest[] - { + batchId: new("1f23da9e-be1b-4967-9aff-f0723876d275"), + changeSetId: new("f2882787-a456-4ff5-bb13-87fdb377849f"), + headers: + [ + CreateCallerIdHeader("e97607f1-8716-4efc-947c-c631d81be853") + ], + requests: + [ new( verb: DataverseHttpVerb.Patch, url: "/api/data/v9.2/Some%2fEntities(Some Key)?$expand=Field1($select=Lookup Field)", - headers: new( + headers: + [ CreateCallerIdHeader("e97607f1-8716-4efc-947c-c631d81be853"), - PreferRepresentationHeader), + PreferRepresentationHeader + ], content: new StubRequestJson().InnerToJsonContentIn()), new( verb: DataverseHttpVerb.Delete, url: "/api/data/v9.2/SomeEntities(SomeKey)", - headers: new( - CreateCallerIdHeader("e97607f1-8716-4efc-947c-c631d81be853")), + headers: + [ + CreateCallerIdHeader("e97607f1-8716-4efc-947c-c631d81be853") + ], content: default) - }) + ]) } }; } \ No newline at end of file diff --git a/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.cs b/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.cs index 20ad1e7..1dc5041 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.ChangeSet.Execute.cs @@ -10,12 +10,12 @@ partial class ApiClientTestDataSource new() { { - Guid.Parse("947700e6-39fd-411a-a6f8-a39300416985"), - Guid.Parse("894354d2-9669-4b19-9998-ae704c68f2b9"), - Guid.Parse("08ad1bcd-50c1-4fb7-bbe9-ff315a5fcf8f"), + new("947700e6-39fd-411a-a6f8-a39300416985"), + new("894354d2-9669-4b19-9998-ae704c68f2b9"), + new("08ad1bcd-50c1-4fb7-bbe9-ff315a5fcf8f"), new( - requests: new IDataverseTransactableIn[] - { + requests: + [ new DataverseEntityUpdateIn( entityPluralName: "SomeEntities", entityKey: new StubEntityKey("SomeKey"), @@ -27,14 +27,14 @@ partial class ApiClientTestDataSource { SuppressDuplicateDetection = true } - }), + ]), new( url: "/api/data/v9.2/$batch", - batchId: Guid.Parse("894354d2-9669-4b19-9998-ae704c68f2b9"), - changeSetId: Guid.Parse("08ad1bcd-50c1-4fb7-bbe9-ff315a5fcf8f"), + batchId: new("894354d2-9669-4b19-9998-ae704c68f2b9"), + changeSetId: new("08ad1bcd-50c1-4fb7-bbe9-ff315a5fcf8f"), headers: CreateCallerIdHeader("947700e6-39fd-411a-a6f8-a39300416985").AsFlatArray(), - requests: new DataverseJsonRequest[] - { + requests: + [ new( verb: DataverseHttpVerb.Patch, url: "/api/data/v9.2/SomeEntities(SomeKey)", @@ -47,15 +47,15 @@ partial class ApiClientTestDataSource Id = 101, Name = "First request name" }.InnerToJsonContentIn()) - }) + ]) }, { null, - Guid.Parse("90ca0c0f-caf8-44b5-aa01-034da39d0953"), - Guid.Parse("97a5109b-347b-4ea7-bd3a-790cfed94268"), + new("90ca0c0f-caf8-44b5-aa01-034da39d0953"), + new("97a5109b-347b-4ea7-bd3a-790cfed94268"), new( - requests: new IDataverseTransactableIn[] - { + requests: + [ new DataverseEntityDeleteIn( entityPluralName: "Some/Entities", entityKey: new StubEntityKey("Some=Key")), @@ -66,14 +66,14 @@ partial class ApiClientTestDataSource Id = 17, Name = "First request name" }) - }), + ]), new( url: "/api/data/v9.2/$batch", - batchId: Guid.Parse("90ca0c0f-caf8-44b5-aa01-034da39d0953"), - changeSetId: Guid.Parse("97a5109b-347b-4ea7-bd3a-790cfed94268"), + batchId: new("90ca0c0f-caf8-44b5-aa01-034da39d0953"), + changeSetId: new("97a5109b-347b-4ea7-bd3a-790cfed94268"), headers: default, - requests: new DataverseJsonRequest[] - { + requests: + [ new( verb: DataverseHttpVerb.Delete, url: "/api/data/v9.2/Some%2fEntities(Some=Key)", @@ -88,7 +88,7 @@ partial class ApiClientTestDataSource Id = 17, Name = "First request name" }.InnerToJsonContentIn()) - }) + ]) } }; } \ No newline at end of file diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Email.Create.cs b/src/api/Api.Test/Source.ApiClient/In/In.Email.Create.cs index 2ff89fb..319aba3 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Email.Create.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Email.Create.cs @@ -20,7 +20,7 @@ public static TheoryData EmailCrea for (int i = 0; i < 20; i++) { var emailMessage = fixture.Create(); - var emails = fixture.CreateMany(3).Select(m => m.Address).ToArray(); + var emails = fixture.CreateMany(3).Select(static m => m.Address).ToArray(); var memberIds = fixture.CreateMany(3).ToArray(); data.Add( @@ -28,12 +28,14 @@ public static TheoryData EmailCrea subject: emailMessage.Subject, body: emailMessage.Body, sender: new(emails[0]), - recipients: new( + recipients: + [ new(emails[1], DataverseEmailRecipientType.ToRecipient), new(emailMember: new(memberIds[0], DataverseEmailMemberType.Account), DataverseEmailRecipientType.ToRecipient), new(emailMember: new(memberIds[1], DataverseEmailMemberType.Contact), DataverseEmailRecipientType.CcRecipient), new(emailMember: new(memberIds[2], DataverseEmailMemberType.SystemUser), DataverseEmailRecipientType.BccRecipient), - new(emails[2], DataverseEmailRecipientType.ToRecipient)), + new(emails[2], DataverseEmailRecipientType.ToRecipient) + ], extensionData: default), new( verb: DataverseHttpVerb.Post, @@ -43,7 +45,8 @@ public static TheoryData EmailCrea { Description = emailMessage.Body, Subject = emailMessage.Subject, - ActivityParties = new FlatArray( + ActivityParties = + [ new() { ParticipationTypeMask = 1, @@ -73,7 +76,8 @@ public static TheoryData EmailCrea { ParticipationTypeMask = 2, AddressUsed = emails[2] - }), + } + ], ExtensionData = [] }.InnerToJsonContentIn())); } @@ -96,6 +100,7 @@ public static TheoryData EmailCrea ParticipationTypeMask = 1 } }; + activityParties.AddRange(recipientEmails.Select(static e => new DataverseEmailActivityPartyJson() { AddressUsed = e, @@ -157,11 +162,11 @@ public static TheoryData> subject: fixture.Create().Subject, body: fixture.Create().Body, sender: new(string.Empty), - recipients: new DataverseEmailRecipient[] - { + recipients: + [ new(fixture.Create().Address, DataverseEmailRecipientType.ToRecipient), new(emailMember: new(new Fixture().Create(), DataverseEmailMemberType.Account), DataverseEmailRecipientType.ToRecipient) - }, + ], extensionData: default); var invalidSenderFailure = Failure.Create(DataverseFailureCode.Unknown, "Input sender is invalid"); @@ -181,10 +186,10 @@ public static TheoryData> subject: fixture.Create().Subject, body: fixture.Create().Body, sender: new(fixture.Create().Address), - recipients: new DataverseEmailRecipient[] - { + recipients: + [ new(string.Empty, DataverseEmailRecipientType.ToRecipient) - }, + ], extensionData: default); var invalidRecipientFailure = Failure.Create(DataverseFailureCode.Unknown, "Input recipients are invalid"); diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Email.Send.cs b/src/api/Api.Test/Source.ApiClient/In/In.Email.Send.cs index 3a1b32f..616448f 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Email.Send.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Email.Send.cs @@ -38,7 +38,7 @@ partial class ApiClientTestDataSource for (int i = 0; i < 20; i++) { var emailMessage = fixture.Create(); - var emails = fixture.CreateMany(3).Select(m => m.Address).ToArray(); + var emails = fixture.CreateMany(3).Select(static m => m.Address).ToArray(); var memberIds = fixture.CreateMany(3).ToArray(); var emailGuid = fixture.Create(); @@ -47,14 +47,14 @@ partial class ApiClientTestDataSource subject: emailMessage.Subject, body: emailMessage.Body, sender: new(emails[0]), - recipients: new DataverseEmailRecipient[] - { + recipients: + [ new(emails[1], DataverseEmailRecipientType.ToRecipient), new(emailMember: new(memberIds[0], DataverseEmailMemberType.Account), DataverseEmailRecipientType.ToRecipient), new(emailMember: new(memberIds[1], DataverseEmailMemberType.Contact), DataverseEmailRecipientType.CcRecipient), new(emailMember: new(memberIds[2], DataverseEmailMemberType.SystemUser), DataverseEmailRecipientType.BccRecipient), new(emails[2], DataverseEmailRecipientType.ToRecipient) - }), + ]), new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/emails?$select=activityid", @@ -63,8 +63,8 @@ partial class ApiClientTestDataSource { Description = emailMessage.Body, Subject = emailMessage.Subject, - ActivityParties = new DataverseEmailActivityPartyJson[] - { + ActivityParties = + [ new() { ParticipationTypeMask = 1, @@ -95,8 +95,8 @@ partial class ApiClientTestDataSource ParticipationTypeMask = 2, AddressUsed = emails[2] } - }, - ExtensionData = new() + ], + ExtensionData = [] }.InnerToJsonContentIn()), new( verb: DataverseHttpVerb.Post, @@ -119,7 +119,7 @@ partial class ApiClientTestDataSource var senderEmail = fixture.Create().Address; var recipientEmails = fixture.CreateMany(i + 1).Select(ma => ma.Address).ToArray(); var recipients = recipientEmails - .Select(email => new DataverseEmailRecipient(email, DataverseEmailRecipientType.ToRecipient)) + .Select(static email => new DataverseEmailRecipient(email, DataverseEmailRecipientType.ToRecipient)) .ToFlatArray(); List activityParties = @@ -166,7 +166,7 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Post, url: $"/api/data/v9.2/emails({createdEmailId:D})/Microsoft.Dynamics.CRM.SendEmail", - headers: FlatArray.Empty, + headers: default, content: new DataverseEmailSendJsonIn { IssueSend = true diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.TOut.cs b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.TOut.cs index e2a24ee..da92eb9 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.TOut.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.TOut.cs @@ -13,7 +13,7 @@ partial class ApiClientTestDataSource null, new( entityPluralName: "SomeEntities", - selectFields: new[] { "field1", "field2" }, + selectFields: [ "field1", "field2" ], entityData: new() { Id = 17, @@ -33,30 +33,32 @@ partial class ApiClientTestDataSource Guid.Parse("cf6678d2-2963-4f14-8dff-21c956ae9695"), new( entityPluralName: "SomeEntities", - selectFields: new[] { string.Empty, "field 1" }, + selectFields: [ string.Empty, "field 1" ], entityData: new()) { - ExpandFields = new DataverseExpandedField[] - { + ExpandFields = + [ new("LookupOne", new("field1.1", "field1.2")), new( fieldName: "LookupTwo", selectFields: default, - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("field2.1", default) - }) - }, + ]) + ], SuppressDuplicateDetection = false }, new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/SomeEntities?$select=field 1" + "&$expand=LookupOne($select=field1.1,field1.2),LookupTwo($expand=field2.1)", - headers: new( + headers: + [ CreateCallerIdHeader("cf6678d2-2963-4f14-8dff-21c956ae9695"), PreferRepresentationHeader, - CreateSuppressDuplicateDetectionHeader("false")), + CreateSuppressDuplicateDetectionHeader("false") + ], content: new StubRequestJson().InnerToJsonContentIn()) }, { @@ -71,9 +73,11 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/Some%2fEntities", - headers: new( + headers: + [ PreferRepresentationHeader, - CreateSuppressDuplicateDetectionHeader("true")), + CreateSuppressDuplicateDetectionHeader("true") + ], content: new StubRequestJson().InnerToJsonContentIn()) } }; diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.cs b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.cs index 163b56b..9e11015 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Create.cs @@ -11,14 +11,14 @@ partial class ApiClientTestDataSource { { null, - new DataverseEntityCreateIn( + new( entityPluralName: "SomeEntities", entityData: new() { Id = 17, Name = "First request name" }), - new DataverseJsonRequest( + new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/SomeEntities", headers: default, @@ -29,47 +29,51 @@ partial class ApiClientTestDataSource }.InnerToJsonContentIn()) }, { - Guid.Parse("cf6678d2-2963-4f14-8dff-21c956ae9695"), - new DataverseEntityCreateIn( + new("cf6678d2-2963-4f14-8dff-21c956ae9695"), + new( entityPluralName: "SomeEntities", selectFields: new[] { string.Empty, "field 1" }, entityData: new()) { - ExpandFields = new DataverseExpandedField[] - { + ExpandFields = + [ new("LookupOne", new("field1.1", "field1.2")), new( fieldName: "LookupTwo", selectFields: default, - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("field2.1", default) - }) - }, + ]) + ], SuppressDuplicateDetection = false }, - new DataverseJsonRequest( + new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/SomeEntities", - headers: new( + headers: + [ CreateCallerIdHeader("cf6678d2-2963-4f14-8dff-21c956ae9695"), - CreateSuppressDuplicateDetectionHeader("false")), + CreateSuppressDuplicateDetectionHeader("false") + ], content: new StubRequestJson().InnerToJsonContentIn()) }, { null, - new DataverseEntityCreateIn( + new( entityPluralName: "Some/Entities", selectFields: default, entityData: new()) { SuppressDuplicateDetection = true }, - new DataverseJsonRequest( + new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/Some%2fEntities", - headers: new( - CreateSuppressDuplicateDetectionHeader("true")), + headers: + [ + CreateSuppressDuplicateDetectionHeader("true") + ], content: new StubRequestJson().InnerToJsonContentIn()) } }; diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Delete.cs b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Delete.cs index 074e7fd..01bbec0 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Delete.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Delete.cs @@ -10,15 +10,17 @@ partial class ApiClientTestDataSource new() { { - Guid.Parse("91526fc6-1491-4ee9-8b7a-a4ed536de862"), + new("91526fc6-1491-4ee9-8b7a-a4ed536de862"), new( entityPluralName: "SomeEntities", entityKey: new StubEntityKey("SomeKey")), new( verb: DataverseHttpVerb.Delete, url: "/api/data/v9.2/SomeEntities(SomeKey)", - headers: new( - CreateCallerIdHeader("91526fc6-1491-4ee9-8b7a-a4ed536de862")), + headers: + [ + CreateCallerIdHeader("91526fc6-1491-4ee9-8b7a-a4ed536de862") + ], content: default) }, { diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Get.cs b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Get.cs index 086dc26..3f54daf 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Get.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Get.cs @@ -10,25 +10,25 @@ partial class ApiClientTestDataSource new() { { - Guid.Parse("18945ff7-9433-4e74-a403-abd6db25ef27"), + new("18945ff7-9433-4e74-a403-abd6db25ef27"), new( entityPluralName: "SomeEntities", entityKey: new StubEntityKey("SomeKey"), selectFields: new("field1", "field2"), - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("LookupOne", new("field1.1", "field1.2", string.Empty)), new(string.Empty, new("field 2.1", "field 2.2")), new("LookupThree", new("field3.1")) - }), + ]), new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/SomeEntities(SomeKey)?$select=field1,field2&" + "$expand=LookupOne($select=field1.1,field1.2),LookupThree($select=field3.1)", - headers: new[] - { + headers: + [ CreateCallerIdHeader("18945ff7-9433-4e74-a403-abd6db25ef27") - }, + ], content: default) }, { @@ -43,49 +43,49 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/SomeEntities(SomeKey)?$select=field 1", - headers: new DataverseHttpHeader[] - { + headers: + [ new("Prefer", "odata.include-annotations=display.*") - }, + ], content: default) }, { - Guid.Parse("18945ff7-9433-4e74-a403-abd6db25ef27"), + new("18945ff7-9433-4e74-a403-abd6db25ef27"), new( entityPluralName: "Some/Entities", entityKey: new StubEntityKey("Some=Key"), selectFields: default, - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new( fieldName: "SomeField", selectFields: default, - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new( fieldName: "Lookup1", selectFields: new("Field1", "Field2"), - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("Lookup3", default) - }) - }) - }) + ]) + ]) + ]) { IncludeAnnotations = "*" }, new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/Some%2fEntities(Some=Key)?$expand=SomeField($expand=Lookup1($select=Field1,Field2;$expand=Lookup3))", - headers: new[] - { + headers: + [ CreateCallerIdHeader("18945ff7-9433-4e74-a403-abd6db25ef27"), new DataverseHttpHeader("Prefer", "odata.include-annotations=*") - }, + ], content: default) }, { - Guid.Parse("18945ff7-9433-4e74-a403-abd6db25ef27"), + new("18945ff7-9433-4e74-a403-abd6db25ef27"), new( entityPluralName: "Some/Entities", entityKey: new StubEntityKey("Some=Key"), @@ -97,31 +97,31 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/Some%2fEntities(Some=Key)", - headers: new[] - { + headers: + [ CreateCallerIdHeader("18945ff7-9433-4e74-a403-abd6db25ef27"), - new DataverseHttpHeader("Prefer", "odata.include-annotations=*") - }, + new("Prefer", "odata.include-annotations=*") + ], content: default) }, { - Guid.Parse("18945ff7-9433-4e74-a403-abd6db25ef27"), + new("18945ff7-9433-4e74-a403-abd6db25ef27"), new( entityPluralName: "SomeEntities", entityKey: new StubEntityKey("SomeKey"), selectFields: new("field1", "field2"), - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("LookupOne") - }), + ]), new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/SomeEntities(SomeKey)?$select=field1,field2&$expand=LookupOne", - headers: new[] - { + headers: + [ CreateCallerIdHeader("18945ff7-9433-4e74-a403-abd6db25ef27") - }, + ], content: default) - }, + } }; } \ No newline at end of file diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Entity.GetSet.cs b/src/api/Api.Test/Source.ApiClient/In/In.Entity.GetSet.cs index b4ed192..8e50548 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Entity.GetSet.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Entity.GetSet.cs @@ -14,24 +14,24 @@ partial class ApiClientTestDataSource new( entityPluralName: "SomeEntities", selectFields: new("field1", "field2"), - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("LookupOne", new("field1.1", "field1.2")), new( fieldName: "LookupTwo", selectFields: default, - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("field2.1", default) - }) - }, + ]) + ], filter: "id eq 15", - orderBy: new DataverseOrderParameter[] - { + orderBy: + [ new("field3", DataverseOrderDirection.Descending), new("field4"), new("field5", DataverseOrderDirection.Ascending) - }, + ], top: 15), new( verb: DataverseHttpVerb.Get, @@ -55,10 +55,10 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/Some+Entities?$select=field 1&$top=1", - headers: new DataverseHttpHeader[] - { + headers: + [ new("Prefer", "odata.include-annotations=display.*") - }, + ], content: default) }, { @@ -73,10 +73,10 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/Some%2fEntities?$filter=date gt 2020-01-01", - headers: new DataverseHttpHeader[] - { + headers: + [ new("Prefer", "odata.include-annotations=*") - }, + ], content: default) }, { @@ -91,21 +91,21 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/SomeEntities?$select=FieldOne", - headers: new DataverseHttpHeader[] - { + headers: + [ new("Prefer", "odata.maxpagesize=10") - }, + ], content: default) }, { - Guid.Parse("d44c6578-1f2e-4edd-8897-77aaf8bd524a"), + new("d44c6578-1f2e-4edd-8897-77aaf8bd524a"), new( entityPluralName: "SomeEntities", selectFields: default, - expandFields: new DataverseExpandedField[] - { + expandFields: + [ new("Field1", new("Lookup Field")) - }, + ], filter: default) { MaxPageSize = -5, @@ -114,11 +114,11 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/SomeEntities?$expand=Field1($select=Lookup Field)", - headers: new[] - { + headers: + [ CreateCallerIdHeader("d44c6578-1f2e-4edd-8897-77aaf8bd524a"), new("Prefer", "odata.maxpagesize=-5,odata.include-annotations=*") - }, + ], content: default) }, { @@ -131,10 +131,10 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "http://garage.ru/api/someLink", - headers: new DataverseHttpHeader[] - { + headers: + [ new("Prefer", "odata.maxpagesize=15,odata.include-annotations=*") - }, + ], content: default) }, { @@ -146,10 +146,10 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "https://garage.ru/api/someLink", - headers: new DataverseHttpHeader[] - { + headers: + [ new("Prefer", "odata.maxpagesize=7") - }, + ], content: default) }, { @@ -161,22 +161,22 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/someLink", - headers: new DataverseHttpHeader[] - { + headers: + [ new("Prefer", "odata.include-annotations=*") - }, + ], content: default) }, { - Guid.Parse("be070c0c-3cf5-44a4-8eb2-b9b4a686024b"), + new("be070c0c-3cf5-44a4-8eb2-b9b4a686024b"), new("http://garage.ru/api/someLink"), new( verb: DataverseHttpVerb.Get, url: "http://garage.ru/api/someLink", - headers: new[] - { + headers: + [ CreateCallerIdHeader("be070c0c-3cf5-44a4-8eb2-b9b4a686024b") - }, + ], content: default) } }; diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.TOut.cs b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.TOut.cs index 9d0f067..efb1556 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.TOut.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.TOut.cs @@ -10,7 +10,7 @@ partial class ApiClientTestDataSource new() { { - Guid.Parse("9fdea890-f164-47c1-bb51-d3865229fa9b"), + new("9fdea890-f164-47c1-bb51-d3865229fa9b"), new( entityPluralName: "SomeEntities", entityKey: new StubEntityKey("SomeKey"), @@ -27,12 +27,12 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Patch, url: "/api/data/v9.2/SomeEntities(SomeKey)?$select=field1,field2", - headers: new[] - { + headers: + [ CreateCallerIdHeader("9fdea890-f164-47c1-bb51-d3865229fa9b"), PreferRepresentationHeader, CreateSuppressDuplicateDetectionHeader("true") - }, + ], content: new StubRequestJson { Id = 101, @@ -53,12 +53,12 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Patch, url: "/api/data/v9.2/SomeEntities(SomeKey)?$select=field 1", - headers: new[] - { + headers: + [ PreferRepresentationHeader, CreateSuppressDuplicateDetectionHeader("false"), new("If-Match", "*") - }, + ], content: new StubRequestJson().InnerToJsonContentIn()) }, { @@ -69,20 +69,20 @@ partial class ApiClientTestDataSource selectFields: default, entityData: new StubRequestJson()) { - ExpandFields = new DataverseExpandedField[] - { + ExpandFields = + [ new("Field1", new("Lookup Field")) - }, + ], OperationType = DataverseUpdateOperationType.Update }, new( verb: DataverseHttpVerb.Patch, url: "/api/data/v9.2/Some%2fEntities(Some Key)?$expand=Field1($select=Lookup Field)", - headers: new[] - { + headers: + [ PreferRepresentationHeader, new("If-Match", "*") - }, + ], content: new StubRequestJson().InnerToJsonContentIn()) } }; diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.cs b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.cs index a32e7ad..aff3108 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Entity.Update.cs @@ -10,7 +10,7 @@ partial class ApiClientTestDataSource new() { { - Guid.Parse("9fdea890-f164-47c1-bb51-d3865229fa9b"), + new("9fdea890-f164-47c1-bb51-d3865229fa9b"), new( entityPluralName: "SomeEntities", entityKey: new StubEntityKey("SomeKey"), @@ -26,12 +26,12 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Patch, url: "/api/data/v9.2/SomeEntities(SomeKey)", - headers: new[] - { + headers: + [ CreateCallerIdHeader("9fdea890-f164-47c1-bb51-d3865229fa9b"), CreateSuppressDuplicateDetectionHeader("true"), new("If-Match", "*") - }, + ], content: new StubRequestJson { Id = 101, @@ -52,11 +52,11 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Patch, url: "/api/data/v9.2/SomeEntities(SomeKey)", - headers: new[] - { + headers: + [ CreateSuppressDuplicateDetectionHeader("false"), new("If-Match", "*") - }, + ], content: new StubRequestJson().InnerToJsonContentIn()) }, { @@ -67,10 +67,10 @@ partial class ApiClientTestDataSource selectFields: default, entityData: new()) { - ExpandFields = new DataverseExpandedField[] - { + ExpandFields = + [ new("Field1", new("Lookup Field")) - }, + ], OperationType = DataverseUpdateOperationType.Upsert }, new( diff --git a/src/api/Api.Test/Source.ApiClient/In/In.FetchXml.cs b/src/api/Api.Test/Source.ApiClient/In/In.FetchXml.cs index 2183915..debe0ea 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.FetchXml.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.FetchXml.cs @@ -1,4 +1,3 @@ -using System; using System.Linq; using System.Net; using AutoFixture; @@ -31,7 +30,7 @@ public static TheoryData FetchXmlInpu url: $"/api/data/v9.2/{WebUtility.UrlEncode(input.EntityPluralName)}?fetchXml={input.FetchXmlQueryString}", headers: input.IncludeAnnotations switch { - not null => new DataverseHttpHeader("Prefer", $"odata.include-annotations={input.IncludeAnnotations}").AsFlatArray(), + not null => [new("Prefer", $"odata.include-annotations={input.IncludeAnnotations}")], _ => default }, content: default)); diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Ping.cs b/src/api/Api.Test/Source.ApiClient/In/In.Ping.cs index 6e57e0e..5631aa9 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Ping.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Ping.cs @@ -18,12 +18,14 @@ partial class ApiClientTestDataSource content: default) }, { - Guid.Parse("23f5ed72-b140-4022-a05f-54366719828f"), + new("23f5ed72-b140-4022-a05f-54366719828f"), new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/WhoAmI", - headers: new( - CreateCallerIdHeader("23f5ed72-b140-4022-a05f-54366719828f")), + headers: + [ + CreateCallerIdHeader("23f5ed72-b140-4022-a05f-54366719828f") + ], content: default) } }; diff --git a/src/api/Api.Test/Source.ApiClient/In/In.Search.cs b/src/api/Api.Test/Source.ApiClient/In/In.Search.cs index 8aff249..50285a5 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.Search.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.Search.cs @@ -42,7 +42,7 @@ partial class ApiClientTestDataSource }.InnerToJsonContentIn()) }, { - Guid.Parse("aa087335-0897-4d6e-82cb-0f07cb6fc2f4"), + new("aa087335-0897-4d6e-82cb-0f07cb6fc2f4"), new("Some second text") { OrderBy = new("field 1", string.Empty), @@ -52,10 +52,10 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Post, url: "/api/search/v1.0/query", - headers: new[] - { + headers: + [ CreateCallerIdHeader("aa087335-0897-4d6e-82cb-0f07cb6fc2f4") - }, + ], content: new DataverseSearchJsonIn { Search = "Some second text", diff --git a/src/api/Api.Test/Source.ApiClient/In/In.WhoAmI.cs b/src/api/Api.Test/Source.ApiClient/In/In.WhoAmI.cs index 17bafd6..d692f1f 100644 --- a/src/api/Api.Test/Source.ApiClient/In/In.WhoAmI.cs +++ b/src/api/Api.Test/Source.ApiClient/In/In.WhoAmI.cs @@ -22,10 +22,10 @@ partial class ApiClientTestDataSource new( verb: DataverseHttpVerb.Get, url: "/api/data/v9.2/WhoAmI", - headers: new[] - { + headers: + [ CreateCallerIdHeader("68731777-a43a-454c-bd93-7680a887e6eb") - }, + ], content: default) } }; diff --git a/src/api/Api.Test/Source.ApiClient/Out/Out.Failure.cs b/src/api/Api.Test/Source.ApiClient/Out/Out.Failure.cs index bf0a47d..2205be0 100644 --- a/src/api/Api.Test/Source.ApiClient/Out/Out.Failure.cs +++ b/src/api/Api.Test/Source.ApiClient/Out/Out.Failure.cs @@ -38,6 +38,12 @@ public static TheoryData> FailureOutputTestData }, { new(DataverseFailureCode.InvalidPayload, "Some invalid data") + }, + { + new(DataverseFailureCode.RecipientEmailNotFound, "Email was not found") + }, + { + new(DataverseFailureCode.InvalidFileSize, "Some invalid file size message") } }; } \ No newline at end of file diff --git a/src/api/Api.Test/Source.ApiClient/Out/Out.Search.cs b/src/api/Api.Test/Source.ApiClient/Out/Out.Search.cs index ba10f5c..4f49134 100644 --- a/src/api/Api.Test/Source.ApiClient/Out/Out.Search.cs +++ b/src/api/Api.Test/Source.ApiClient/Out/Out.Search.cs @@ -16,8 +16,8 @@ public static TheoryData SearchOutpu new() { TotalRecordCount = 11, - Value = new DataverseSearchJsonItem[] - { + Value = + [ new() { SearchScore = 151.91, @@ -29,12 +29,12 @@ public static TheoryData SearchOutpu { ObjectId = new("38927590-1799-4ded-b922-a2cf38033c38") } - } + ] }, new( totalRecordCount: 11, - value: new DataverseSearchItem[] - { + value: + [ new( searchScore: 151.91, objectId: new("870c75fa-fbaa-4678-875f-062050f3812c"), @@ -45,7 +45,7 @@ public static TheoryData SearchOutpu objectId: new("38927590-1799-4ded-b922-a2cf38033c38"), entityName: string.Empty, extensionData: default) - }) + ]) } }; } \ No newline at end of file diff --git a/src/api/Api.Test/Source.ApiClient/Out/Out.StubResponseJsonSet.cs b/src/api/Api.Test/Source.ApiClient/Out/Out.StubResponseJsonSet.cs index a6cb140..62c0d0d 100644 --- a/src/api/Api.Test/Source.ApiClient/Out/Out.StubResponseJsonSet.cs +++ b/src/api/Api.Test/Source.ApiClient/Out/Out.StubResponseJsonSet.cs @@ -15,8 +15,8 @@ public static TheoryData, Dataver { new() { - Value = new StubResponseJson[] - { + Value = + [ new() { Id = 15, @@ -27,11 +27,11 @@ public static TheoryData, Dataver Id = 101, Name = "Some second" } - } + ] }, new( - value: new StubResponseJson[] - { + value: + [ new() { Id = 15, @@ -42,7 +42,7 @@ public static TheoryData, Dataver Id = 101, Name = "Some second" } - }) + ]) }, { new() @@ -56,8 +56,8 @@ public static TheoryData, Dataver { new() { - Value = new StubResponseJson[] - { + Value = + [ new() { Id = 171, @@ -73,12 +73,12 @@ public static TheoryData, Dataver Id = -105, Name = "Third" } - }, + ], NextLink = "Some Link" }, new( - value: new StubResponseJson[] - { + value: + [ new() { Id = 171, @@ -94,7 +94,7 @@ public static TheoryData, Dataver Id = -105, Name = "Third" } - }, + ], nextLink: "Some Link") } }; diff --git a/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Request.cs b/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Request.cs index 7d65e1c..26401e2 100644 --- a/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Request.cs +++ b/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Request.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Net.Http; using Xunit; @@ -32,11 +31,11 @@ const string emptyChangeSetContent requests: default), new(HttpMethod.Post, "https://some.crm4.dynamics.com/api/$batch") { - Headers = new KeyValuePair[] - { + Headers = + [ new("Content-Type", "multipart/mixed; boundary=\"batch_7a5584dd-0b9a-4439-b4a8-594eb84378a2\""), new("Content-Length", emptyChangeSetContent.Length.ToString()) - }, + ], Content = emptyChangeSetContent } } @@ -71,33 +70,33 @@ var secondChangeSetContent url: "/api/$batch?f=1", batchId: new("3d3a0ba3-6533-495d-a1e4-bdaa14b593f4"), changeSetId: new("c57e60f8-3133-415f-8ade-93993d63b91e"), - headers: new DataverseHttpHeader[] - { + headers: + [ new("first", "one "), new("second", "two"), new("first", "three,fourth") - }, - requests: new DataverseJsonRequest[] - { + ], + requests: + [ new( verb: DataverseHttpVerb.Post, url: "/api/data/v9.2/contacts?$select=contactid", - headers: new DataverseHttpHeader[] - { + headers: + [ new("content-Type", "application/json"), new("header1", "value1") - }, + ], content: new(secondJsonContent)) - }), + ]), new(HttpMethod.Post, "https://some.crm4.dynamics.com/api/$batch?f=1") { - Headers = new KeyValuePair[] - { + Headers = + [ new("first", "one ,three,fourth"), new("second", "two"), new("Content-Type", "multipart/mixed; boundary=\"batch_3d3a0ba3-6533-495d-a1e4-bdaa14b593f4\""), new("Content-Length", secondChangeSetContent.Length.ToString()) - }, + ], Content = secondChangeSetContent }); @@ -130,8 +129,8 @@ const string thirdChangeSetContent batchId: new("0f595005-0d61-4fda-9071-321fdcdba6a2"), changeSetId: new("12b2176b-1a84-4b5e-89e9-277764ad074b"), headers: default, - requests: new DataverseJsonRequest[] - { + requests: + [ new( verb: DataverseHttpVerb.Patch, url: "api/data/v9.2/contacts", @@ -140,19 +139,19 @@ const string thirdChangeSetContent new( verb: DataverseHttpVerb.Delete, url: "/api/contacts(00d425fa-5054-4d3f-9e56-93a8a41b70f5)?v=1", - headers: new DataverseHttpHeader[] - { + headers: + [ new("first", "one") - }, + ], content: new("Some Json content")) - }), + ]), new(HttpMethod.Post, "https://some.crm4.dynamics.com/api/batch") { - Headers = new KeyValuePair[] - { + Headers = + [ new("Content-Type", "multipart/mixed; boundary=\"batch_0f595005-0d61-4fda-9071-321fdcdba6a2\""), new("Content-Length", thirdChangeSetContent.Length.ToString()) - }, + ], Content = thirdChangeSetContent }); diff --git a/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Success.cs b/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Success.cs index 9c4ac98..18d4b92 100644 --- a/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Success.cs +++ b/src/api/Api.Test/Source.HttpApi/Source.ChangeSet.Success.cs @@ -43,13 +43,13 @@ public static TheoryData ChangeSet .ToMessageContent() }, new( - responses: new DataverseJsonResponse[] - { + responses: + [ default, new(new("Second conetnt")), default, new(new("The Fourth")) - }) + ]) } }; } \ No newline at end of file diff --git a/src/api/Api.Test/Source.HttpApi/Source.Failure.cs b/src/api/Api.Test/Source.HttpApi/Source.Failure.cs index 4df14cb..9f07dcd 100644 --- a/src/api/Api.Test/Source.HttpApi/Source.Failure.cs +++ b/src/api/Api.Test/Source.HttpApi/Source.Failure.cs @@ -286,6 +286,20 @@ partial class HttpApiTestDataSource recipientEmailNotFoundFailure.ToJsonContent(), new(DataverseFailureCode.RecipientEmailNotFound, recipientEmailNotFoundFailure.Failure.Message)); + var invalidFileSizeFailure = new StubFailureJson + { + Failure = new() + { + Code = "0x80044a02", + Message = "Attachment file size is too big." + } + }; + + data.Add( + HttpStatusCode.BadRequest, + invalidFileSizeFailure.ToJsonContent(), + new(DataverseFailureCode.InvalidFileSize, "Attachment file size is too big.")); + var unknownFailure = new StubFailureJson { Failure = new() diff --git a/src/api/Api.Test/Source.HttpApi/Source.Json.Request.cs b/src/api/Api.Test/Source.HttpApi/Source.Json.Request.cs index 1a0a9a1..baeab27 100644 --- a/src/api/Api.Test/Source.HttpApi/Source.Json.Request.cs +++ b/src/api/Api.Test/Source.HttpApi/Source.Json.Request.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Net.Http; using Xunit; @@ -45,11 +44,11 @@ public static TheoryData JsonReq content: new(secondContentJson)), new(HttpMethod.Post, "http://site.com/some/data?$select=field1,field2&$filter=a eq 1") { - Headers = new KeyValuePair[] - { + Headers = + [ new("Content-Type", "application/json; charset=utf-8"), new("Content-Length", secondContentJson.Length.ToString()) - }, + ], Content = secondContentJson }); @@ -58,20 +57,20 @@ public static TheoryData JsonReq new( verb: DataverseHttpVerb.Patch, url: "some/data", - headers: new DataverseHttpHeader[] - { + headers: + [ new("first", "one "), new("second", "two"), new("first", "three,fourth") - }, + ], content: new(string.Empty)), new(HttpMethod.Patch, "https://some.crm4.dynamics.com/some/data") { - Headers = new KeyValuePair[] - { + Headers = + [ new("first", "one ,three,fourth"), new("second", "two") - }, + ], Content = default }); @@ -80,21 +79,21 @@ public static TheoryData JsonReq new( verb: DataverseHttpVerb.Delete, url: "/some/data?$select=field 1,field 2#1", - headers: new DataverseHttpHeader[] - { + headers: + [ new(" first ", "one"), new("second", string.Empty), new("third", " three ") - }, + ], content: default), new(HttpMethod.Delete, "http://some.crm4.dynamics.com/some/data?$select=field 1,field 2#1") { - Headers = new KeyValuePair[] - { + Headers = + [ new("first", "one"), new("second", string.Empty), new("third", " three ") - }, + ], Content = default }); diff --git a/src/api/Api.Test/Stub/IStubRequestJson.cs b/src/api/Api.Test/Stub/IStubRequestJson.cs index fa85e7e..ab04ccf 100644 --- a/src/api/Api.Test/Stub/IStubRequestJson.cs +++ b/src/api/Api.Test/Stub/IStubRequestJson.cs @@ -1,5 +1,3 @@ namespace GarageGroup.Infra.Dataverse.Api.Test; -internal interface IStubRequestJson -{ -} \ No newline at end of file +internal interface IStubRequestJson; \ No newline at end of file diff --git a/src/api/Api.Test/Test.DataverseApiClient/DataverseApiClientTest.cs b/src/api/Api.Test/Test.DataverseApiClient/DataverseApiClientTest.cs index bb08323..224e40c 100644 --- a/src/api/Api.Test/Test.DataverseApiClient/DataverseApiClientTest.cs +++ b/src/api/Api.Test/Test.DataverseApiClient/DataverseApiClientTest.cs @@ -25,10 +25,10 @@ private static readonly DataverseEntitySetGetIn SomeDataverseEntitySetGetInput entityPluralName: "SomeEntities", selectFields: new("Some field name"), filter: "Some filter", - orderBy: new DataverseOrderParameter[] - { + orderBy: + [ new("one", DataverseOrderDirection.Default) - }, + ], top: 5); private static readonly DataverseEntityUpdateIn SomeDataverseEntityUpdateInput @@ -85,8 +85,8 @@ private static readonly DataverseEntitySetJsonGetOut SomeRespo = new() { - Value = new StubResponseJson[] - { + Value = + [ new() { Id = 1, @@ -97,7 +97,7 @@ private static readonly DataverseEntitySetJsonGetOut SomeRespo { Id = 5 } - } + ] }; private static readonly DataverseSearchJsonOut SomeSearchJsonOut @@ -105,8 +105,8 @@ private static readonly DataverseSearchJsonOut SomeSearchJsonOut new() { TotalRecordCount = 100, - Value = new DataverseSearchJsonItem[] - { + Value = + [ new() { SearchScore = 100.71, @@ -119,7 +119,7 @@ private static readonly DataverseSearchJsonOut SomeSearchJsonOut EntityName = "Second", ObjectId = new("d922c096-7ec7-4d0a-a4a4-28b0ced5640e") } - } + ] }; private static readonly DataverseWhoAmIOutJson SomeWhoAmIOutJson @@ -144,15 +144,15 @@ private static readonly DataverseEmailCreateIn SomeEmailCreateIn subject: "subject", body: "body", sender: new("email@email.com"), - recipients: new DataverseEmailRecipient[] - { + recipients: + [ new("email2@email.com", DataverseEmailRecipientType.ToRecipient), new( emailMember: new( memberId: new("b93c4b03-6067-401d-9a01-b033827d32e9"), memberType: DataverseEmailMemberType.Account), emailRecipientType: DataverseEmailRecipientType.ToRecipient) - }, + ], extensionData: default); private static readonly DataverseEmailSendIn SomeEmailSendInWithEmailId @@ -166,8 +166,8 @@ private static readonly DataverseEmailSendIn SomeEmailSendInWithoutEmailId subject: "subject", body: "body", sender: new("email@email.com"), - recipients: new DataverseEmailRecipient[] - { + recipients: + [ new( email: "email2@email.com", emailRecipientType: DataverseEmailRecipientType.ToRecipient), @@ -176,26 +176,26 @@ private static readonly DataverseEmailSendIn SomeEmailSendInWithoutEmailId memberId: new("00d23c27-b73f-402d-9d0b-b590a513d2aa"), memberType: DataverseEmailMemberType.Account), emailRecipientType: DataverseEmailRecipientType.ToRecipient) - }); + ]); private static readonly DataverseChangeSetExecuteIn SomeChangeSetInput = new( - requests: new IDataverseTransactableIn[] - { + requests: + [ SomeDataverseEntityCreateInput, SomeDataverseEntityUpdateInput, SomeDataverseEntityDeleteInput - }); + ]); private static readonly DataverseChangeSetResponse SomeChangeSetResponse = new( - responses: new[] - { + responses: + [ SomeResponseJson.InnerToJsonResponse(), default - }); + ]); private static readonly DataverseEmailCreateJsonOut SomeEmailCreateJson = @@ -232,7 +232,7 @@ private static IGuidProvider CreateGuidProvider(params Guid[] guids) } private static Mock CreateMockJsonHttpApi( - Result> result, + in Result> result, Action? callback = null) { var mock = new Mock(); @@ -251,8 +251,8 @@ private static Mock CreateMockJsonHttpApi( } private static Mock CreateMockEmailHttpApi( - Result> creationResult, - Result> sendingResult, + in Result> creationResult, + in Result> sendingResult, Action? creationCallback = null) { var mock = new Mock(); @@ -279,7 +279,7 @@ private static Mock CreateMockEmailHttpApi( } private static Mock CreateMockChangeSetHttpApi( - Result> result) + in Result> result) { var mock = new Mock(); diff --git a/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.TOut.cs b/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.TOut.cs index aeabde3..5d03a55 100644 --- a/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.TOut.cs +++ b/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.TOut.cs @@ -54,11 +54,11 @@ public static async Task ExecuteChangeSetAsyncWithTOut_InputContainsInvalidReque var dataverseApiClient = CreateDataverseApiClient(mockHttpApi.Object, CreateGuidProvider()); var input = new DataverseChangeSetExecuteIn( - requests: new IDataverseTransactableIn[] - { + requests: + [ SomeDataverseEntityCreateInput, new StubTransactableIn() - }); + ]); var actual = await dataverseApiClient.ExecuteChangeSetAsync(input, default); Assert.True(actual.IsFailure); @@ -137,13 +137,13 @@ public static async Task ExecuteChangeSetAsyncWithTOut_ResponseIsSuccessEmpty_Ex public static async Task ExecuteChangeSetAsyncWithTOut_ResponseIsSuccess_ExpectSuccess() { var changeSetResponse = new DataverseChangeSetResponse( - responses: new[] - { + responses: + [ default, SomeResponseJson.InnerToJsonResponse(), new( content: new(string.Empty)) - }); + ]); var mockHttpApi = CreateMockChangeSetHttpApi(changeSetResponse); var dataverseApiClient = CreateDataverseApiClient(mockHttpApi.Object, CreateGuidProvider()); @@ -151,7 +151,7 @@ public static async Task ExecuteChangeSetAsyncWithTOut_ResponseIsSuccess_ExpectS var actual = await dataverseApiClient.ExecuteChangeSetAsync(SomeChangeSetInput, default); var expected = new DataverseChangeSetExecuteOut( - values: new(null, SomeResponseJson, null)); + values: [null, SomeResponseJson, null]); Assert.StrictEqual(expected, actual); } diff --git a/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.cs b/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.cs index ef50194..a65c6aa 100644 --- a/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.cs +++ b/src/api/Api.Test/Test.DataverseApiClient/Test.ChangeSet.Execute.cs @@ -54,11 +54,11 @@ public static async Task ExecuteChangeSetAsync_InputContainsInvalidRequestType_E var dataverseApiClient = CreateDataverseApiClient(mockHttpApi.Object, CreateGuidProvider()); var input = new DataverseChangeSetExecuteIn( - requests: new IDataverseTransactableIn[] - { + requests: + [ new StubTransactableIn(), SomeDataverseEntityDeleteInput - }); + ]); var actual = await dataverseApiClient.ExecuteChangeSetAsync(input, default); Assert.True(actual.IsFailure); diff --git a/src/api/Api.Test/Test.DataverseHttpApi/DataverseHttpApiTest.cs b/src/api/Api.Test/Test.DataverseHttpApi/DataverseHttpApiTest.cs index 8688319..999b712 100644 --- a/src/api/Api.Test/Test.DataverseHttpApi/DataverseHttpApiTest.cs +++ b/src/api/Api.Test/Test.DataverseHttpApi/DataverseHttpApiTest.cs @@ -17,28 +17,28 @@ private static readonly DataverseJsonRequest SomeJsonRequest new( verb: DataverseHttpVerb.Post, url: "/data?$select=field1,field2&$filter=a eq 1", - headers: new DataverseHttpHeader[] - { + headers: + [ new("first", "one "), new("second", "two") - }, + ], content: new("{\"id\": 1, \"name\": \"Some name\"}")); private static readonly DataverseChangeSetRequest SomeChangeSetRequest = new( url: "/api/data/v9.2/$batch", - batchId: Guid.Parse("ef3a07fb-4036-4f9c-b79b-441ec1a53e54"), - changeSetId: Guid.Parse("4d177bb6-49bc-41f5-b3cf-158b3848f7ca"), - headers: new DataverseHttpHeader[] - { + batchId: new("ef3a07fb-4036-4f9c-b79b-441ec1a53e54"), + changeSetId: new("4d177bb6-49bc-41f5-b3cf-158b3848f7ca"), + headers: + [ new("first", "one"), new("second", "two") - }, - requests: new[] - { + ], + requests: + [ SomeJsonRequest - }); + ]); private static async ValueTask ReadStringContentAsync(this HttpRequestMessage requestMessage) { diff --git a/src/api/Api/Api.csproj b/src/api/Api/Api.csproj index 6f2aa61..af2eb02 100644 --- a/src/api/Api/Api.csproj +++ b/src/api/Api/Api.csproj @@ -1,18 +1,18 @@  - net6.0;net7.0;net8.0 + net8.0 latest GarageGroup.Infra GarageGroup.Infra.Dataverse.Api - 3.16.1 + 3.17.0 - + - + diff --git a/src/api/Api/Internal.HttpApi/Api/DataverseHttpApi.cs b/src/api/Api/Internal.HttpApi/Api/DataverseHttpApi.cs index 2341327..6b3185b 100644 --- a/src/api/Api/Internal.HttpApi/Api/DataverseHttpApi.cs +++ b/src/api/Api/Internal.HttpApi/Api/DataverseHttpApi.cs @@ -118,6 +118,7 @@ private static DataverseFailureCode ToDataverseFailureCode(HttpStatusCode status "0x80040333" or "0x80060892" => DataverseFailureCode.DuplicateRecord, "0x80040203" or "0x80048d19" => DataverseFailureCode.InvalidPayload, "0x80040b0a" => DataverseFailureCode.RecipientEmailNotFound, + "0x80044a02" => DataverseFailureCode.InvalidFileSize, _ => DataverseFailureCode.Unknown }; }