public void GetODataDeserializer_ReturnsSameDeserializer_ForSameType()
        {
            // Arrange
            HttpRequest request = GetRequest(_edmModel);

            // Act
            IODataDeserializer firstCallDeserializer  = _deserializerProvider.GetODataDeserializer(typeof(Product), request);
            IODataDeserializer secondCallDeserializer = _deserializerProvider.GetODataDeserializer(typeof(Product), request);

            // Assert
            Assert.Same(firstCallDeserializer, secondCallDeserializer);
        }
        public void GetODataDeserializer_Primitive(Type type)
        {
            // Arrange
            HttpRequest request = GetRequest(EdmCoreModel.Instance);

            // Act
            IODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer(type, request);

            // Assert
            Assert.NotNull(deserializer);
            ODataPrimitiveDeserializer rawValueDeserializer = Assert.IsType <ODataPrimitiveDeserializer>(deserializer);

            Assert.Equal(ODataPayloadKind.Property, rawValueDeserializer.ODataPayloadKind);
        }
        public void GetODataDeserializer_Uri()
        {
            // Arrange
            HttpRequest request = GetRequest(model: null);

            // Act
            IODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer(typeof(Uri), request);

            // Assert
            Assert.NotNull(deserializer);
            var referenceLinkDeserializer = Assert.IsType <ODataEntityReferenceLinkDeserializer>(deserializer);

            Assert.Equal(ODataPayloadKind.EntityReferenceLink, referenceLinkDeserializer.ODataPayloadKind);
        }
        public void GetODataDeserializer_Resource_ForComplex()
        {
            // Arrange
            HttpRequest request = GetRequest(_edmModel);

            // Act
            IODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer(typeof(Address), request);

            // Assert
            Assert.NotNull(deserializer);
            ODataResourceDeserializer complexDeserializer = Assert.IsType <ODataResourceDeserializer>(deserializer);

            Assert.Equal(ODataPayloadKind.Resource, deserializer.ODataPayloadKind);
            Assert.Equal(complexDeserializer.DeserializerProvider, _deserializerProvider);
        }
        public void GetODataDeserializer_DeltaResourceSet_ForDeltaSet(Type deltaType)
        {
            // Arrange
            HttpRequest request = GetRequest(_edmModel);

            // Act
            IODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer(deltaType, request);

            // Assert
            Assert.NotNull(deserializer);
            ODataDeltaResourceSetDeserializer setDeserializer = Assert.IsType <ODataDeltaResourceSetDeserializer>(deserializer);

            Assert.Equal(ODataPayloadKind.Delta, setDeserializer.ODataPayloadKind);
            Assert.Equal(setDeserializer.DeserializerProvider, _deserializerProvider);
        }
        //  [InlineData(typeof(PageResult<Address>))]
        public void GetODataDeserializer_ResourceSet_ForComplexCollection(Type collectionType)
        {
            // Arrange
            HttpRequest request = GetRequest(_edmModel);

            // Act
            IODataDeserializer deserializer = _deserializerProvider.GetODataDeserializer(collectionType, request);

            // Assert
            Assert.NotNull(deserializer);
            ODataResourceSetDeserializer resourceSetDeserializer = Assert.IsType <ODataResourceSetDeserializer>(deserializer);

            Assert.Equal(ODataPayloadKind.ResourceSet, deserializer.ODataPayloadKind);
            Assert.Equal(resourceSetDeserializer.DeserializerProvider, _deserializerProvider);
        }