diff options
Diffstat (limited to 'src/Http/Http.Extensions/test/ProblemDetailsJsonConverterTest.cs')
-rw-r--r-- | src/Http/Http.Extensions/test/ProblemDetailsJsonConverterTest.cs | 295 |
1 files changed, 147 insertions, 148 deletions
diff --git a/src/Http/Http.Extensions/test/ProblemDetailsJsonConverterTest.cs b/src/Http/Http.Extensions/test/ProblemDetailsJsonConverterTest.cs index 94feff570e..76b0c99b85 100644 --- a/src/Http/Http.Extensions/test/ProblemDetailsJsonConverterTest.cs +++ b/src/Http/Http.Extensions/test/ProblemDetailsJsonConverterTest.cs @@ -8,173 +8,172 @@ using Microsoft.AspNetCore.Http.Json; using Microsoft.AspNetCore.Mvc; using Xunit; -namespace Microsoft.AspNetCore.Http.Extensions +namespace Microsoft.AspNetCore.Http.Extensions; + +public class ProblemDetailsJsonConverterTest { - public class ProblemDetailsJsonConverterTest + private static JsonSerializerOptions JsonSerializerOptions => new JsonOptions().SerializerOptions; + + [Fact] + public void Read_ThrowsIfJsonIsIncomplete() { - private static JsonSerializerOptions JsonSerializerOptions => new JsonOptions().SerializerOptions; + // Arrange + var json = "{"; + var converter = new ProblemDetailsJsonConverter(); - [Fact] - public void Read_ThrowsIfJsonIsIncomplete() + // Act & Assert + var ex = Record.Exception(() => { - // Arrange - var json = "{"; - var converter = new ProblemDetailsJsonConverter(); + var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes(json)); + converter.Read(ref reader, typeof(ProblemDetails), JsonSerializerOptions); + }); + Assert.IsAssignableFrom<JsonException>(ex); + } - // Act & Assert - var ex = Record.Exception(() => + [Fact] + public void Read_Works() + { + // Arrange + var type = "https://tools.ietf.org/html/rfc7231#section-6.5.4"; + var title = "Not found"; + var status = 404; + var detail = "Product not found"; + var instance = "http://example.com/products/14"; + var traceId = "|37dd3dd5-4a9619f953c40a16."; + var json = $"{{\"type\":\"{type}\",\"title\":\"{title}\",\"status\":{status},\"detail\":\"{detail}\", \"instance\":\"{instance}\",\"traceId\":\"{traceId}\"}}"; + var converter = new ProblemDetailsJsonConverter(); + var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes(json)); + reader.Read(); + + // Act + var problemDetails = converter.Read(ref reader, typeof(ProblemDetails), JsonSerializerOptions); + + Assert.Equal(type, problemDetails.Type); + Assert.Equal(title, problemDetails.Title); + Assert.Equal(status, problemDetails.Status); + Assert.Equal(instance, problemDetails.Instance); + Assert.Equal(detail, problemDetails.Detail); + Assert.Collection( + problemDetails.Extensions, + kvp => { - var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes(json)); - converter.Read(ref reader, typeof(ProblemDetails), JsonSerializerOptions); + Assert.Equal("traceId", kvp.Key); + Assert.Equal(traceId, kvp.Value.ToString()); }); - Assert.IsAssignableFrom<JsonException>(ex); - } - - [Fact] - public void Read_Works() - { - // Arrange - var type = "https://tools.ietf.org/html/rfc7231#section-6.5.4"; - var title = "Not found"; - var status = 404; - var detail = "Product not found"; - var instance = "http://example.com/products/14"; - var traceId = "|37dd3dd5-4a9619f953c40a16."; - var json = $"{{\"type\":\"{type}\",\"title\":\"{title}\",\"status\":{status},\"detail\":\"{detail}\", \"instance\":\"{instance}\",\"traceId\":\"{traceId}\"}}"; - var converter = new ProblemDetailsJsonConverter(); - var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes(json)); - reader.Read(); - - // Act - var problemDetails = converter.Read(ref reader, typeof(ProblemDetails), JsonSerializerOptions); - - Assert.Equal(type, problemDetails.Type); - Assert.Equal(title, problemDetails.Title); - Assert.Equal(status, problemDetails.Status); - Assert.Equal(instance, problemDetails.Instance); - Assert.Equal(detail, problemDetails.Detail); - Assert.Collection( - problemDetails.Extensions, - kvp => - { - Assert.Equal("traceId", kvp.Key); - Assert.Equal(traceId, kvp.Value.ToString()); - }); - } - - [Fact] - public void Read_UsingJsonSerializerWorks() - { - // Arrange - var type = "https://tools.ietf.org/html/rfc7231#section-6.5.4"; - var title = "Not found"; - var status = 404; - var detail = "Product not found"; - var instance = "http://example.com/products/14"; - var traceId = "|37dd3dd5-4a9619f953c40a16."; - var json = $"{{\"type\":\"{type}\",\"title\":\"{title}\",\"status\":{status},\"detail\":\"{detail}\", \"instance\":\"{instance}\",\"traceId\":\"{traceId}\"}}"; - - // Act - var problemDetails = JsonSerializer.Deserialize<ProblemDetails>(json, JsonSerializerOptions); - - Assert.Equal(type, problemDetails.Type); - Assert.Equal(title, problemDetails.Title); - Assert.Equal(status, problemDetails.Status); - Assert.Equal(instance, problemDetails.Instance); - Assert.Equal(detail, problemDetails.Detail); - Assert.Collection( - problemDetails.Extensions, - kvp => - { - Assert.Equal("traceId", kvp.Key); - Assert.Equal(traceId, kvp.Value.ToString()); - }); - } - - [Fact] - public void Read_WithSomeMissingValues_Works() - { - // Arrange - var type = "https://tools.ietf.org/html/rfc7231#section-6.5.4"; - var title = "Not found"; - var status = 404; - var traceId = "|37dd3dd5-4a9619f953c40a16."; - var json = $"{{\"type\":\"{type}\",\"title\":\"{title}\",\"status\":{status},\"traceId\":\"{traceId}\"}}"; - var converter = new ProblemDetailsJsonConverter(); - var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes(json)); - reader.Read(); + } - // Act - var problemDetails = converter.Read(ref reader, typeof(ProblemDetails), JsonSerializerOptions); + [Fact] + public void Read_UsingJsonSerializerWorks() + { + // Arrange + var type = "https://tools.ietf.org/html/rfc7231#section-6.5.4"; + var title = "Not found"; + var status = 404; + var detail = "Product not found"; + var instance = "http://example.com/products/14"; + var traceId = "|37dd3dd5-4a9619f953c40a16."; + var json = $"{{\"type\":\"{type}\",\"title\":\"{title}\",\"status\":{status},\"detail\":\"{detail}\", \"instance\":\"{instance}\",\"traceId\":\"{traceId}\"}}"; + + // Act + var problemDetails = JsonSerializer.Deserialize<ProblemDetails>(json, JsonSerializerOptions); + + Assert.Equal(type, problemDetails.Type); + Assert.Equal(title, problemDetails.Title); + Assert.Equal(status, problemDetails.Status); + Assert.Equal(instance, problemDetails.Instance); + Assert.Equal(detail, problemDetails.Detail); + Assert.Collection( + problemDetails.Extensions, + kvp => + { + Assert.Equal("traceId", kvp.Key); + Assert.Equal(traceId, kvp.Value.ToString()); + }); + } - Assert.Equal(type, problemDetails.Type); - Assert.Equal(title, problemDetails.Title); - Assert.Equal(status, problemDetails.Status); - Assert.Collection( - problemDetails.Extensions, - kvp => - { - Assert.Equal("traceId", kvp.Key); - Assert.Equal(traceId, kvp.Value.ToString()); - }); - } + [Fact] + public void Read_WithSomeMissingValues_Works() + { + // Arrange + var type = "https://tools.ietf.org/html/rfc7231#section-6.5.4"; + var title = "Not found"; + var status = 404; + var traceId = "|37dd3dd5-4a9619f953c40a16."; + var json = $"{{\"type\":\"{type}\",\"title\":\"{title}\",\"status\":{status},\"traceId\":\"{traceId}\"}}"; + var converter = new ProblemDetailsJsonConverter(); + var reader = new Utf8JsonReader(Encoding.UTF8.GetBytes(json)); + reader.Read(); + + // Act + var problemDetails = converter.Read(ref reader, typeof(ProblemDetails), JsonSerializerOptions); + + Assert.Equal(type, problemDetails.Type); + Assert.Equal(title, problemDetails.Title); + Assert.Equal(status, problemDetails.Status); + Assert.Collection( + problemDetails.Extensions, + kvp => + { + Assert.Equal("traceId", kvp.Key); + Assert.Equal(traceId, kvp.Value.ToString()); + }); + } - [Fact] - public void Write_Works() + [Fact] + public void Write_Works() + { + // Arrange + var traceId = "|37dd3dd5-4a9619f953c40a16."; + var value = new ProblemDetails { - // Arrange - var traceId = "|37dd3dd5-4a9619f953c40a16."; - var value = new ProblemDetails - { - Title = "Not found", - Type = "https://tools.ietf.org/html/rfc7231#section-6.5.4", - Status = 404, - Detail = "Product not found", - Instance = "http://example.com/products/14", - Extensions = + Title = "Not found", + Type = "https://tools.ietf.org/html/rfc7231#section-6.5.4", + Status = 404, + Detail = "Product not found", + Instance = "http://example.com/products/14", + Extensions = { { "traceId", traceId }, { "some-data", new[] { "value1", "value2" } } } - }; - var expected = $"{{\"type\":\"{JsonEncodedText.Encode(value.Type)}\",\"title\":\"{value.Title}\",\"status\":{value.Status},\"detail\":\"{value.Detail}\",\"instance\":\"{JsonEncodedText.Encode(value.Instance)}\",\"traceId\":\"{traceId}\",\"some-data\":[\"value1\",\"value2\"]}}"; - var converter = new ProblemDetailsJsonConverter(); - var stream = new MemoryStream(); + }; + var expected = $"{{\"type\":\"{JsonEncodedText.Encode(value.Type)}\",\"title\":\"{value.Title}\",\"status\":{value.Status},\"detail\":\"{value.Detail}\",\"instance\":\"{JsonEncodedText.Encode(value.Instance)}\",\"traceId\":\"{traceId}\",\"some-data\":[\"value1\",\"value2\"]}}"; + var converter = new ProblemDetailsJsonConverter(); + var stream = new MemoryStream(); - // Act - using (var writer = new Utf8JsonWriter(stream)) - { - converter.Write(writer, value, JsonSerializerOptions); - } - - // Assert - var actual = Encoding.UTF8.GetString(stream.ToArray()); - Assert.Equal(expected, actual); + // Act + using (var writer = new Utf8JsonWriter(stream)) + { + converter.Write(writer, value, JsonSerializerOptions); } - [Fact] - public void Write_WithSomeMissingContent_Works() - { - // Arrange - var value = new ProblemDetails - { - Title = "Not found", - Type = "https://tools.ietf.org/html/rfc7231#section-6.5.4", - Status = 404, - }; - var expected = $"{{\"type\":\"{JsonEncodedText.Encode(value.Type)}\",\"title\":\"{value.Title}\",\"status\":{value.Status}}}"; - var converter = new ProblemDetailsJsonConverter(); - var stream = new MemoryStream(); - - // Act - using (var writer = new Utf8JsonWriter(stream)) - { - converter.Write(writer, value, JsonSerializerOptions); - } + // Assert + var actual = Encoding.UTF8.GetString(stream.ToArray()); + Assert.Equal(expected, actual); + } - // Assert - var actual = Encoding.UTF8.GetString(stream.ToArray()); - Assert.Equal(expected, actual); + [Fact] + public void Write_WithSomeMissingContent_Works() + { + // Arrange + var value = new ProblemDetails + { + Title = "Not found", + Type = "https://tools.ietf.org/html/rfc7231#section-6.5.4", + Status = 404, + }; + var expected = $"{{\"type\":\"{JsonEncodedText.Encode(value.Type)}\",\"title\":\"{value.Title}\",\"status\":{value.Status}}}"; + var converter = new ProblemDetailsJsonConverter(); + var stream = new MemoryStream(); + + // Act + using (var writer = new Utf8JsonWriter(stream)) + { + converter.Write(writer, value, JsonSerializerOptions); } + + // Assert + var actual = Encoding.UTF8.GetString(stream.ToArray()); + Assert.Equal(expected, actual); } } |