Esempio n. 1
0
    public void WriteUsingJsonSerializerOptionsWorks()
    {
        var errors = new Dictionary <string, string[]>()
        {
            { "Property", new string[] { "error0" } },
            { "TwoWords", new string[] { "error1" } },
            { "TopLevelProperty.PropertyName", new string[] { "error2" } },
        };
        var problemDetails = new ValidationProblemDetails(errors)
        {
            Title  = "One or more validation errors occurred.",
            Status = 400
        };

        // Act
        var converter = new ValidationProblemDetailsJsonConverter();

        using MemoryStream stream   = new();
        using Utf8JsonWriter writer = new(stream);

        var options = new JsonOptions().JsonSerializerOptions;

        options.DictionaryKeyPolicy = JsonNamingPolicy.CamelCase;

        converter.Write(writer, problemDetails, options);

        writer.Flush();
        var json = Encoding.UTF8.GetString(stream.ToArray());

        var expectedJSON = $"{{\"title\":\"{problemDetails.Title}\",\"status\":{problemDetails.Status}," +
                           "\"errors\":{\"property\":[\"error0\"],\"twoWords\":[\"error1\"],\"topLevelProperty.PropertyName\":[\"error2\"]}}";

        Assert.NotNull(json);
        Assert.Equal(expectedJSON, json);
    }
Esempio n. 2
0
    public void WriteWorks()
    {
        var problemDetails = new ValidationProblemDetails(new Dictionary <string, string[]>()
        {
            { "Property", new string[] { "error0" } }
        })
        {
            Title  = "One or more validation errors occurred.",
            Status = 400
        };

        var converter = new ValidationProblemDetailsJsonConverter();

        using MemoryStream stream   = new();
        using Utf8JsonWriter writer = new(stream);

        // Act
        converter.Write(writer, problemDetails, null);

        writer.Flush();
        var json = Encoding.UTF8.GetString(stream.ToArray());

        var expectedJSON = $"{{\"title\":\"{problemDetails.Title}\",\"status\":{problemDetails.Status}," +
                           "\"errors\":{\"Property\":[\"error0\"]}}";

        Assert.NotNull(json);
        Assert.Equal(expectedJSON, json);
    }
Esempio n. 3
0
        public void Write_Works()
        {
            // Arrange
            var traceId = "|37dd3dd5-4a9619f953c40a16.";
            var value   = new ValidationProblemDetails(new Dictionary <string, IEnumerable <string> >
            {
                { "Property0", new [] { "error0" } },
                { "Property1", new [] { "error1", "error2" } }
            })
            {
                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 = new Dictionary <string, object>
                {
                    { "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\"],\"errors\":{{\"property0\":[\"error0\"],\"property1\":[\"error1\",\"error2\"]}}}}";
            var converter = new ValidationProblemDetailsJsonConverter();
            var stream    = new MemoryStream();

            // Act
            using (var writer = new Utf8JsonWriter(stream))
            {
                converter.Write(writer, value, JsonSerializerOptions);
            }

            // Assert
            var actual = Encoding.UTF8.GetString(stream.ToArray());

            actual.Should().Be(expected);
        }
        public void Write_WithSomeMissingContent_Works()
        {
            // Arrange
            var value = new ValidationProblemDetails
            {
                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},\"errors\":{{}}}}";
            var converter = new ValidationProblemDetailsJsonConverter();
            var stream    = new MemoryStream();

            // Act
            using (var writer = new Utf8JsonWriter(stream))
            {
                converter.Write(writer, value, JsonSerializerOptions);
            }

            // Assert
            var actual = Encoding.UTF8.GetString(stream.ToArray());

            actual.Should().Be(expected);
        }