Esempio n. 1
0
        public void WriteToStreamAsync_Passes_MetadataLevelToSerializerContext()
        {
            // Arrange
            var model = CreateModel();

            Mock <ODataSerializer>         serializer         = new Mock <ODataSerializer>(ODataPayloadKind.Property);
            Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>();

            serializerProvider.Setup(p => p.GetODataPayloadSerializer(model, typeof(int))).Returns(serializer.Object);
            serializer
            .Setup(s => s.WriteObject(42, It.IsAny <ODataMessageWriter>(), It.Is <ODataSerializerContext>(c => c.MetadataLevel == ODataMetadataLevel.FullMetadata)))
            .Verifiable();


            ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider();

            var         formatter = new ODataMediaTypeFormatter(deserializerProvider, serializerProvider.Object, Enumerable.Empty <ODataPayloadKind>(), ODataVersion.V3, CreateFakeODataRequest(model));
            HttpContent content   = new StringContent("42");

            content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=fullmetadata");

            // Act
            formatter.WriteToStreamAsync(typeof(int), 42, new MemoryStream(), content, transportContext: null);

            // Assert
            serializer.Verify();
        }
        public void WriteToStreamAsync_PassesSelectExpandClause_ThroughSerializerContext()
        {
            // Arrange
            var model   = CreateModel();
            var request = CreateFakeODataRequest(model);
            SelectExpandClause selectExpandClause =
                new SelectExpandClause(new SelectItem[0], allSelected: true);

            request.SetSelectExpandClause(selectExpandClause);

            Mock <ODataSerializer>         serializer         = new Mock <ODataSerializer>(ODataPayloadKind.Property);
            Mock <ODataSerializerProvider> serializerProvider = new Mock <ODataSerializerProvider>();

            serializerProvider.Setup(p => p.GetODataPayloadSerializer(model, typeof(int), request)).Returns(serializer.Object);
            serializer
            .Setup(s => s.WriteObject(42, typeof(int), It.IsAny <ODataMessageWriter>(),
                                      It.Is <ODataSerializerContext>(c => c.SelectExpandClause == selectExpandClause)))
            .Verifiable();

            ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider();

            var formatter = new ODataMediaTypeFormatter(deserializerProvider, serializerProvider.Object, Enumerable.Empty <ODataPayloadKind>());

            formatter.Request = request;
            HttpContent content = new StringContent("42");

            content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=fullmetadata");

            // Act
            formatter.WriteToStreamAsync(typeof(int), 42, new MemoryStream(), content, transportContext: null);

            // Assert
            serializer.Verify();
        }
Esempio n. 3
0
        public void Posting_NonDerivedType_To_Action_Expecting_BaseType_Throws()
        {
            // Arrange
            StringContent content = new StringContent("{ '@odata.type' : '#System.Web.OData.Builder.TestModels.Motorcycle' }");

            content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
            IODataRequestMessage oDataRequest = new ODataMessageWrapper(content.ReadAsStreamAsync().Result, content.Headers);
            ODataMessageReader   reader       = new ODataMessageReader(oDataRequest, new ODataMessageReaderSettings(), _model);

            ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider();

            ODataDeserializerContext context = new ODataDeserializerContext {
                Model = _model
            };
            IEdmActionImport action = _model.EntityContainer
                                      .OperationImports()
                                      .Single(f => f.Name == "PostMotorcycle_When_Expecting_Car") as IEdmActionImport;

            Assert.NotNull(action);

            context.Path = new ODataPath(new UnboundActionPathSegment(action));

            // Act & Assert
            Assert.Throws <ODataException>(
                () => new ODataEntityDeserializer(deserializerProvider).Read(reader, typeof(Car), context),
                "An entry with type 'System.Web.OData.Builder.TestModels.Motorcycle' was found, " +
                "but it is not assignable to the expected type 'System.Web.OData.Builder.TestModels.Car'. " +
                "The type specified in the entry must be equal to either the expected type or a derived type.");
        }
        public void Ctor_ThrowsArgumentNull_SerializerProvider()
        {
            ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider();

            ODataPayloadKind[] payloadKinds = new ODataPayloadKind[0];

            Assert.ThrowsArgumentNull(
                () => new ODataMediaTypeFormatter(deserializerProvider, serializerProvider: null, payloadKinds: payloadKinds),
                "serializerProvider");
        }
        public ODataJsonParser(Uri serviceRootUri, IEdmModel model)
        {
            _model    = model;
            _settings = new ODataMessageReaderSettings()
            {
                BaseUri = serviceRootUri
            };

            var provider = new DefaultODataDeserializerProvider();

            _deserializer = new ODataEntityDeserializer(provider);
        }
Esempio n. 6
0
        public void GetEdmTypeDeserializer_ReturnODataEnumDeserializer_ForEnumType()
        {
            // Arrange
            IEdmTypeReference edmType = new EdmEnumTypeReference(new EdmEnumType("TestModel", "Color"), isNullable: false);

            // Act
            ODataEdmTypeDeserializer deserializer = new DefaultODataDeserializerProvider().GetEdmTypeDeserializer(edmType);

            // Assert
            Assert.NotNull(deserializer);
            Assert.IsType <ODataEnumDeserializer>(deserializer);
        }
Esempio n. 7
0
        private static FeaturedODataSerializerProvider GetOrAddFeaturedSerializationProvider(this HttpConfiguration configuration)
        {
            var serializerProvider = configuration.Formatters.OfType <ODataMediaTypeFormatter>().Select(f => f.SerializerProvider).OfType <FeaturedODataSerializerProvider>().FirstOrDefault();

            if (serializerProvider != null)
            {
                return(serializerProvider);
            }

            serializerProvider = new FeaturedODataSerializerProvider();
            var deserializerProvider = new DefaultODataDeserializerProvider();
            var formatters           = ODataMediaTypeFormatters.Create(serializerProvider, deserializerProvider);

            configuration.Formatters.InsertRange(0, formatters);
            return(serializerProvider);
        }
Esempio n. 8
0
        public void Posting_NonDerivedType_To_Action_Expecting_BaseType_Throws()
        {
            StringContent content = new StringContent("{ '__metadata' : { 'type' : 'System.Web.Http.OData.Builder.TestModels.Motorcycle' } }");

            content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json;odata=verbose");
            IODataRequestMessage oDataRequest = new ODataMessageWrapper(content.ReadAsStreamAsync().Result, content.Headers);
            ODataMessageReader   reader       = new ODataMessageReader(oDataRequest, new ODataMessageReaderSettings(), _model);

            ODataDeserializerProvider deserializerProvider = new DefaultODataDeserializerProvider();
            IEdmEntityTypeReference   _motorcycle          =
                new EdmEntityTypeReference(_model.SchemaElements.OfType <IEdmEntityType>().Single(t => t.Name == "Car"), isNullable: false);

            ODataDeserializerContext context = new ODataDeserializerContext();

            context.Path = new ODataPath(new ActionPathSegment(_model.EntityContainers().Single().FunctionImports().Single(f => f.Name == "PostMotorcycle_When_Expecting_Car")));

            Assert.Throws <ODataException>(
                () => new ODataEntityDeserializer(_motorcycle, deserializerProvider).Read(reader, context),
                "An entry with type 'System.Web.Http.OData.Builder.TestModels.Motorcycle' was found, " +
                "but it is not assignable to the expected type 'System.Web.Http.OData.Builder.TestModels.Car'. " +
                "The type specified in the entry must be equal to either the expected type or a derived type.");
        }