示例#1
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 = DependencyInjectionHelper.GetDefaultODataDeserializerProvider();

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

            Assert.NotNull(action);
            IEdmEntitySetBase actionEntitySet;

            action.TryGetStaticEntitySet(_model, out actionEntitySet);
            context.Path = new ODataPath(new OperationImportSegment(new[] { action }, actionEntitySet, null));

            // Act & Assert
            Assert.Throws <ODataException>(
                () => new ODataResourceDeserializer(deserializerProvider).Read(reader, typeof(Car), context),
                "An resource 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 resource must be equal to either the expected type or a derived type.");
        }
示例#2
0
 static ODataActionPayloadDeserializerTest()
 {
     _model                = GetModel();
     _container            = _model.EntityContainer;
     _deserializerProvider = DependencyInjectionHelper.GetDefaultODataDeserializerProvider();
     _deserializer         = new ODataActionPayloadDeserializer(_deserializerProvider);
 }
示例#3
0
        public ODataSingletonDeserializerTest()
        {
            EdmModel model        = new EdmModel();
            var      employeeType = new EdmEntityType("NS", "Employee");

            employeeType.AddStructuralProperty("EmployeeId", EdmPrimitiveTypeKind.Int32);
            employeeType.AddStructuralProperty("EmployeeName", EdmPrimitiveTypeKind.String);
            model.AddElement(employeeType);

            EdmEntityContainer defaultContainer = new EdmEntityContainer("NS", "Default");

            model.AddElement(defaultContainer);

            _singleton = new EdmSingleton(defaultContainer, "CEO", employeeType);
            defaultContainer.AddElement(_singleton);

            model.SetAnnotationValue <ClrTypeAnnotation>(employeeType, new ClrTypeAnnotation(typeof(EmployeeModel)));

            _edmModel = model;

            _readContext = new ODataDeserializerContext
            {
                Path         = new ODataPath(new SingletonSegment(_singleton)),
                Model        = _edmModel,
                ResourceType = typeof(EmployeeModel)
            };

            _deserializerProvider = DependencyInjectionHelper.GetDefaultODataDeserializerProvider();
        }
示例#4
0
        public void ApplyProperty_DoesNotIgnoreKeyProperty()
        {
            // Arrange
            ODataProperty property = new ODataProperty {
                Name = "Key1", Value = "Value1"
            };
            EdmEntityType entityType = new EdmEntityType("namespace", "name");

            entityType.AddKeys(entityType.AddStructuralProperty("Key1",
                                                                EdmLibHelpers.GetEdmPrimitiveTypeReferenceOrNull(typeof(string))));

            EdmEntityTypeReference    entityTypeReference = new EdmEntityTypeReference(entityType, isNullable: false);
            ODataDeserializerProvider provider            = DependencyInjectionHelper.GetDefaultODataDeserializerProvider();

            var  resource     = new Mock <IDelta>(MockBehavior.Strict);
            Type propertyType = typeof(string);

            resource.Setup(r => r.TryGetPropertyType("Key1", out propertyType)).Returns(true).Verifiable();
            resource.Setup(r => r.TrySetPropertyValue("Key1", "Value1")).Returns(true).Verifiable();

            // Act
            DeserializationHelpers.ApplyProperty(property, entityTypeReference, resource.Object, provider,
                                                 new ODataDeserializerContext {
                Model = new EdmModel()
            });

            // Assert
            resource.Verify();
        }
示例#5
0
 public ODataResourceSetDeserializerTest()
 {
     _model                = GetEdmModel();
     _customerType         = _model.GetEdmTypeReference(typeof(Customer)).AsEntity();
     _customersType        = new EdmCollectionTypeReference(new EdmCollectionType(_customerType));
     _serializerProvider   = DependencyInjectionHelper.GetDefaultODataSerializerProvider();
     _deserializerProvider = DependencyInjectionHelper.GetDefaultODataDeserializerProvider();
 }
        public ODataResourceDeserializerTests()
        {
            _edmModel = EdmTestHelpers.GetModel();
            IEdmEntitySet entitySet = _edmModel.EntityContainer.FindEntitySet("Products");

            _readContext = new ODataDeserializerContext
            {
                Path         = new ODataPath(new EntitySetSegment(entitySet)),
                Model        = _edmModel,
                ResourceType = typeof(Product)
            };
            _productEdmType       = _edmModel.GetEdmTypeReference(typeof(Product)).AsEntity();
            _supplierEdmType      = _edmModel.GetEdmTypeReference(typeof(Supplier)).AsEntity();
            _addressEdmType       = _edmModel.GetEdmTypeReference(typeof(Address)).AsComplex();
            _deserializerProvider = DependencyInjectionHelper.GetDefaultODataDeserializerProvider();
        }