Beispiel #1
0
        public void ReadTopLevelErrorWithCollectionResourceValueInstanceAnnotation_Works()
        {
            // Arrange
            const string payload =
                @"{""error"":{""code"":"""",""message"":"""","
                + @"""*****@*****.**"":""Collection(NS.Entity)"",""@sample.error"":[{""@odata.type"":""#NS.Entity"",""Sample"":""sample value""}]}}";
            var context      = CreateJsonLightInputContext(payload, GetEdmModel());
            var deserializer = new ODataJsonLightErrorDeserializer(context);

            // Act
            var error = deserializer.ReadTopLevelError();

            // Assert
            Assert.NotNull(error.InstanceAnnotations);
            var annotation = Assert.Single(error.InstanceAnnotations);

            Assert.Equal("sample.error", annotation.Name);
            Assert.NotNull(annotation.Value);
            var collection = Assert.IsType <ODataCollectionValue>(annotation.Value);

            Assert.Equal("Collection(NS.Entity)", collection.TypeName);
            Assert.NotNull(collection.Items);
            var item  = Assert.Single(collection.Items);
            var value = Assert.IsType <ODataResourceValue>(item);

            Assert.Equal("NS.Entity", value.TypeName);
            Assert.NotNull(value.Properties);
            var property = Assert.Single(value.Properties);

            Assert.Equal("Sample", property.Name);
            Assert.Equal("sample value", property.Value);
        }
Beispiel #2
0
        private async Task SetupJsonLightErrorDeserializerAndRunTestAsync(
            string payload,
            Func <ODataJsonLightErrorDeserializer, Task> func,
            IEdmModel model = null)
        {
            using (var jsonLightInputContext = CreateJsonLightInputContext(payload, model, isAsync: true))
            {
                var jsonLightErrorDeserializer = new ODataJsonLightErrorDeserializer(jsonLightInputContext);

                await func(jsonLightErrorDeserializer);
            }
        }
Beispiel #3
0
        public void ReadErrorWithCollectionInInnerError()
        {
            // Arrange
            const string payload = "{\"error\":{\"code\":\"\",\"message\":\"\",\"target\":\"any target\",\"details\":[{\"code\":\"500\",\"target\":\"any target\",\"message\":\"any msg\"}],\"innererror\":{\"message\":\"\",\"type\":\"\",\"stacktrace\":\"\",\"ResourceValue\":{\"PropertyName\":\"PropertyValue\",\"NullProperty\":null},\"NullProperty\":null,\"CollectionValue\":[null,\"CollectionValue\",1]}}}";

            var context      = CreateJsonLightInputContext(payload, GetEdmModel());
            var deserializer = new ODataJsonLightErrorDeserializer(context);

            // Act
            var error = deserializer.ReadTopLevelError();

            //Assert Inner Error properties
            Assert.NotNull(error.InnerError);
            Assert.True(error.InnerError.Properties.ContainsKey("CollectionValue"));
            Assert.Equal(3, (error.InnerError.Properties["CollectionValue"] as ODataCollectionValue).Items.Count());
        }
Beispiel #4
0
        public void ReadTopLevelError_Works()
        {
            // Arrange
            const string payload =
                @"{""error"":{""code"":"""",""message"":"""",""target"":""any target"","
                + @"""details"":[{""code"":""500"",""target"":""another target"",""message"":""any msg""}]}}";
            var context      = CreateJsonLightInputContext(payload);
            var deserializer = new ODataJsonLightErrorDeserializer(context);

            // Act
            var error = deserializer.ReadTopLevelError();

            // Assert
            Assert.Equal("any target", error.Target);
            Assert.Equal(1, error.Details.Count);
            var detail = error.Details.Single();

            Assert.Equal("500", detail.ErrorCode);
            Assert.Equal("another target", detail.Target);
            Assert.Equal("any msg", detail.Message);
        }
Beispiel #5
0
        public void ReadExtendedInnerError()
        {
            // Arrange
            const string payload =
                "{\"error\":{" +
                "\"code\":\"\",\"message\":\"\"," +
                "\"target\":\"any target\"," +
                "\"details\":[{\"code\":\"500\",\"target\":\"any target\",\"message\":\"any msg\"}]," +
                "\"innererror\":{" +
                "\"stacktrace\":\"NormalString\"," +
                "\"message\":\"\"," +
                "\"type\":\"\"," +
                "\"innererror\":{" +
                "\"stacktrace\":\"InnerError\"," +
                "\"MyNewObject\":{" +
                "\"StringProperty\":\"newProperty\"," +
                "\"IntProperty\": 1," +
                "\"BooleanProperty\": true," +
                "\"type\":\"\"," +
                "\"NestedNull\":{" +
                "\"InnerMostPropertyName\":\"InnerMostPropertyValue\"," +
                "\"InnerMostNull\":null" +
                "}" +
                "}" +
                "}" +
                "}" +
                "}}";

            var context      = CreateJsonLightInputContext(payload, GetEdmModel());
            var deserializer = new ODataJsonLightErrorDeserializer(context);

            // Act
            var error = deserializer.ReadTopLevelError();

            // Assert Top Level properties
            Assert.Equal("any target", error.Target);
            Assert.Equal(1, error.Details.Count);
            var detail = error.Details.Single();

            Assert.Equal("500", detail.ErrorCode);
            Assert.Equal("any target", detail.Target);
            Assert.Equal("any msg", detail.Message);

            //Assert Inner Error properties
            Assert.NotNull(error.InnerError);
            Assert.True(error.InnerError.Properties.ContainsKey("innererror"));
            var objectValue =
                (error.InnerError.Properties["innererror"] as ODataResourceValue).Properties
                .FirstOrDefault(p => p.Name == "MyNewObject").ODataValue as ODataResourceValue;

            Assert.NotNull(objectValue);

            ODataResourceValue nestedInnerObject = error.InnerError.Properties["innererror"] as ODataResourceValue;
            ODataResourceValue nestedMyNewObject = nestedInnerObject.Properties.FirstOrDefault(p => p.Name == "MyNewObject").ODataValue as ODataResourceValue;

            Assert.Equal(5, nestedMyNewObject.Properties.Count());
            Assert.Equal("StringProperty", nestedMyNewObject.Properties.ElementAt(0).Name);
            Assert.Equal("newProperty", nestedMyNewObject.Properties.ElementAt(0).Value);

            Assert.Equal("IntProperty", nestedMyNewObject.Properties.ElementAt(1).Name);
            Assert.Equal(1, nestedMyNewObject.Properties.ElementAt(1).Value);

            Assert.Equal("BooleanProperty", nestedMyNewObject.Properties.ElementAt(2).Name);
            Assert.Equal(true, nestedMyNewObject.Properties.ElementAt(2).Value);

            Assert.Equal("type", nestedMyNewObject.Properties.ElementAt(3).Name);
            Assert.Equal("", nestedMyNewObject.Properties.ElementAt(3).Value);

            Assert.Equal("NestedNull", nestedMyNewObject.Properties.ElementAt(4).Name);

            ODataResourceValue innerValue = nestedMyNewObject.Properties.ElementAt(4).Value as ODataResourceValue;

            Assert.NotNull(innerValue);

            Assert.Equal(2, innerValue.Properties.Count());
            Assert.Equal("InnerMostPropertyName", innerValue.Properties.ElementAt(0).Name);
            Assert.Equal("InnerMostPropertyValue", innerValue.Properties.ElementAt(0).Value);

            Assert.Equal("InnerMostNull", innerValue.Properties.ElementAt(1).Name);
            Assert.Null(innerValue.Properties.ElementAt(1).Value);
        }