public async Task ReadAsync_ThrowsArgumentNull_MessageReader()
        {
            // Arrange
            var deserializer = new ODataResourceSetDeserializer(_deserializerProvider);

            // Act & Assert
            await ExceptionAssert.ThrowsArgumentNullAsync(() => deserializer.ReadAsync(null, null, null), "messageReader");
        }
        public async Task ReadAsync_ThrowsArgumentNull_ReadContext()
        {
            // Arrange
            var deserializer          = new ODataResourceSetDeserializer(_deserializerProvider);
            ODataMessageReader reader = ODataFormatterHelpers.GetMockODataMessageReader();

            // Act & Assert
            await ExceptionAssert.ThrowsArgumentNullAsync(() => deserializer.ReadAsync(reader, null, null), "readContext");
        }
        public async Task ReadAsync_Throws_ArgumentMustBeOfType()
        {
            // Arrange
            var deserializer = new ODataResourceSetDeserializer(_deserializerProvider);
            ODataMessageReader       reader  = ODataFormatterHelpers.GetMockODataMessageReader();
            ODataDeserializerContext context = new ODataDeserializerContext
            {
                Model = EdmCoreModel.Instance
            };
            IEdmTypeReference edmType = new EdmCollectionTypeReference(new EdmCollectionType(EdmCoreModel.Instance.GetString(false)));

            // Act & Assert
            await ExceptionAssert.ThrowsAsync <ArgumentException>(
                () => deserializer.ReadAsync(reader, typeof(IList <int>), context),
                "The argument must be of type 'Complex or Entity'. (Parameter 'edmType')");
        }
Exemple #4
0
        public async Task ReadAsync_Roundtrip_ComplexCollection()
        {
            // Arrange
            Address[] addresses = new[]
            {
                new Address {
                    City = "Redmond", StreetAddress = "A", State = "123"
                },
                new Address {
                    City = "Seattle", StreetAddress = "S", State = "321"
                }
            };

            ODataResourceSetSerializer   serializer   = new ODataResourceSetSerializer(_serializerProvider);
            ODataResourceSetDeserializer deserializer = new ODataResourceSetDeserializer(_deserializerProvider);

            MemoryStream               stream   = new MemoryStream();
            ODataMessageWrapper        message  = new ODataMessageWrapper(stream);
            ODataMessageWriterSettings settings = new ODataMessageWriterSettings
            {
                ODataUri = new ODataUri {
                    ServiceRoot = new Uri("http://any/")
                }
            };
            ODataMessageWriter     messageWriter = new ODataMessageWriter(message as IODataResponseMessage, settings, _model);
            ODataMessageReader     messageReader = new ODataMessageReader(message as IODataResponseMessage, new ODataMessageReaderSettings(), _model);
            ODataSerializerContext writeContext  = new ODataSerializerContext {
                RootElementName = "Property", Model = _model
            };
            ODataDeserializerContext readContext = new ODataDeserializerContext()
            {
                Model = _model
            };

            // Act
            await serializer.WriteObjectAsync(addresses, addresses.GetType(), messageWriter, writeContext);

            stream.Seek(0, SeekOrigin.Begin);
            IEnumerable readAddresses = await deserializer.ReadAsync(messageReader, typeof(Address[]), readContext) as IEnumerable;

            // Assert
            Assert.Equal(addresses, readAddresses.Cast <Address>(), new AddressComparer());
        }
Exemple #5
0
        public async Task ReadAsync_ReturnsEdmComplexObjectCollection_TypelessMode()
        {
            // Arrange
            IEdmTypeReference           addressType           = _model.GetEdmTypeReference(typeof(Address)).AsComplex();
            IEdmCollectionTypeReference addressCollectionType =
                new EdmCollectionTypeReference(new EdmCollectionType(addressType));

            HttpContent      content    = new StringContent("{ 'value': [ {'@odata.type':'Microsoft.AspNetCore.OData.Tests.Models.Address', 'City' : 'Redmond' } ] }");
            HeaderDictionary headerDict = new HeaderDictionary
            {
                { "Content-Type", "application/json" }
            };

            IODataRequestMessage request         = ODataMessageWrapperHelper.Create(await content.ReadAsStreamAsync(), headerDict);
            ODataMessageReader   reader          = new ODataMessageReader(request, new ODataMessageReaderSettings(), _model);
            var deserializer                     = new ODataResourceSetDeserializer(_deserializerProvider);
            ODataDeserializerContext readContext = new ODataDeserializerContext
            {
                Model           = _model,
                ResourceType    = typeof(IEdmObject),
                ResourceEdmType = addressCollectionType
            };

            // Act
            IEnumerable result = await deserializer.ReadAsync(reader, typeof(IEdmObject), readContext) as IEnumerable;

            // Assert
            var addresses = result.Cast <EdmComplexObject>();

            Assert.NotNull(addresses);

            EdmComplexObject address = Assert.Single(addresses);

            Assert.Equal(new[] { "City" }, address.GetChangedPropertyNames());

            object city;

            Assert.True(address.TryGetPropertyValue("City", out city));
            Assert.Equal("Redmond", city);
        }