public void NullValueNonPropertyErrorTests() { EdmModel model = new EdmModel(); var entityType = model.EntityType("OwningType", "TestModel").KeyProperty("ID", EdmCoreModel.Instance.GetInt32(false) as EdmTypeReference); model.EntityContainer("DefaultContainer"); var entitySet = model.EntitySet("EntitySet", entityType); IEnumerable <PayloadReaderTestDescriptor> testDescriptors = new[] { new PayloadReaderTestDescriptor(this.Settings) { DebugDescription = "null collection - should fail.", PayloadEdmModel = model, PayloadElement = PayloadBuilder.PrimitiveCollection().ExpectedCollectionItemType(EdmDataTypes.Int32) .JsonRepresentation( "{" + "\"@odata.context\":\"http://odata.org/test/$metadata#Edm.Null\"" + "}"), ExpectedException = ODataExpectedExceptions.ODataException("ODataJsonLightContextUriParser_ContextUriDoesNotMatchExpectedPayloadKind", "http://odata.org/test/$metadata#Edm.Null", "Collection") }, new PayloadReaderTestDescriptor(this.Settings) { DebugDescription = "null entry - should fail.", PayloadEdmModel = model, PayloadElement = PayloadBuilder.NullEntity().ExpectedEntityType(entityType, entitySet) .JsonRepresentation( "{" + "\"@odata.context\":\"http://odata.org/test/$metadata#Edm.Null\"" + "}"), ExpectedException = ODataExpectedExceptions.ODataException("ODataJsonLightContextUriParser_ContextUriDoesNotMatchExpectedPayloadKind", "http://odata.org/test/$metadata#Edm.Null", "Entry") }, new PayloadReaderTestDescriptor(this.Settings) { DebugDescription = "null feed - should fail.", PayloadEdmModel = model, PayloadElement = PayloadBuilder.EntitySet().ExpectedEntityType(entityType, entitySet) .JsonRepresentation( "{" + "\"@odata.context\":\"http://odata.org/test/$metadata#Edm.Null\"" + "}"), ExpectedException = ODataExpectedExceptions.ODataException("ODataJsonLightContextUriParser_ContextUriDoesNotMatchExpectedPayloadKind", "http://odata.org/test/$metadata#Edm.Null", "Feed") }, }; this.CombinatorialEngineProvider.RunCombinations( testDescriptors, this.ReaderTestConfigurationProvider.JsonLightFormatConfigurations, (testDescriptor, testConfiguration) => { if (testConfiguration.IsRequest) { return; } // These descriptors are already tailored specifically for Json Light and // do not require normalization. testDescriptor.TestDescriptorNormalizers.Clear(); testDescriptor.RunTest(testConfiguration); }); }
public void ExpandedLinkTest() { IEdmModel model = Microsoft.Test.OData.Utils.Metadata.TestModels.BuildTestModel(); // TODO: add test cases that use relative URIs IEnumerable <PayloadReaderTestDescriptor> testDescriptors = PayloadReaderTestDescriptorGenerator.CreateDeferredNavigationLinkTestDescriptors(this.Settings, true); // Generate interesting payloads around the navigation property // Note that this will actually expand the deferred nav links as well. testDescriptors = testDescriptors.SelectMany(td => this.PayloadGenerator.GenerateReaderPayloads(td)); IEnumerable <PayloadReaderTestDescriptor> customTestDescriptors = new PayloadReaderTestDescriptor[] { // Expanded null entry new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.CityType") .PrimitiveProperty("Id", 1) .ExpandedNavigationProperty("PoliceStation", PayloadBuilder.NullEntity()), }, // Expanded null entry after another expanded collection link new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.CityType") .PrimitiveProperty("Id", 1) .ExpandedNavigationProperty("CityHall", PayloadBuilder.EntitySet()) .ExpandedNavigationProperty("PoliceStation", PayloadBuilder.NullEntity()), }, // incorrect type at related end new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.CityType") .PrimitiveProperty("Id", 1) .ExpandedNavigationProperty("PoliceStation", PayloadBuilder.Entity("TestModel.CityType")), ExpectedException = ODataExpectedExceptions.ODataException("ValidationUtils_EntryTypeNotAssignableToExpectedType", "TestModel.CityType", "TestModel.OfficeType"), }, // Nested entry of depth 4 should fail because we set MaxNestingDepth = 3 below new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 1), ExpectedException = ODataExpectedExceptions.ODataException("ValidationUtils_MaxDepthOfNestedEntriesExceeded", "3"), }.InEntryWithExpandedLink(true /* isSingleton */) .InEntryWithExpandedLink(true) .InEntryWithExpandedLink(true), // Nested entry of depth 4 within expanded feeds should fail new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 1), ExpectedException = ODataExpectedExceptions.ODataException("ValidationUtils_MaxDepthOfNestedEntriesExceeded", "3"), }.InFeed() .InEntryWithExpandedLink(false /* isSingleton */) .InFeed() .InEntryWithExpandedLink(false) .InFeed() .InEntryWithExpandedLink(false), // Nested entry of depth 3 should succeed new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 1) }.InEntryWithExpandedLink(true /* isSingleton */) .InEntryWithExpandedLink(true), // Nested entry of depth 3 within expanded feeds should succeed new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 1) }.InFeed() .InEntryWithExpandedLink(false /* isSingleton */) .InFeed() .InEntryWithExpandedLink(false), // Expanded feed with a number of child entries greater than recursive depth limit should succeed. new PayloadReaderTestDescriptor(this.Settings) { PayloadDescriptor = new PayloadTestDescriptor(), PayloadEdmModel = model, PayloadElement = PayloadBuilder.EntitySet().Append( PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 1), PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 2), PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 3), PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 4), PayloadBuilder.Entity("TestModel.Person").PrimitiveProperty("Id", 5)), }.InEntryWithExpandedLink(false /* isSingleton */) .InEntryWithExpandedLink(true), }; this.CombinatorialEngineProvider.RunCombinations( testDescriptors.Concat(customTestDescriptors), this.ReaderTestConfigurationProvider.ExplicitFormatConfigurations, (testDescriptor, testConfiguration) => { testConfiguration = new ReaderTestConfiguration(testConfiguration); testConfiguration.MessageReaderSettings.MessageQuotas.MaxNestingDepth = 3; testDescriptor.RunTest(testConfiguration); }); }