using System.Net.Http; using System.Text; using System.Text.Json; using System.Threading.Tasks; using CleanArchitecture.Api.Models; namespace CleanArchitecture.IntegrationTests.Extensions; public static class HttpExtensions { private static readonly JsonSerializerOptions JsonSerializerOptions = new() { PropertyNameCaseInsensitive = true, }; private static T? Deserialize(string json) { if (string.IsNullOrWhiteSpace(json)) { return default; } return JsonSerializer.Deserialize(json, JsonSerializerOptions); } private static string Serialize(T data) { return JsonSerializer.Serialize(data, JsonSerializerOptions); } public static async Task?> ReadAsJsonAsync(this HttpContent httpContent) { var stringContent = await httpContent.ReadAsStringAsync(); return Deserialize>(stringContent); } public static Task PatchAsJsonAsync(this HttpClient httpClient, string url, T data) { var content = new StringContent(Serialize(data), Encoding.UTF8, "application/json"); return httpClient.PatchAsync(url, content); } public static Task PostAsJsonAsync(this HttpClient httpClient, string url, T data) { var content = new StringContent(Serialize(data), Encoding.UTF8, "application/json"); return httpClient.PostAsync(url, content); } public static Task PutAsJsonAsync(this HttpClient httpClient, string url, T data) { var content = new StringContent(Serialize(data), Encoding.UTF8, "application/json"); return httpClient.PutAsync(url, content); } }