/
HttpClientExtensions.cs
42 lines (37 loc) · 1.38 KB
/
HttpClientExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System.Text.Json;
using Xunit.Abstractions;
namespace SimpleApi.Tests.Utilities;
public static class HttpClientExtensions
{
private static readonly JsonSerializerOptions PrettyJsonOptions = new()
{
WriteIndented = true
};
private static readonly JsonSerializerOptions JsonWebOptions = new (JsonSerializerDefaults.Web);
public static async Task<T> GetJsonResultAsync<T>(this HttpClient client, string uri,
HttpStatusCode expectedHttpStatus, ITestOutputHelper? output = null)
{
var response = await client.GetAsync(uri);
Assert.Equal(expectedHttpStatus, response.StatusCode);
var stringContent = await response.Content.ReadAsStringAsync();
try
{
var result = JsonSerializer.Deserialize<T>(stringContent, JsonWebOptions);
Assert.NotNull(result);
return result;
}
catch (Exception)
{
if (output != null) WriteJsonMessage(stringContent, output);
throw;
}
}
public static void WriteJsonMessage(string json, ITestOutputHelper output)
{
var jsonObject = JsonDocument.Parse(json);
var jsonOutput = JsonSerializer.Serialize(jsonObject, PrettyJsonOptions);
output.WriteLine("---- JSON response ----");
output.WriteLine(jsonOutput);
output.WriteLine("-----------------------");
}
}