diff --git a/src/Daktela.HttpClient/Api/CustomFields/ICustomFields.cs b/src/Daktela.HttpClient/Api/CustomFields/ICustomFields.cs index 82df077..1728032 100644 --- a/src/Daktela.HttpClient/Api/CustomFields/ICustomFields.cs +++ b/src/Daktela.HttpClient/Api/CustomFields/ICustomFields.cs @@ -2,6 +2,4 @@ namespace Daktela.HttpClient.Api.CustomFields; -public interface ICustomFields : IReadOnlyDictionary> -{ -} +public interface ICustomFields : IReadOnlyDictionary>; diff --git a/src/Daktela.HttpClient/Api/Requests/FilterGroup.cs b/src/Daktela.HttpClient/Api/Requests/FilterGroup.cs index 94627e0..95ce74d 100644 --- a/src/Daktela.HttpClient/Api/Requests/FilterGroup.cs +++ b/src/Daktela.HttpClient/Api/Requests/FilterGroup.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Text.Json.Serialization; namespace Daktela.HttpClient.Api.Requests; diff --git a/src/Daktela.HttpClient/Api/Requests/IFilter.cs b/src/Daktela.HttpClient/Api/Requests/IFilter.cs index f54ea9b..6c1a05c 100644 --- a/src/Daktela.HttpClient/Api/Requests/IFilter.cs +++ b/src/Daktela.HttpClient/Api/Requests/IFilter.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Api.Requests; /// /// A marking interface, a library user is not supposed to implement it by themself /// -public interface IFilter -{ -} +public interface IFilter; diff --git a/src/Daktela.HttpClient/Api/Responses/Errors/IErrorForm.cs b/src/Daktela.HttpClient/Api/Responses/Errors/IErrorForm.cs index 35c980c..a5e3b02 100644 --- a/src/Daktela.HttpClient/Api/Responses/Errors/IErrorForm.cs +++ b/src/Daktela.HttpClient/Api/Responses/Errors/IErrorForm.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Responses.Errors; -public interface IErrorForm -{ -} +public interface IErrorForm; diff --git a/src/Daktela.HttpClient/Api/Responses/Errors/IErrorResponse.cs b/src/Daktela.HttpClient/Api/Responses/Errors/IErrorResponse.cs index c773aa7..af78596 100644 --- a/src/Daktela.HttpClient/Api/Responses/Errors/IErrorResponse.cs +++ b/src/Daktela.HttpClient/Api/Responses/Errors/IErrorResponse.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Responses.Errors; -public interface IErrorResponse -{ -} +public interface IErrorResponse; diff --git a/src/Daktela.HttpClient/Api/Responses/Errors/PlainErrorResponse.cs b/src/Daktela.HttpClient/Api/Responses/Errors/PlainErrorResponse.cs index d77958a..b44f22b 100644 --- a/src/Daktela.HttpClient/Api/Responses/Errors/PlainErrorResponse.cs +++ b/src/Daktela.HttpClient/Api/Responses/Errors/PlainErrorResponse.cs @@ -2,6 +2,4 @@ namespace Daktela.HttpClient.Api.Responses.Errors; -public class PlainErrorResponse : Collection, IErrorResponse -{ -} +public class PlainErrorResponse : Collection, IErrorResponse; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/CallActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/CallActivity.cs index 5057ba6..f6e44be 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/CallActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/CallActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class CallActivity -{ -} +public class CallActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/CommentActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/CommentActivity.cs index a89bee4..677a60c 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/CommentActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/CommentActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class CommentActivity -{ -} +public class CommentActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/CustomActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/CustomActivity.cs index 91da8e2..d96fa46 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/CustomActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/CustomActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class CustomActivity -{ -} +public class CustomActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookCommentActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookCommentActivity.cs index 66e7180..39a5d93 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookCommentActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookCommentActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class FacebookCommentActivity -{ -} +public class FacebookCommentActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookMessengerActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookMessengerActivity.cs index 03b1b78..3ea175e 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookMessengerActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/FacebookMessengerActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class FacebookMessengerActivity -{ -} +public class FacebookMessengerActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/InstagramDirectMessageActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/InstagramDirectMessageActivity.cs index cf41b98..1eb2a63 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/InstagramDirectMessageActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/InstagramDirectMessageActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class InstagramDirectMessageActivity -{ -} +public class InstagramDirectMessageActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/SmsActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/SmsActivity.cs index 0a7cd74..1601709 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/SmsActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/SmsActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class SmsActivity -{ -} +public class SmsActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/ViberActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/ViberActivity.cs index a232328..7194e40 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/ViberActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/ViberActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class ViberActivity -{ -} +public class ViberActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/WebChatActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/WebChatActivity.cs index c9b2477..91673bf 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/WebChatActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/WebChatActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class WebChatActivity -{ -} +public class WebChatActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/Activities/WhatsAppActivity.cs b/src/Daktela.HttpClient/Api/Tickets/Activities/WhatsAppActivity.cs index 6bc035a..5dd15e9 100644 --- a/src/Daktela.HttpClient/Api/Tickets/Activities/WhatsAppActivity.cs +++ b/src/Daktela.HttpClient/Api/Tickets/Activities/WhatsAppActivity.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Api.Tickets.Activities; -public class WhatsAppActivity -{ -} +public class WhatsAppActivity; diff --git a/src/Daktela.HttpClient/Api/Tickets/ReadTicket.cs b/src/Daktela.HttpClient/Api/Tickets/ReadTicket.cs index cb73553..80daacd 100644 --- a/src/Daktela.HttpClient/Api/Tickets/ReadTicket.cs +++ b/src/Daktela.HttpClient/Api/Tickets/ReadTicket.cs @@ -4,7 +4,6 @@ using Daktela.HttpClient.Api.Users; using Daktela.HttpClient.Attributes; using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text.Json.Serialization; diff --git a/src/Daktela.HttpClient/Daktela.HttpClient.csproj b/src/Daktela.HttpClient/Daktela.HttpClient.csproj index e54f998..9d03516 100644 --- a/src/Daktela.HttpClient/Daktela.HttpClient.csproj +++ b/src/Daktela.HttpClient/Daktela.HttpClient.csproj @@ -39,6 +39,7 @@ + diff --git a/src/Daktela.HttpClient/Implementations/Endpoints/ActivityEndpoint.cs b/src/Daktela.HttpClient/Implementations/Endpoints/ActivityEndpoint.cs index 711c53d..023428f 100644 --- a/src/Daktela.HttpClient/Implementations/Endpoints/ActivityEndpoint.cs +++ b/src/Daktela.HttpClient/Implementations/Endpoints/ActivityEndpoint.cs @@ -16,26 +16,13 @@ namespace Daktela.HttpClient.Implementations.Endpoints; -public class ActivityEndpoint : IActivityEndpoint +public class ActivityEndpoint( + IDaktelaHttpClient daktelaHttpClient, + IHttpRequestSerializer httpRequestSerializer, + IHttpResponseParser httpResponseParser, + IPagedResponseProcessor pagedResponseProcessor +) : IActivityEndpoint { - private readonly IDaktelaHttpClient _daktelaHttpClient; - private readonly IHttpRequestSerializer _httpRequestSerializer; - private readonly IHttpResponseParser _httpResponseParser; - private readonly IPagedResponseProcessor _pagedResponseProcessor; - - public ActivityEndpoint( - IDaktelaHttpClient daktelaHttpClient, - IHttpRequestSerializer httpRequestSerializer, - IHttpResponseParser httpResponseParser, - IPagedResponseProcessor pagedResponseProcessor - ) - { - _daktelaHttpClient = daktelaHttpClient; - _httpRequestSerializer = httpRequestSerializer; - _httpResponseParser = httpResponseParser; - _pagedResponseProcessor = pagedResponseProcessor; - } - public async Task GetActivityAsync( string name, CancellationToken cancellationToken @@ -43,8 +30,8 @@ CancellationToken cancellationToken { var encodedName = HttpUtility.UrlEncode(name); - var contact = await _daktelaHttpClient.GetAsync( - _httpResponseParser, + var contact = await daktelaHttpClient.GetAsync( + httpResponseParser, $"{IActivityEndpoint.UriPrefix}/{encodedName}{IActivityEndpoint.UriPostfix}", DaktelaJsonSerializerContext.Default.SingleResponseReadActivity, cancellationToken @@ -69,9 +56,9 @@ CancellationToken cancellationToken public async Task CreateActivityAsync( CreateActivity activity, CancellationToken cancellationToken - ) => await _daktelaHttpClient.PostAsync( - _httpRequestSerializer, - _httpResponseParser, + ) => await daktelaHttpClient.PostAsync( + httpRequestSerializer, + httpResponseParser, $"{IActivityEndpoint.UriPrefix}{IActivityEndpoint.UriPostfix}", activity, DaktelaJsonSerializerContext.Default.CreateActivity, @@ -87,9 +74,9 @@ CancellationToken cancellationToken { var encodedName = HttpUtility.UrlEncode(name); - return await _daktelaHttpClient.PutAsync( - _httpRequestSerializer, - _httpResponseParser, + return await daktelaHttpClient.PutAsync( + httpRequestSerializer, + httpResponseParser, $"{IActivityEndpoint.UriPrefix}/{encodedName}{IActivityEndpoint.UriPostfix}", contact, DaktelaJsonSerializerContext.Default.UpdateActivity, @@ -106,14 +93,14 @@ public IAsyncEnumerable GetActivitiesFieldsAsync( CancellationToken cancellationToken ) where TRequest : IRequest, IFieldsQuery - where TResult : class, IFieldResult => _pagedResponseProcessor.InvokeAsync( + where TResult : class, IFieldResult => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, jsonTypeInfoForResponseType, }, async static ( @@ -140,14 +127,14 @@ public IAsyncEnumerable GetActivityAttachmentsAsync( IRequestOption requestOption, IResponseBehaviour responseBehaviour, CancellationToken cancellationToken - ) => _pagedResponseProcessor.InvokeAsync( + ) => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, name, }, async static ( @@ -317,14 +304,14 @@ private IAsyncEnumerable GetListAsync( IRequestOption requestOption, IResponseBehaviour responseBehaviour, CancellationToken cancellationToken - ) where T : class => _pagedResponseProcessor.InvokeAsync( + ) where T : class => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, targetUri, jsonTypeInfo, }, diff --git a/src/Daktela.HttpClient/Implementations/Endpoints/ContactEndpoint.cs b/src/Daktela.HttpClient/Implementations/Endpoints/ContactEndpoint.cs index f257b85..16c0b5b 100644 --- a/src/Daktela.HttpClient/Implementations/Endpoints/ContactEndpoint.cs +++ b/src/Daktela.HttpClient/Implementations/Endpoints/ContactEndpoint.cs @@ -15,34 +15,21 @@ namespace Daktela.HttpClient.Implementations.Endpoints; -public class ContactEndpoint : IContactEndpoint +public class ContactEndpoint( + IDaktelaHttpClient daktelaHttpClient, + IHttpRequestSerializer httpRequestSerializer, + IHttpResponseParser httpResponseParser, + IPagedResponseProcessor pagedResponseProcessor +) : IContactEndpoint { - private readonly IDaktelaHttpClient _daktelaHttpClient; - private readonly IHttpRequestSerializer _httpRequestSerializer; - private readonly IHttpResponseParser _httpResponseParser; - private readonly IPagedResponseProcessor _pagedResponseProcessor; - - public ContactEndpoint( - IDaktelaHttpClient daktelaHttpClient, - IHttpRequestSerializer httpRequestSerializer, - IHttpResponseParser httpResponseParser, - IPagedResponseProcessor pagedResponseProcessor - ) - { - _daktelaHttpClient = daktelaHttpClient; - _httpRequestSerializer = httpRequestSerializer; - _httpResponseParser = httpResponseParser; - _pagedResponseProcessor = pagedResponseProcessor; - } - public async Task GetContactAsync( string name, CancellationToken cancellationToken ) { var encodedName = HttpUtility.UrlEncode(name); - var contact = await _daktelaHttpClient.GetAsync( - _httpResponseParser, + var contact = await daktelaHttpClient.GetAsync( + httpResponseParser, $"{IContactEndpoint.UriPrefix}/{encodedName}{IContactEndpoint.UriPostfix}", DaktelaJsonSerializerContext.Default.SingleResponseReadContact, cancellationToken @@ -56,14 +43,14 @@ public IAsyncEnumerable GetContactsAsync( IRequestOption requestOption, IResponseBehaviour responseBehaviour, CancellationToken cancellationToken - ) => _pagedResponseProcessor.InvokeAsync( + ) => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser + daktelaHttpClient, + httpResponseParser, }, async static ( request, @@ -83,9 +70,9 @@ async static ( public async Task CreateContactAsync( CreateContact contact, CancellationToken cancellationToken - ) => await _daktelaHttpClient.PostAsync( - _httpRequestSerializer, - _httpResponseParser, + ) => await daktelaHttpClient.PostAsync( + httpRequestSerializer, + httpResponseParser, $"{IContactEndpoint.UriPrefix}{IContactEndpoint.UriPostfix}", contact, DaktelaJsonSerializerContext.Default.CreateContact, @@ -101,9 +88,9 @@ CancellationToken cancellationToken { var encodedName = HttpUtility.UrlEncode(name); - return await _daktelaHttpClient.PutAsync( - _httpRequestSerializer, - _httpResponseParser, + return await daktelaHttpClient.PutAsync( + httpRequestSerializer, + httpResponseParser, $"{IContactEndpoint.UriPrefix}/{encodedName}{IContactEndpoint.UriPostfix}", contact, DaktelaJsonSerializerContext.Default.UpdateContact, @@ -118,7 +105,7 @@ public async Task DeleteContactAsync( { var encodedName = HttpUtility.UrlEncode(name); - await _daktelaHttpClient.DeleteAsync( + await daktelaHttpClient.DeleteAsync( $"{IContactEndpoint.UriPrefix}/{encodedName}{IContactEndpoint.UriPostfix}", cancellationToken ).ConfigureAwait(false); @@ -132,14 +119,14 @@ public IAsyncEnumerable GetContactsFieldsAsync( CancellationToken cancellationToken ) where TRequest : IRequest, IFieldsQuery - where TResult : class, IFieldResult => _pagedResponseProcessor.InvokeAsync( + where TResult : class, IFieldResult => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, jsonTypeInfoForResponseType, }, async static ( diff --git a/src/Daktela.HttpClient/Implementations/Endpoints/FileEndpoint.cs b/src/Daktela.HttpClient/Implementations/Endpoints/FileEndpoint.cs index f3f61a4..5d17fcf 100644 --- a/src/Daktela.HttpClient/Implementations/Endpoints/FileEndpoint.cs +++ b/src/Daktela.HttpClient/Implementations/Endpoints/FileEndpoint.cs @@ -3,7 +3,7 @@ using Daktela.HttpClient.Interfaces; using Daktela.HttpClient.Interfaces.Endpoints; using System; -using System.Collections.Specialized; +using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Http; @@ -13,21 +13,13 @@ namespace Daktela.HttpClient.Implementations.Endpoints; -public class FileEndpoint : IFileEndpoint +public class FileEndpoint( + IDaktelaHttpClient daktelaHttpClient, + IHttpRequestFactory httpRequestFactory +) : IFileEndpoint { - private readonly IDaktelaHttpClient _daktelaHttpClient; - private readonly IHttpRequestFactory _httpRequestFactory; private readonly EFileSourceEnumJsonConverter _fileSourceEnumJsonConverter = new(); - public FileEndpoint( - IDaktelaHttpClient daktelaHttpClient, - IHttpRequestFactory httpRequestFactory - ) - { - _daktelaHttpClient = daktelaHttpClient; - _httpRequestFactory = httpRequestFactory; - } - public async Task DownloadFileAsync( EFileSource fileSource, long fileName, @@ -42,19 +34,18 @@ CancellationToken cancellationToken _fileSourceEnumJsonConverter.ToFirstEnumName(fileSource) ); - using var httpRequestMessage = _httpRequestFactory.CreateHttpRequestMessage( + using var httpRequestMessage = httpRequestFactory.CreateHttpRequestMessage( HttpMethod.Post, path, - new NameValueCollection - { - ["mapper"] = mapper, - ["name"] = fileName.ToString(), - ["download"] = "1", - ["fullsize"] = "1", - } + [ + KeyValuePair.Create("mapper", mapper), + KeyValuePair.Create("name", fileName.ToString()), + KeyValuePair.Create("download", "1"), + KeyValuePair.Create("fullsize", "1"), + ] ); - using var httpResponse = await _daktelaHttpClient.RawSendAsync( + using var httpResponse = await daktelaHttpClient.RawSendAsync( httpRequestMessage, HttpCompletionOption.ResponseHeadersRead, cancellationToken ); @@ -83,13 +74,12 @@ CancellationToken cancellationToken { const string path = IFileEndpoint.UriUpload; - using var httpRequestMessage = _httpRequestFactory.CreateHttpRequestMessage( + using var httpRequestMessage = httpRequestFactory.CreateHttpRequestMessage( HttpMethod.Post, path, - new NameValueCollection - { - ["type"] = "save", - } + [ + KeyValuePair.Create("type", "save"), + ] ); using var content = new MultipartFormDataContent(); @@ -101,7 +91,7 @@ CancellationToken cancellationToken httpRequestMessage.Content = content; - using var httpResponse = await _daktelaHttpClient.RawSendAsync(httpRequestMessage, cancellationToken); + using var httpResponse = await daktelaHttpClient.RawSendAsync(httpRequestMessage, cancellationToken); // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault switch (httpResponse.StatusCode) @@ -129,13 +119,12 @@ CancellationToken cancellationToken { const string path = IFileEndpoint.UriUpload; - using var httpRequestMessage = _httpRequestFactory.CreateHttpRequestMessage( + using var httpRequestMessage = httpRequestFactory.CreateHttpRequestMessage( HttpMethod.Post, path, - new NameValueCollection - { - ["type"] = "remove", - } + [ + KeyValuePair.Create("type", "remove"), + ] ); using var content = new MultipartFormDataContent(); @@ -146,7 +135,7 @@ CancellationToken cancellationToken httpRequestMessage.Content = content; - using var httpResponse = await _daktelaHttpClient.RawSendAsync(httpRequestMessage, cancellationToken); + using var httpResponse = await daktelaHttpClient.RawSendAsync(httpRequestMessage, cancellationToken); // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault switch (httpResponse.StatusCode) diff --git a/src/Daktela.HttpClient/Implementations/Endpoints/MergeEndpoint.cs b/src/Daktela.HttpClient/Implementations/Endpoints/MergeEndpoint.cs index 5be7101..5f0e187 100644 --- a/src/Daktela.HttpClient/Implementations/Endpoints/MergeEndpoint.cs +++ b/src/Daktela.HttpClient/Implementations/Endpoints/MergeEndpoint.cs @@ -9,7 +9,6 @@ using Daktela.HttpClient.Interfaces.Endpoints; using System; using System.Collections.Generic; -using System.Collections.Specialized; using System.Linq; using System.Net; using System.Net.Http; @@ -20,23 +19,12 @@ namespace Daktela.HttpClient.Implementations.Endpoints; -public class MergeEndpoint : IMergeEndpoint +public class MergeEndpoint( + IDaktelaHttpClient daktelaHttpClient, + IHttpRequestFactory httpRequestFactory, + IHttpResponseParser httpResponseParser +) : IMergeEndpoint { - private readonly IDaktelaHttpClient _daktelaHttpClient; - private readonly IHttpRequestFactory _httpRequestFactory; - private readonly IHttpResponseParser _httpResponseParser; - - public MergeEndpoint( - IDaktelaHttpClient daktelaHttpClient, - IHttpRequestFactory httpRequestFactory, - IHttpResponseParser httpResponseParser - ) - { - _daktelaHttpClient = daktelaHttpClient; - _httpRequestFactory = httpRequestFactory; - _httpResponseParser = httpResponseParser; - } - public Task> MergeContactsAsync( IReadOnlyCollection items, CancellationToken cancellationToken @@ -93,19 +81,19 @@ CancellationToken cancellationToken var path = GePath(type); var typeAsQueryString = GetTypeAsQueryString(type); - var queryParameters = new NameValueCollection(); + ICollection> queryParameters = []; for (var i = 0; i < items.Count; i++) { - queryParameters.Add($"{typeAsQueryString}[{i}]", items.ElementAt(i)); + queryParameters.Add(KeyValuePair.Create($"{typeAsQueryString}[{i}]", items.ElementAt(i))); } - using var httpRequestMessage = _httpRequestFactory.CreateHttpRequestMessage( + using var httpRequestMessage = httpRequestFactory.CreateHttpRequestMessage( HttpMethod.Post, path, queryParameters ); - using var httpResponse = await _daktelaHttpClient.RawSendAsync( + using var httpResponse = await daktelaHttpClient.RawSendAsync( httpRequestMessage, HttpCompletionOption.ResponseHeadersRead, cancellationToken ).ConfigureAwait(false); @@ -115,7 +103,7 @@ CancellationToken cancellationToken case HttpStatusCode.OK: try { - var response = await _httpResponseParser.ParseResponseAsync( + var response = await httpResponseParser.ParseResponseAsync( httpResponse.Content, jsonTypeInfoForResponseType, cancellationToken diff --git a/src/Daktela.HttpClient/Implementations/Endpoints/TicketEndpoint.cs b/src/Daktela.HttpClient/Implementations/Endpoints/TicketEndpoint.cs index a36c2f7..146efef 100644 --- a/src/Daktela.HttpClient/Implementations/Endpoints/TicketEndpoint.cs +++ b/src/Daktela.HttpClient/Implementations/Endpoints/TicketEndpoint.cs @@ -14,33 +14,20 @@ namespace Daktela.HttpClient.Implementations.Endpoints; -public class TicketEndpoint : ITicketEndpoint +public class TicketEndpoint( + IDaktelaHttpClient daktelaHttpClient, + IHttpRequestSerializer httpRequestSerializer, + IHttpResponseParser httpResponseParser, + IPagedResponseProcessor pagedResponseProcessor +) : ITicketEndpoint { - private readonly IDaktelaHttpClient _daktelaHttpClient; - private readonly IHttpRequestSerializer _httpRequestSerializer; - private readonly IHttpResponseParser _httpResponseParser; - private readonly IPagedResponseProcessor _pagedResponseProcessor; - - public TicketEndpoint( - IDaktelaHttpClient daktelaHttpClient, - IHttpRequestSerializer httpRequestSerializer, - IHttpResponseParser httpResponseParser, - IPagedResponseProcessor pagedResponseProcessor - ) - { - _daktelaHttpClient = daktelaHttpClient; - _httpRequestSerializer = httpRequestSerializer; - _httpResponseParser = httpResponseParser; - _pagedResponseProcessor = pagedResponseProcessor; - } - public async Task GetTicketAsync( long name, CancellationToken cancellationToken ) { - var contact = await _daktelaHttpClient.GetAsync( - _httpResponseParser, + var contact = await daktelaHttpClient.GetAsync( + httpResponseParser, $"{ITicketEndpoint.UriPrefix}/{name}{ITicketEndpoint.UriPostfix}", DaktelaJsonSerializerContext.Default.SingleResponseReadTicket, cancellationToken @@ -54,14 +41,14 @@ public IAsyncEnumerable GetTicketsAsync( IRequestOption requestOption, IResponseBehaviour responseBehaviour, CancellationToken cancellationToken - ) => _pagedResponseProcessor.InvokeAsync( + ) => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser + daktelaHttpClient, + httpResponseParser, }, async static ( request, @@ -81,9 +68,9 @@ async static ( public async Task CreateTicketAsync( CreateTicket ticket, CancellationToken cancellationToken - ) => await _daktelaHttpClient.PostAsync( - _httpRequestSerializer, - _httpResponseParser, + ) => await daktelaHttpClient.PostAsync( + httpRequestSerializer, + httpResponseParser, $"{ITicketEndpoint.UriPrefix}{ITicketEndpoint.UriPostfix}", ticket, DaktelaJsonSerializerContext.Default.CreateTicket, @@ -95,9 +82,9 @@ public async Task UpdateTicketAsync( long name, UpdateTicket ticket, CancellationToken cancellationToken - ) => await _daktelaHttpClient.PutAsync( - _httpRequestSerializer, - _httpResponseParser, + ) => await daktelaHttpClient.PutAsync( + httpRequestSerializer, + httpResponseParser, $"{ITicketEndpoint.UriPrefix}/{name}{ITicketEndpoint.UriPostfix}", ticket, DaktelaJsonSerializerContext.Default.UpdateTicket, @@ -107,7 +94,7 @@ CancellationToken cancellationToken public async Task DeleteTicketAsync( long name, CancellationToken cancellationToken - ) => await _daktelaHttpClient.DeleteAsync( + ) => await daktelaHttpClient.DeleteAsync( $"{ITicketEndpoint.UriPrefix}/{name}{ITicketEndpoint.UriPostfix}", cancellationToken ).ConfigureAwait(false); @@ -120,14 +107,14 @@ public IAsyncEnumerable GetTicketsFieldsAsync( CancellationToken cancellationToken ) where TRequest : IRequest, IFieldsQuery - where TResult : class, IFieldResult => _pagedResponseProcessor.InvokeAsync( + where TResult : class, IFieldResult => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, jsonTypeInfoForResponseType, }, async static ( @@ -154,14 +141,14 @@ public IAsyncEnumerable GetTicketActivitiesAsync( IRequestOption requestOption, IResponseBehaviour responseBehaviour, CancellationToken cancellationToken - ) => _pagedResponseProcessor.InvokeAsync( + ) => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, name, }, async static ( @@ -189,14 +176,14 @@ public IAsyncEnumerable GetTicketActivitiesFieldsAsync _pagedResponseProcessor.InvokeAsync( + where TResult : class, IFieldResult => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, name, jsonTypeInfoForResponseType, }, diff --git a/src/Daktela.HttpClient/Implementations/Endpoints/TicketsCategoryEndpoint.cs b/src/Daktela.HttpClient/Implementations/Endpoints/TicketsCategoryEndpoint.cs index 57b3df6..374502a 100644 --- a/src/Daktela.HttpClient/Implementations/Endpoints/TicketsCategoryEndpoint.cs +++ b/src/Daktela.HttpClient/Implementations/Endpoints/TicketsCategoryEndpoint.cs @@ -1,5 +1,4 @@ using Daktela.HttpClient.Api; -using Daktela.HttpClient.Api.Responses; using Daktela.HttpClient.Api.Tickets; using Daktela.HttpClient.Interfaces; using Daktela.HttpClient.Interfaces.Endpoints; @@ -7,41 +6,29 @@ using Daktela.HttpClient.Interfaces.Requests.Options; using Daktela.HttpClient.Interfaces.ResponseBehaviours; using System.Collections.Generic; -using System.Text.Json.Serialization.Metadata; using System.Threading; namespace Daktela.HttpClient.Implementations.Endpoints; -public class TicketsCategoryEndpoint : ITicketsCategoryEndpoint +public class TicketsCategoryEndpoint( + IDaktelaHttpClient daktelaHttpClient, + IHttpResponseParser httpResponseParser, + IPagedResponseProcessor pagedResponseProcessor +) : ITicketsCategoryEndpoint { - private readonly IDaktelaHttpClient _daktelaHttpClient; - private readonly IHttpResponseParser _httpResponseParser; - private readonly IPagedResponseProcessor _pagedResponseProcessor; - - public TicketsCategoryEndpoint( - IDaktelaHttpClient daktelaHttpClient, - IHttpResponseParser httpResponseParser, - IPagedResponseProcessor pagedResponseProcessor - ) - { - _daktelaHttpClient = daktelaHttpClient; - _httpResponseParser = httpResponseParser; - _pagedResponseProcessor = pagedResponseProcessor; - } - public IAsyncEnumerable GetTicketsCategoriesAsync( IRequest request, IRequestOption requestOption, IResponseBehaviour responseBehaviour, CancellationToken cancellationToken - ) => _pagedResponseProcessor.InvokeAsync( + ) => pagedResponseProcessor.InvokeAsync( request, requestOption, responseBehaviour, new { - daktelaHttpClient = _daktelaHttpClient, - httpResponseParser = _httpResponseParser, + daktelaHttpClient, + httpResponseParser, }, async static ( request, diff --git a/src/Daktela.HttpClient/Implementations/HttpRequestFactory.cs b/src/Daktela.HttpClient/Implementations/HttpRequestFactory.cs index 7adb231..64ae7cf 100644 --- a/src/Daktela.HttpClient/Implementations/HttpRequestFactory.cs +++ b/src/Daktela.HttpClient/Implementations/HttpRequestFactory.cs @@ -3,9 +3,10 @@ using Daktela.HttpClient.Interfaces; using Daktela.HttpClient.Interfaces.Queries; using Daktela.HttpClient.Interfaces.Requests; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Options; using System; -using System.Collections.Specialized; +using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; using System.Linq; @@ -16,22 +17,15 @@ namespace Daktela.HttpClient.Implementations; -public class HttpRequestFactory : IHttpRequestFactory +public class HttpRequestFactory( + IContractValidation contractValidation, + IOptions daktelaOptions +) : IHttpRequestFactory { - private readonly IContractValidation _contractValidation; - private readonly DaktelaOptions _daktelaOptions; + private readonly DaktelaOptions _daktelaOptions = daktelaOptions.Value; private readonly ESortDirectionEnumJsonConverter _sortDirectionEnumJsonConverter = new(); private readonly EFilterOperatorEnumJsonConverter _filterOperatorEnumJsonConverter = new(); - public HttpRequestFactory( - IContractValidation contractValidation, - IOptions daktelaOptions - ) - { - _contractValidation = contractValidation; - _daktelaOptions = daktelaOptions.Value; - } - public Uri CreateUri( string path ) => new(new Uri(_daktelaOptions.ApiDomain!, UriKind.Absolute), path); @@ -71,23 +65,19 @@ private HttpRequestMessage CreateHttpRequestMessage( } public HttpRequestMessage CreateHttpRequestMessage( - HttpMethod method, string path, NameValueCollection queryParameters + HttpMethod method, string path, ICollection> queryParameters ) { var uri = CreateUri(path); - if (queryParameters.HasKeys()) + if (queryParameters.Count > 0) { - var parsedQuery = HttpUtility.ParseQueryString(uri.Query); - - foreach (string key in queryParameters.Keys) - { - parsedQuery[key] = queryParameters[key]; - } + var query = new QueryString(uri.Query); + query = query.Add(QueryString.Create(queryParameters)); var uriBuilder = new UriBuilder(uri) { - Query = parsedQuery.ToString() + Query = query.ToString(), }; uri = uriBuilder.Uri; @@ -100,7 +90,7 @@ public HttpRequestMessage CreateHttpRequestMessage( HttpMethod method, string path, IRequest request ) { - var queryDictionary = new NameValueCollection(); + ICollection> queryDictionary = []; ApplyFields(request, queryDictionary); ApplySorting(request, queryDictionary); @@ -110,19 +100,19 @@ public HttpRequestMessage CreateHttpRequestMessage( return CreateHttpRequestMessage(method, path, queryDictionary); } - private void ApplyFields(IRequest request, NameValueCollection query) + private void ApplyFields(IRequest request, ICollection> query) { if (request is IFieldsQuery { Fields.Items: { } fieldItems }) { for (var i = 0; i < fieldItems.Count; i++) { var fieldItem = fieldItems.ElementAt(i); - query.Add($"fields[{i}]", fieldItem); + query.Add(KeyValuePair.Create($"fields[{i}]", fieldItem)); } } } - private void ApplySorting(IRequest request, NameValueCollection query) + private void ApplySorting(IRequest request, ICollection> query) { if (request is ISortableQuery { Sorting: { } sorting }) { @@ -134,13 +124,13 @@ private void ApplySorting(IRequest request, NameValueCollection query) _sortDirectionEnumJsonConverter.ToFirstEnumName(sortItem.Dir) ); - query.Add($"sort[{i}][dir]", sortDir); - query.Add($"sort[{i}][field]", sortItem.Field); + query.Add(KeyValuePair.Create($"sort[{i}][dir]", sortDir)); + query.Add(KeyValuePair.Create($"sort[{i}][field]", sortItem.Field)); } } } - private void ApplyFilters(IRequest request, NameValueCollection query) + private void ApplyFilters(IRequest request, ICollection> query) { if (request is IFilteringQuery { Filters: { } filters }) { @@ -150,7 +140,7 @@ private void ApplyFilters(IRequest request, NameValueCollection query) } } - private void SerializeFilters(IFilter filter, NameValueCollection query, string keyPrefix) + private void SerializeFilters(IFilter filter, ICollection> query, string keyPrefix) { switch (filter) { @@ -159,18 +149,18 @@ private void SerializeFilters(IFilter filter, NameValueCollection query, string _filterOperatorEnumJsonConverter.ToFirstEnumName(coreFilter.Operator) ); - query.Add($"{keyPrefix}[field]", coreFilter.Field); - query.Add($"{keyPrefix}[operator]", filterOperator); - query.Add($"{keyPrefix}[value]", HttpUtility.HtmlEncode(coreFilter.Value)); + query.Add(KeyValuePair.Create($"{keyPrefix}[field]", coreFilter.Field)); + query.Add(KeyValuePair.Create($"{keyPrefix}[operator]", filterOperator)); + query.Add(KeyValuePair.Create($"{keyPrefix}[value]", HttpUtility.HtmlEncode(coreFilter.Value))); if (!string.IsNullOrEmpty(coreFilter.Type)) { - query.Add($"{keyPrefix}[type]", coreFilter.Type); + query.Add(KeyValuePair.Create($"{keyPrefix}[type]", coreFilter.Type)); } break; case FilterGroup groupFilter: - query.Add($"{keyPrefix}[logic]", groupFilter.Logic == EFilterLogic.Or ? "or" : "and"); + query.Add(KeyValuePair.Create($"{keyPrefix}[logic]", groupFilter.Logic == EFilterLogic.Or ? "or" : "and")); for (var i = 0; i < groupFilter.Filters.Count; i++) { @@ -185,21 +175,23 @@ private void SerializeFilters(IFilter filter, NameValueCollection query, string } } - private void ApplyPagination(IRequest request, NameValueCollection query) + private void ApplyPagination(IRequest request, ICollection> query) { if (request is IPagedQuery { Paging: { } paging }) { - query.Add("skip", paging.Skip.ToString()); - query.Add("take", paging.Take.ToString()); + query.Add(KeyValuePair.Create("skip", paging.Skip.ToString())); + query.Add(KeyValuePair.Create("take", paging.Take.ToString())); } } public HttpRequestMessage CreateHttpRequestMessage< +#pragma warning disable format [DynamicallyAccessedMembers( DynamicallyAccessedMemberTypes.PublicFields | DynamicallyAccessedMemberTypes.PublicProperties )] - TBody + TBody +#pragma warning restore format >( IHttpRequestSerializer httpRequestSerializer, HttpMethod method, @@ -210,7 +202,7 @@ JsonTypeInfo jsonTypeInfoForRequestType { var httpMessage = CreateHttpRequestMessage(method, path); - var validationResult = _contractValidation.Validate(body, method.Method switch + var validationResult = contractValidation.Validate(body, method.Method switch { "GET" => EOperation.Read, "POST" => EOperation.Create, diff --git a/src/Daktela.HttpClient/Implementations/JsonConverters/ProfileCustomViewsConverter.cs b/src/Daktela.HttpClient/Implementations/JsonConverters/ProfileCustomViewsConverter.cs index 218f667..954eaa1 100644 --- a/src/Daktela.HttpClient/Implementations/JsonConverters/ProfileCustomViewsConverter.cs +++ b/src/Daktela.HttpClient/Implementations/JsonConverters/ProfileCustomViewsConverter.cs @@ -1,6 +1,7 @@ using Daktela.HttpClient.Api; using Daktela.HttpClient.Api.Users; using System; +using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Serialization; @@ -18,6 +19,7 @@ public class ProfileCustomViewsConverter : JsonConverter _ => throw new JsonException(), }; + [SuppressMessage("ReSharper", "UnusedParameter.Local")] private ProfileCustomViews ReadProfileCustomArray( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options ) @@ -32,6 +34,7 @@ private ProfileCustomViews ReadProfileCustomArray( throw new JsonException(); } + [SuppressMessage("ReSharper", "UnusedParameter.Local")] private ProfileCustomViews ReadProfileCustomDictionary( ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options ) diff --git a/src/Daktela.HttpClient/Implementations/RequestBuilder.cs b/src/Daktela.HttpClient/Implementations/RequestBuilder.cs index 1f7e8f2..0e82fb7 100644 --- a/src/Daktela.HttpClient/Implementations/RequestBuilder.cs +++ b/src/Daktela.HttpClient/Implementations/RequestBuilder.cs @@ -11,7 +11,7 @@ public static class RequestBuilder public static ISortingRequest CreateSortable(IReadOnlyCollection sorting) => new SortingOnlyRequest(sorting); - public static ISortingRequest CreateSortable(ISorting sorting) => CreateSortable(new[] { sorting }); + public static ISortingRequest CreateSortable(ISorting sorting) => CreateSortable([sorting]); public static IPagedRequest CreatePaged(Paging paging) => new PagingOnlyRequest(paging); diff --git a/src/Daktela.HttpClient/Implementations/ResponseBehaviours/EmptyResponseBehaviour.cs b/src/Daktela.HttpClient/Implementations/ResponseBehaviours/EmptyResponseBehaviour.cs index 438e8fa..9389deb 100644 --- a/src/Daktela.HttpClient/Implementations/ResponseBehaviours/EmptyResponseBehaviour.cs +++ b/src/Daktela.HttpClient/Implementations/ResponseBehaviours/EmptyResponseBehaviour.cs @@ -2,6 +2,4 @@ namespace Daktela.HttpClient.Implementations.ResponseBehaviours; -internal class EmptyResponseBehaviour : IResponseBehaviour -{ -} +internal class EmptyResponseBehaviour : IResponseBehaviour; diff --git a/src/Daktela.HttpClient/Interfaces/IHttpRequestFactory.cs b/src/Daktela.HttpClient/Interfaces/IHttpRequestFactory.cs index 50f2c09..a31c080 100644 --- a/src/Daktela.HttpClient/Interfaces/IHttpRequestFactory.cs +++ b/src/Daktela.HttpClient/Interfaces/IHttpRequestFactory.cs @@ -1,6 +1,6 @@ using Daktela.HttpClient.Interfaces.Requests; using System; -using System.Collections.Specialized; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Net.Http; using System.Text.Json.Serialization.Metadata; @@ -16,7 +16,7 @@ HttpRequestMessage CreateHttpRequestMessage( ); HttpRequestMessage CreateHttpRequestMessage( - HttpMethod method, string path, NameValueCollection queryParameters + HttpMethod method, string path, ICollection> queryParameters ); HttpRequestMessage CreateHttpRequestMessage( diff --git a/src/Daktela.HttpClient/Interfaces/Requests/Builder/IWithSortable.cs b/src/Daktela.HttpClient/Interfaces/Requests/Builder/IWithSortable.cs index 2a1def1..53072bf 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/Builder/IWithSortable.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/Builder/IWithSortable.cs @@ -8,5 +8,5 @@ public interface IWithSortable where T : class, ISortableQuery { T WithSortable(IReadOnlyCollection sorting); - T WithSortable(ISorting sorting) => WithSortable(new[] { sorting }); + T WithSortable(ISorting sorting) => WithSortable([sorting]); } diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IEmptyRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IEmptyRequest.cs index 4a66068..468b056 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IEmptyRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IEmptyRequest.cs @@ -2,6 +2,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IEmptyRequest : IRequest, IWithPaging, IWithSortable, IWithFilterable, IWithFields -{ -} +public interface IEmptyRequest : IRequest, IWithPaging, IWithSortable, IWithFilterable, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IFieldResult.cs b/src/Daktela.HttpClient/Interfaces/Requests/IFieldResult.cs index 889a2a7..4eeabab 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IFieldResult.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IFieldResult.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IFieldResult -{ -} +public interface IFieldResult; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IFieldsRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IFieldsRequest.cs index 5f08d37..68159c1 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IFieldsRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IFieldsRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IFieldsRequest : IFieldsQuery, IWithSortable, IWithPaging, IWithFilterable -{ -} +public interface IFieldsRequest : IFieldsQuery, IWithSortable, IWithPaging, IWithFilterable; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IFieldsSortingRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IFieldsSortingRequest.cs index e840adf..3906c5f 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IFieldsSortingRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IFieldsSortingRequest.cs @@ -3,30 +3,16 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IFieldsSortingRequest : IFieldsQuery, ISortableQuery, IWithPaging, IWithFilterable -{ -} +public interface IFieldsSortingRequest : IFieldsQuery, ISortableQuery, IWithPaging, IWithFilterable; -public interface IFieldsPagedRequest : IFieldsQuery, IPagedQuery, IWithSortable, IWithFilterable -{ -} +public interface IFieldsPagedRequest : IFieldsQuery, IPagedQuery, IWithSortable, IWithFilterable; -public interface IFieldsPagedFilteringRequest : IFieldsQuery, IPagedQuery, IFilteringQuery, IWithSortable -{ -} +public interface IFieldsPagedFilteringRequest : IFieldsQuery, IPagedQuery, IFilteringQuery, IWithSortable; -public interface IFieldsFilteringRequest : IFieldsQuery, IFilteringQuery, IWithSortable, IWithPaging -{ -} +public interface IFieldsFilteringRequest : IFieldsQuery, IFilteringQuery, IWithSortable, IWithPaging; -public interface IFieldsPagedSortingRequest : IFieldsQuery, IPagedQuery, ISortableQuery, IWithFilterable -{ -} +public interface IFieldsPagedSortingRequest : IFieldsQuery, IPagedQuery, ISortableQuery, IWithFilterable; -public interface IFieldsSortingFilteringRequest : IFieldsQuery, ISortableQuery, IFilteringQuery, IWithPaging -{ -} +public interface IFieldsSortingFilteringRequest : IFieldsQuery, ISortableQuery, IFilteringQuery, IWithPaging; -public interface IFieldsPagedSortingFilteringRequest : IFieldsQuery, IPagedQuery, ISortableQuery, IFilteringQuery -{ -} +public interface IFieldsPagedSortingFilteringRequest : IFieldsQuery, IPagedQuery, ISortableQuery, IFilteringQuery; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IFilteringRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IFilteringRequest.cs index 092251d..149602b 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IFilteringRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IFilteringRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IFilteringRequest : IFilteringQuery, IWithSortable, IWithPaging, IWithFields -{ -} +public interface IFilteringRequest : IFilteringQuery, IWithSortable, IWithPaging, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IFilteringSortingRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IFilteringSortingRequest.cs index ada4e05..56b47e1 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IFilteringSortingRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IFilteringSortingRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IFilteringSortingRequest : IFilteringQuery, ISortableQuery, IWithPaging, IWithFields -{ -} +public interface IFilteringSortingRequest : IFilteringQuery, ISortableQuery, IWithPaging, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IPagedFilteringRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IPagedFilteringRequest.cs index e896ff9..f014fcd 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IPagedFilteringRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IPagedFilteringRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IPagedFilteringRequest : IFilteringQuery, IPagedQuery, IWithSortable, IWithFields -{ -} +public interface IPagedFilteringRequest : IFilteringQuery, IPagedQuery, IWithSortable, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IPagedRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IPagedRequest.cs index 9138686..46635e8 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IPagedRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IPagedRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IPagedRequest : IPagedQuery, IWithSortable, IWithFilterable, IWithFields -{ -} +public interface IPagedRequest : IPagedQuery, IWithSortable, IWithFilterable, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingFilteringRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingFilteringRequest.cs index 26a4e6f..12803f5 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingFilteringRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingFilteringRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IPagedSortingFilteringRequest : ISortableQuery, IPagedQuery, IFilteringQuery, IWithFields -{ -} +public interface IPagedSortingFilteringRequest : ISortableQuery, IPagedQuery, IFilteringQuery, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingRequest.cs index 1f9c489..b0ebe5f 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IPagedSortingRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IPagedSortingRequest : ISortableQuery, IPagedQuery, IWithFilterable, IWithFields -{ -} +public interface IPagedSortingRequest : ISortableQuery, IPagedQuery, IWithFilterable, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/IRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/IRequest.cs index 44a5652..3258b08 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/IRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/IRequest.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface IRequest -{ -} +public interface IRequest; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/ISortingRequest.cs b/src/Daktela.HttpClient/Interfaces/Requests/ISortingRequest.cs index 5f57791..033eb89 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/ISortingRequest.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/ISortingRequest.cs @@ -3,6 +3,4 @@ namespace Daktela.HttpClient.Interfaces.Requests; -public interface ISortingRequest : ISortableQuery, IWithFilterable, IWithPaging, IWithFields -{ -} +public interface ISortingRequest : ISortableQuery, IWithFilterable, IWithPaging, IWithFields; diff --git a/src/Daktela.HttpClient/Interfaces/Requests/Options/IRequestOption.cs b/src/Daktela.HttpClient/Interfaces/Requests/Options/IRequestOption.cs index c2945d0..c4e266d 100644 --- a/src/Daktela.HttpClient/Interfaces/Requests/Options/IRequestOption.cs +++ b/src/Daktela.HttpClient/Interfaces/Requests/Options/IRequestOption.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Interfaces.Requests.Options; -public interface IRequestOption -{ -} +public interface IRequestOption; diff --git a/src/Daktela.HttpClient/Interfaces/ResponseBehaviours/IResponseBehaviour.cs b/src/Daktela.HttpClient/Interfaces/ResponseBehaviours/IResponseBehaviour.cs index 8c40a0c..69f19e8 100644 --- a/src/Daktela.HttpClient/Interfaces/ResponseBehaviours/IResponseBehaviour.cs +++ b/src/Daktela.HttpClient/Interfaces/ResponseBehaviours/IResponseBehaviour.cs @@ -1,5 +1,3 @@ namespace Daktela.HttpClient.Interfaces.ResponseBehaviours; -public interface IResponseBehaviour -{ -} +public interface IResponseBehaviour; diff --git a/tests/Daktela.HttpClient.Tests/Endpoints/ContactEndpointTests.cs b/tests/Daktela.HttpClient.Tests/Endpoints/ContactEndpointTests.cs index 5683717..dbb62c1 100644 --- a/tests/Daktela.HttpClient.Tests/Endpoints/ContactEndpointTests.cs +++ b/tests/Daktela.HttpClient.Tests/Endpoints/ContactEndpointTests.cs @@ -101,7 +101,7 @@ var contact in _contactEndpoint.GetContactsAsync( RequestOptionBuilder.CreateAutoPagingRequestOption(false), responseMetadata, cancellationToken - ).WithCancellation(cancellationToken) + ) ) { count++; @@ -168,7 +168,7 @@ var contact in _contactEndpoint.GetContactsAsync( RequestOptionBuilder.CreateAutoPagingRequestOption(true), responseMetadata, cancellationToken - ).WithCancellation(cancellationToken) + ) ) { count++; diff --git a/tests/Daktela.HttpClient.Tests/Endpoints/FileEndpointTests.cs b/tests/Daktela.HttpClient.Tests/Endpoints/FileEndpointTests.cs index d1b53c5..8b87c0e 100644 --- a/tests/Daktela.HttpClient.Tests/Endpoints/FileEndpointTests.cs +++ b/tests/Daktela.HttpClient.Tests/Endpoints/FileEndpointTests.cs @@ -3,7 +3,7 @@ using Daktela.HttpClient.Interfaces; using Daktela.HttpClient.Interfaces.Endpoints; using Moq; -using System.Collections.Specialized; +using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; @@ -44,12 +44,12 @@ public async Task DownloadFileWorks() const int fileId = 42; _httpRequestFactoryMock.Setup(x => x.CreateHttpRequestMessage( - HttpMethod.Post, "/file/download.php", It.Is( + HttpMethod.Post, "/file/download.php", It.Is>>( i => i.Count == 4 - && i["mapper"] == "activitiesComment" - && i["name"] == fileId.ToString() - && i["download"] == "1" - && i["fullsize"] == "1" + && i.Single(q => q.Key == "mapper").Value == "activitiesComment" + && i.Single(q => q.Key == "name").Value == fileId.ToString() + && i.Single(q => q.Key == "download").Value == "1" + && i.Single(q => q.Key == "fullsize").Value == "1" ) )) .Returns(httpRequestMessage) @@ -116,7 +116,7 @@ public async Task UploadFileWorks() #pragma warning restore CA2000 #pragma warning disable CA2000 - Stream uploadFileStream = new MemoryStream(new byte[] { 0, 1, 2 }, false); + Stream uploadFileStream = new MemoryStream([0, 1, 2], false); #pragma warning restore CA2000 const string uploadFileName = "filename.png"; @@ -124,8 +124,8 @@ public async Task UploadFileWorks() const string remoteFileIdentifier = "fileIdentifier"; _httpRequestFactoryMock.Setup(x => x.CreateHttpRequestMessage( - HttpMethod.Post, "/file/upload.php", It.Is( - i => i.Count == 1 && i["type"] == "save" + HttpMethod.Post, "/file/upload.php", It.Is>>( + i => i.Count == 1 && i.Single(q => q.Key == "type").Value == "save" ) )) .Returns(httpRequestMessage) diff --git a/tests/Daktela.HttpClient.Tests/Infrastructure/Attributes/ManualInlineDataAttribute.cs b/tests/Daktela.HttpClient.Tests/Infrastructure/Attributes/ManualInlineDataAttribute.cs index 23cb100..c1953ab 100644 --- a/tests/Daktela.HttpClient.Tests/Infrastructure/Attributes/ManualInlineDataAttribute.cs +++ b/tests/Daktela.HttpClient.Tests/Infrastructure/Attributes/ManualInlineDataAttribute.cs @@ -19,11 +19,8 @@ public ManualInlineDataAttribute(params object[] data) _data = data; } - public override IEnumerable GetData(MethodInfo testMethod) - { - return new[] - { - _data - }; - } + public override IEnumerable GetData(MethodInfo testMethod) => + [ + _data, + ]; } diff --git a/tests/Daktela.HttpClient.Tests/Integration/IntegrationTests.cs b/tests/Daktela.HttpClient.Tests/Integration/IntegrationTests.cs index 13c5ce3..b50acc8 100644 --- a/tests/Daktela.HttpClient.Tests/Integration/IntegrationTests.cs +++ b/tests/Daktela.HttpClient.Tests/Integration/IntegrationTests.cs @@ -69,9 +69,9 @@ await daktelaHttpClient.PostAsync( Description = null, CustomFields = new CustomFields { - ["number"] = new[] { "123456789" }, - ["pps_id"] = new[] { "123", "124" }, - ["freshdesk_id"] = new[] { "12" }, + ["number"] = ["123456789"], + ["pps_id"] = ["123", "124"], + ["freshdesk_id"] = ["12"], }, Name = name, }, @@ -93,7 +93,7 @@ await daktelaHttpClient.PostAsync( User = "administrator", CustomFields = new CustomFields { - ["email"] = new[] { "my@email.com" }, + ["email"] = ["my@email.com"], }, }, DaktelaJsonSerializerContext.Default.UpdateContact, @@ -124,7 +124,7 @@ public async Task GetTicketsCategories() RequestOptionBuilder.CreateAutoPagingRequestOption(false), ResponseBehaviourBuilder.CreateEmpty(), cancellationToken - ).WithCancellation(cancellationToken).ConfigureAwait(false); + ).ConfigureAwait(false); await foreach (var category in categories) { @@ -155,7 +155,7 @@ public async Task CreateTicket(string contact, string? user) Statuses = new List { "statuses_62726da982f92110000280" }, CustomFields = new CustomFields { - ["pps_conversation_id"] = new[] { "123" }, + ["pps_conversation_id"] = ["123"], } }; @@ -217,8 +217,8 @@ public async Task CreateTicketActivity(int ticketId, string? user, string fileUr Description = "Text komentáře", Action = EAction.Open, User = user, - AddFiles = new[] - { + AddFiles = + [ // this part does not work for comments... new CreateFile { @@ -226,8 +226,8 @@ public async Task CreateTicketActivity(int ticketId, string? user, string fileUr FileName = fileName, Size = streamLength, Type = null, - } - } + }, + ] }; var activity = await activityEndpoint.CreateActivityAsync(createActivity, cancellationToken); @@ -268,16 +268,16 @@ public async Task CreateTicketActivityThroughTicket(int ticketId, string fileUrl var updateTicket = originalTicket.ToUpdateTicket(); updateTicket.Comment = $"Text komentáře {DateTime.Now.Date}"; - updateTicket.AddFiles = new[] - { + updateTicket.AddFiles = + [ new CreateFile { FileIdentifier = fileIdentifier, FileName = fileName, Size = streamLength, Type = null, - } - }; + }, + ]; var updatedTicket = await ticketEndpoint.UpdateTicketAsync(ticketId, updateTicket, cancellationToken); Assert.NotNull(updatedTicket); diff --git a/tests/Daktela.HttpClient.Tests/JsonConverters/CustomFieldsConverterTests.cs b/tests/Daktela.HttpClient.Tests/JsonConverters/CustomFieldsConverterTests.cs index ef80470..6c51ea9 100644 --- a/tests/Daktela.HttpClient.Tests/JsonConverters/CustomFieldsConverterTests.cs +++ b/tests/Daktela.HttpClient.Tests/JsonConverters/CustomFieldsConverterTests.cs @@ -32,7 +32,7 @@ public async Task DeserializeEmptyWorks() var parsedObject = await JsonSerializer.DeserializeAsync(memoryStream, _jsonSerializerOptions); Assert.NotNull(parsedObject); - Assert.Null(parsedObject!.CustomFields); + Assert.Null(parsedObject.CustomFields); Assert.Null(parsedObject.NullableCustomFields); } @@ -41,7 +41,7 @@ public async Task DeserializeEmptyAsArrayWorks() { await using var memoryStream = new MemoryStream(); await using var streamWriter = new StreamWriter(memoryStream, leaveOpen: true); - await streamWriter.WriteAsync(@"{""custom-fields"":[],""nullable-custom-fields"":[]}"); + await streamWriter.WriteAsync( /* lang=json */"""{"custom-fields":[],"nullable-custom-fields":[]}"""); await streamWriter.FlushAsync(); streamWriter.Close(); @@ -50,7 +50,7 @@ public async Task DeserializeEmptyAsArrayWorks() var parsedObject = await JsonSerializer.DeserializeAsync(memoryStream, _jsonSerializerOptions); Assert.NotNull(parsedObject); - Assert.Empty(Assert.IsType(parsedObject!.CustomFields)); + Assert.Empty(Assert.IsType(parsedObject.CustomFields)); Assert.Empty(Assert.IsType(parsedObject.NullableCustomFields)); } @@ -67,7 +67,7 @@ public async Task SerializeEmptyWorks() var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal(@"{""custom-fields"":null,""nullable-custom-fields"":null}", jsonContract); + Assert.Equal( /* lang=json */"""{"custom-fields":null,"nullable-custom-fields":null}""", jsonContract); } [Fact] @@ -75,7 +75,7 @@ public async Task DeserializeContractWorks() { await using var memoryStream = new MemoryStream(); await using var streamWriter = new StreamWriter(memoryStream, leaveOpen: true); - await streamWriter.WriteAsync(@"{""custom-fields"":{""A"":[""b""]},""nullable-custom-fields"":{""C"":[""d""]}}"); + await streamWriter.WriteAsync( /* lang=json */"""{"custom-fields":{"A":["b"]},"nullable-custom-fields":{"C":["d"]}}"""); await streamWriter.FlushAsync(); streamWriter.Close(); @@ -84,7 +84,7 @@ public async Task DeserializeContractWorks() var parsedObject = await JsonSerializer.DeserializeAsync(memoryStream, _jsonSerializerOptions); Assert.NotNull(parsedObject); - var customFields = Assert.IsType(parsedObject!.CustomFields); + var customFields = Assert.IsType(parsedObject.CustomFields); var nullableCustomFields = Assert.IsType(parsedObject.NullableCustomFields); Assert.Equal("b", Assert.Single(Assert.Single(customFields, x => x.Key == "A").Value)); Assert.Equal("d", Assert.Single(Assert.Single(nullableCustomFields, x => x.Key == "C").Value)); @@ -97,8 +97,8 @@ public async Task SerializeContractWorks() await JsonSerializer.SerializeAsync(memoryStream, new Contract { - CustomFields = new CustomFields { ["A"] = new[] { "b" } }, - NullableCustomFields = new CustomFields { ["C"] = new[] { "d" } }, + CustomFields = new CustomFields { ["A"] = ["b"] }, + NullableCustomFields = new CustomFields { ["C"] = ["d"] }, }, _jsonSerializerOptions); memoryStream.Seek(0, SeekOrigin.Begin); @@ -107,7 +107,7 @@ public async Task SerializeContractWorks() var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal(@"{""custom-fields"":{""A"":[""b""]},""nullable-custom-fields"":{""C"":[""d""]}}", jsonContract); + Assert.Equal( /* lang=json */"""{"custom-fields":{"A":["b"]},"nullable-custom-fields":{"C":["d"]}}""", jsonContract); } private class Contract diff --git a/tests/Daktela.HttpClient.Tests/JsonConverters/DateTimeOffsetConverterTests.cs b/tests/Daktela.HttpClient.Tests/JsonConverters/DateTimeOffsetConverterTests.cs index 38ee275..eb1d870 100644 --- a/tests/Daktela.HttpClient.Tests/JsonConverters/DateTimeOffsetConverterTests.cs +++ b/tests/Daktela.HttpClient.Tests/JsonConverters/DateTimeOffsetConverterTests.cs @@ -56,7 +56,7 @@ public async Task SerializeEmptyWorks() var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal(@"{""date-time"":""0001-01-01 00:00:00"",""nullable-date-time"":null}", jsonContract); + Assert.Equal( /* lang=json */"""{"date-time":"0001-01-01 00:00:00","nullable-date-time":null}""", jsonContract); } [Theory] @@ -68,7 +68,7 @@ public async Task DeserializeContractTimeSpanWorks(TimeSpan timeSpan) await using var memoryStream = new MemoryStream(); await using var streamWriter = new StreamWriter(memoryStream, leaveOpen: true); await streamWriter.WriteAsync( - @"{""date-time"":""2022-03-04 00:00:00"",""nullable-date-time"":""2022-03-04 00:00:00""}"); + /* lang=json */"""{"date-time":"2022-03-04 00:00:00","nullable-date-time":"2022-03-04 00:00:00"}"""); await streamWriter.FlushAsync(); streamWriter.Close(); @@ -92,7 +92,7 @@ public async Task DeserializeContractTimeZoneWorks(string timeZone) await using var memoryStream = new MemoryStream(); await using var streamWriter = new StreamWriter(memoryStream, leaveOpen: true); await streamWriter.WriteAsync( - @"{""date-time"":""2022-03-04 00:00:00"",""nullable-date-time"":""2022-03-04 00:00:00""}" + /* lang=json */"""{"date-time":"2022-03-04 00:00:00","nullable-date-time":"2022-03-04 00:00:00"}""" ); await streamWriter.FlushAsync(); streamWriter.Close(); @@ -127,7 +127,7 @@ public async Task SerializeContractTimeSpanWorks(TimeSpan timeSpan) var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal(@"{""date-time"":""2022-03-04 00:00:00"",""nullable-date-time"":""2022-03-04 00:00:00""}", + Assert.Equal( /* lang=json */"""{"date-time":"2022-03-04 00:00:00","nullable-date-time":"2022-03-04 00:00:00"}""", jsonContract); } @@ -155,7 +155,7 @@ public async Task SerializeContractTimeZoneWorks(string timeZone) Assert.NotNull(jsonContract); Assert.Equal( - @"{""date-time"":""2022-03-04 00:00:00"",""nullable-date-time"":""2022-03-04 00:00:00""}", + /* lang=json */ """{"date-time":"2022-03-04 00:00:00","nullable-date-time":"2022-03-04 00:00:00"}""", jsonContract ); } @@ -179,9 +179,9 @@ private class TimeSpans : IEnumerable { public IEnumerator GetEnumerator() { - yield return new object[] { TimeSpan.FromMinutes(-90) }; - yield return new object[] { TimeSpan.Zero }; - yield return new object[] { TimeSpan.FromMinutes(90) }; + yield return [TimeSpan.FromMinutes(-90)]; + yield return [TimeSpan.Zero]; + yield return [TimeSpan.FromMinutes(90)]; } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); @@ -191,18 +191,18 @@ private class TimeZones : IEnumerable { public IEnumerator GetEnumerator() { - yield return new object[] { "UTC" }; + yield return ["UTC"]; if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - yield return new object[] { "Central Europe Standard Time" }; - yield return new object[] { "Eastern Standard Time" }; + yield return ["Central Europe Standard Time"]; + yield return ["Eastern Standard Time"]; } if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) || RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { - yield return new object[] { "America/New_York" }; - yield return new object[] { "Europe/Prague" }; + yield return ["America/New_York"]; + yield return ["Europe/Prague"]; } } diff --git a/tests/Daktela.HttpClient.Tests/JsonConverters/EnumsConverterTests.cs b/tests/Daktela.HttpClient.Tests/JsonConverters/EnumsConverterTests.cs index 25ba1d8..7f0c440 100644 --- a/tests/Daktela.HttpClient.Tests/JsonConverters/EnumsConverterTests.cs +++ b/tests/Daktela.HttpClient.Tests/JsonConverters/EnumsConverterTests.cs @@ -32,7 +32,7 @@ public async Task DeserializeEmptyWorks() var parsedObject = await JsonSerializer.DeserializeAsync(memoryStream, _jsonSerializerOptions); Assert.NotNull(parsedObject); - Assert.Equal(default, parsedObject!.ExtensionState); + Assert.Equal(default, parsedObject.ExtensionState); Assert.Null(parsedObject.NullableExtensionState); } @@ -49,7 +49,7 @@ public async Task SerializeEmptyWorks() var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal(@"{""extension-state"":""online"",""nullable-extension-state"":null}", jsonContract); + Assert.Equal( /* lang=json */"""{"extension-state":"online","nullable-extension-state":null}""", jsonContract); } [Fact] @@ -57,7 +57,7 @@ public async Task DeserializeContractWorks() { await using var memoryStream = new MemoryStream(); await using var streamWriter = new StreamWriter(memoryStream, leaveOpen: true); - await streamWriter.WriteAsync(@"{""extension-state"":""offline"",""nullable-extension-state"":""busy""}"); + await streamWriter.WriteAsync( /* lang=json */"""{"extension-state":"offline","nullable-extension-state":"busy"}"""); await streamWriter.FlushAsync(); streamWriter.Close(); @@ -66,7 +66,7 @@ public async Task DeserializeContractWorks() var parsedObject = await JsonSerializer.DeserializeAsync(memoryStream, _jsonSerializerOptions); Assert.NotNull(parsedObject); - Assert.Equal(EExtensionState.Offline, parsedObject!.ExtensionState); + Assert.Equal(EExtensionState.Offline, parsedObject.ExtensionState); Assert.Equal(EExtensionState.Busy, parsedObject.NullableExtensionState); } @@ -87,7 +87,7 @@ public async Task SerializeContractWorks() var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal(@"{""extension-state"":""offline"",""nullable-extension-state"":""busy""}", jsonContract); + Assert.Equal( /* lang=json */"""{"extension-state":"offline","nullable-extension-state":"busy"}""", jsonContract); } private class Contract diff --git a/tests/Daktela.HttpClient.Tests/JsonConverters/TimeSpanConverterTests.cs b/tests/Daktela.HttpClient.Tests/JsonConverters/TimeSpanConverterTests.cs index 0ae2b92..16e029c 100644 --- a/tests/Daktela.HttpClient.Tests/JsonConverters/TimeSpanConverterTests.cs +++ b/tests/Daktela.HttpClient.Tests/JsonConverters/TimeSpanConverterTests.cs @@ -35,7 +35,7 @@ public async Task DeserializeEmptyWorks() var parsedObject = await JsonSerializer.DeserializeAsync(memoryStream, _jsonSerializerOptions); Assert.NotNull(parsedObject); - Assert.Equal(default, parsedObject!.TimeSpan); + Assert.Equal(default, parsedObject.TimeSpan); Assert.Null(parsedObject.NullableTimeSpan); } @@ -54,7 +54,7 @@ public async Task SerializeEmptyWorks() var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal(@"{""delay"":0,""nullable-delay"":null}", jsonContract); + Assert.Equal( /* lang=json */"""{"delay":0,"nullable-delay":null}""", jsonContract); } [Theory] @@ -65,7 +65,7 @@ public async Task DeserializeContractWorks(int input, TimeSpan timeSpan) await using var memoryStream = new MemoryStream(); await using var streamWriter = new StreamWriter(memoryStream, leaveOpen: true); - await streamWriter.WriteAsync($@"{{""delay"":{input},""nullable-delay"":{input}}}"); + await streamWriter.WriteAsync( /* lang=json */$$"""{"delay":{{input}},"nullable-delay":{{input}}}"""); await streamWriter.FlushAsync(); streamWriter.Close(); @@ -74,7 +74,7 @@ public async Task DeserializeContractWorks(int input, TimeSpan timeSpan) var parsedObject = await JsonSerializer.DeserializeAsync(memoryStream, _jsonSerializerOptions); Assert.NotNull(parsedObject); - Assert.Equal(timeSpan, parsedObject!.TimeSpan); + Assert.Equal(timeSpan, parsedObject.TimeSpan); Assert.Equal(timeSpan, parsedObject.NullableTimeSpan); } @@ -98,7 +98,7 @@ public async Task SerializeContractWorks(int input, TimeSpan timeSpan) var jsonContract = await streamReader.ReadToEndAsync(); Assert.NotNull(jsonContract); - Assert.Equal($@"{{""delay"":{input},""nullable-delay"":{input}}}", jsonContract); + Assert.Equal(/* lang=json */$$"""{"delay":{{input}},"nullable-delay":{{input}}}""", jsonContract); } private void AddTimeSpanConverter() @@ -110,8 +110,8 @@ private class TimeSpans : IEnumerable { public IEnumerator GetEnumerator() { - yield return new object[] { 0, TimeSpan.Zero }; - yield return new object[] { 90, TimeSpan.FromSeconds(90) }; + yield return [0, TimeSpan.Zero]; + yield return [90, TimeSpan.FromSeconds(90)]; } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); diff --git a/tests/Daktela.HttpClient.Tests/Requests/ContractValidationTests.cs b/tests/Daktela.HttpClient.Tests/Requests/ContractValidationTests.cs index d52c423..ae703ab 100644 --- a/tests/Daktela.HttpClient.Tests/Requests/ContractValidationTests.cs +++ b/tests/Daktela.HttpClient.Tests/Requests/ContractValidationTests.cs @@ -1,6 +1,7 @@ using Daktela.HttpClient.Attributes; using Daktela.HttpClient.Implementations; using System.ComponentModel.DataAnnotations; +using System.Diagnostics.CodeAnalysis; using System.Linq; using Xunit; @@ -65,6 +66,7 @@ private class Contract [DaktelaRequirement(EOperation.Create)] public string B { get; set; } = null!; + [SuppressMessage("ReSharper", "UnusedAutoPropertyAccessor.Local")] public string C { get; set; } = null!; } } diff --git a/tests/Daktela.HttpClient.Tests/Requests/FilterBuilderTests.cs b/tests/Daktela.HttpClient.Tests/Requests/FilterBuilderTests.cs index a69b807..9370ed2 100644 --- a/tests/Daktela.HttpClient.Tests/Requests/FilterBuilderTests.cs +++ b/tests/Daktela.HttpClient.Tests/Requests/FilterBuilderTests.cs @@ -71,10 +71,9 @@ public void SimpleEnumFilterInstanceWithWorks(EFilterOperator filterOperator) [InlineData(EFilterLogic.Or)] public void FilterGroupWorks(EFilterLogic filterLogic) { - var filter = FilterBuilder.WithGroupOfValue(filterLogic, new[] - { + var filter = FilterBuilder.WithGroupOfValue(filterLogic, [ FilterBuilder.WithValue(x => x.Name, EFilterOperator.Equal, "a value"), - }); + ]); var filterGroup = Assert.IsType(filter); Assert.Equal(filterLogic, filterGroup.Logic); @@ -91,10 +90,10 @@ public void FilterGroupWorks(EFilterLogic filterLogic) [InlineData(EFilterLogic.Or)] public void FilterGroupHybridInstanceWorks(EFilterLogic filterLogic) { - var filter = FilterBuilder.WithGroupOfValue(filterLogic, b => new[] - { + var filter = FilterBuilder.WithGroupOfValue(filterLogic, b => + [ b.WithValue(x => x.Name, EFilterOperator.Equal, "a value"), - }); + ]); var filterGroup = Assert.IsType(filter); Assert.Equal(filterLogic, filterGroup.Logic); @@ -111,10 +110,10 @@ public void FilterGroupHybridInstanceWorks(EFilterLogic filterLogic) [InlineData(EFilterLogic.Or)] public void FilterGroupInstanceWorks(EFilterLogic filterLogic) { - var filter = new FilterBuilderInstance().WithGroupOfValue(filterLogic, b => new[] - { + var filter = new FilterBuilderInstance().WithGroupOfValue(filterLogic, b => + [ b.WithValue(x => x.Name, EFilterOperator.Equal, "a value"), - }); + ]); var filterGroup = Assert.IsType(filter); Assert.Equal(filterLogic, filterGroup.Logic); @@ -131,10 +130,10 @@ public void FilterGroupInstanceWorks(EFilterLogic filterLogic) [InlineData(EFilterLogic.Or)] public void FilterGroupInstanceWorks_LinqSelect(EFilterLogic filterLogic) { - var filter = new FilterBuilderInstance().WithGroupOfValue(filterLogic, b => new[] - { + var filter = new FilterBuilderInstance().WithGroupOfValue(filterLogic, b => + [ b.WithValue(x => x.Activities.Select(a => a.Ticket.Name), EFilterOperator.Equal, "a value"), - }); + ]); var filterGroup = Assert.IsType(filter); Assert.Equal(filterLogic, filterGroup.Logic); diff --git a/tests/Daktela.HttpClient.Tests/Requests/HttpRequestFactoryTests.cs b/tests/Daktela.HttpClient.Tests/Requests/HttpRequestFactoryTests.cs index f75fff5..32cf7d8 100644 --- a/tests/Daktela.HttpClient.Tests/Requests/HttpRequestFactoryTests.cs +++ b/tests/Daktela.HttpClient.Tests/Requests/HttpRequestFactoryTests.cs @@ -39,12 +39,16 @@ public void FieldingWorks() using var httpRequestMessage = _httpRequestFactory.CreateHttpRequestMessage( HttpMethod.Get, DaktelaContractPath, - request: RequestBuilder.CreateFields(new Fields(new[] { "name" })) + request: RequestBuilder.CreateFields(new Fields(["name"])) ); Assert.Equal(HttpMethod.Get, httpRequestMessage.Method); Assert.NotNull(httpRequestMessage.RequestUri); +#if NET9_0_OR_GREATER + Assert.Equal($"{DaktelaUrl}/{DaktelaContractPath}?fields%5b0%5d=name&accessToken={AccessToken}", httpRequestMessage.RequestUri!.ToString()); +#else Assert.Equal($"{DaktelaUrl}/{DaktelaContractPath}?fields[0]=name&accessToken={AccessToken}", httpRequestMessage.RequestUri!.ToString()); +#endif } [Fact] @@ -72,7 +76,11 @@ public void SortingWorks() Assert.Equal(HttpMethod.Get, httpRequestMessage.Method); Assert.NotNull(httpRequestMessage.RequestUri); +#if NET9_0_OR_GREATER + Assert.Equal($"{DaktelaUrl}/{DaktelaContractPath}?sort%5b0%5d%5bdir%5d=asc&sort%5b0%5d%5bfield%5d=edited&accessToken={AccessToken}", httpRequestMessage.RequestUri!.ToString()); +#else Assert.Equal($"{DaktelaUrl}/{DaktelaContractPath}?sort[0][dir]=asc&sort[0][field]=edited&accessToken={AccessToken}", httpRequestMessage.RequestUri!.ToString()); +#endif } [Fact] @@ -86,10 +94,17 @@ public void FilteringWorks() Assert.Equal(HttpMethod.Get, httpRequestMessage.Method); Assert.NotNull(httpRequestMessage.RequestUri); +#if NET9_0_OR_GREATER + Assert.Equal( + $"{DaktelaUrl}/{DaktelaContractPath}?filter%5bfield%5d=contact&filter%5boperator%5d=eq&filter%5bvalue%5d=a+value&accessToken={AccessToken}", + httpRequestMessage.RequestUri!.ToString() + ); +#else Assert.Equal( $"{DaktelaUrl}/{DaktelaContractPath}?filter[field]=contact&filter[operator]=eq&filter[value]=a+value&accessToken={AccessToken}", httpRequestMessage.RequestUri!.ToString() ); +#endif } [Fact] @@ -103,10 +118,17 @@ public void FilteringEscapedWorks() Assert.Equal(HttpMethod.Get, httpRequestMessage.Method); Assert.NotNull(httpRequestMessage.RequestUri); +#if NET9_0_OR_GREATER + Assert.Equal( + $"{DaktelaUrl}/{DaktelaContractPath}?filter%5bfield%5d=contact&filter%5boperator%5d=eq&filter%5bvalue%5d=a%2bvalue&accessToken={AccessToken}", + httpRequestMessage.RequestUri!.ToString() + ); +#else Assert.Equal( $"{DaktelaUrl}/{DaktelaContractPath}?filter[field]=contact&filter[operator]=eq&filter[value]=a%2bvalue&accessToken={AccessToken}", httpRequestMessage.RequestUri!.ToString() ); +#endif } [Fact] @@ -115,15 +137,23 @@ public void ComplexFilteringWorks() using var httpRequestMessage = _httpRequestFactory.CreateHttpRequestMessage( HttpMethod.Get, DaktelaContractPath, - request: RequestBuilder.CreateFiltering(new FilterGroup(EFilterLogic.And, new[] - { + request: RequestBuilder.CreateFiltering(new FilterGroup(EFilterLogic.And, [ new Filter("name", EFilterOperator.Equal, "Johan"), - new Filter("email", EFilterOperator.EndsWith, "@gmail.com") - })) + new Filter("email", EFilterOperator.EndsWith, "@gmail.com"), + ])) ); Assert.Equal(HttpMethod.Get, httpRequestMessage.Method); Assert.NotNull(httpRequestMessage.RequestUri); +#if NET9_0_OR_GREATER + Assert.Equal( + $"{DaktelaUrl}/{DaktelaContractPath}?filter%5blogic%5d=and" + + "&filter%5bfilters%5d%5b0%5d%5bfield%5d=name&filter%5bfilters%5d%5b0%5d%5boperator%5d=eq&filter%5bfilters%5d%5b0%5d%5bvalue%5d=Johan" + + "&filter%5bfilters%5d%5b1%5d%5bfield%5d=email&filter%5bfilters%5d%5b1%5d%5boperator%5d=endswith&filter%5bfilters%5d%5b1%5d%5bvalue%5d=%40gmail.com" + + $"&accessToken={AccessToken}", + httpRequestMessage.RequestUri!.ToString() + ); +#else Assert.Equal( $"{DaktelaUrl}/{DaktelaContractPath}?filter[logic]=and" + "&filter[filters][0][field]=name&filter[filters][0][operator]=eq&filter[filters][0][value]=Johan" @@ -131,5 +161,6 @@ public void ComplexFilteringWorks() + $"&accessToken={AccessToken}", httpRequestMessage.RequestUri!.ToString() ); +#endif } } diff --git a/tests/Daktela.HttpClient.Tests/Requests/RequestBuilderTests.cs b/tests/Daktela.HttpClient.Tests/Requests/RequestBuilderTests.cs index 2deb210..26ea09b 100644 --- a/tests/Daktela.HttpClient.Tests/Requests/RequestBuilderTests.cs +++ b/tests/Daktela.HttpClient.Tests/Requests/RequestBuilderTests.cs @@ -1,7 +1,6 @@ using Daktela.HttpClient.Api.Requests; using Daktela.HttpClient.Implementations; using Daktela.HttpClient.Interfaces.Queries; -using Daktela.HttpClient.Interfaces.Requests; using System; using System.Diagnostics.CodeAnalysis; using Xunit; diff --git a/tests/Daktela.HttpClient.Tests/ResponseProcessors/PagedResponseProcessorTests.cs b/tests/Daktela.HttpClient.Tests/ResponseProcessors/PagedResponseProcessorTests.cs index d7693fe..bd3b104 100644 --- a/tests/Daktela.HttpClient.Tests/ResponseProcessors/PagedResponseProcessorTests.cs +++ b/tests/Daktela.HttpClient.Tests/ResponseProcessors/PagedResponseProcessorTests.cs @@ -140,7 +140,7 @@ var item in _pagedResponseProcessor.InvokeAsync( Assert.All(processRequestHooksResponseBehaviour.BeforePages, paging => { Assert.NotNull(paging); - Assert.Equal(take, paging!.Take); + Assert.Equal(take, paging.Take); pageSkips.Add(paging.Skip); });