public void AmbiguousEntitySetTest() { EdmEntityContainer container = new EdmEntityContainer("NS1", "Baz"); IEdmEntitySet set1 = new StubEdmEntitySet("Foo", container); IEdmEntitySet set2 = new StubEdmEntitySet("Foo", container); IEdmEntitySet set3 = new StubEdmEntitySet("Foo", container); container.AddElement(set1); Assert.AreNotEqual(set3, container.FindEntitySet("Foo"), "Checking the object equality."); Assert.AreEqual(set3.Name, container.FindEntitySet("Foo").Name, "Checking the object equality."); container.AddElement(set2); container.AddElement(set3); IEdmEntitySet ambiguous = container.FindEntitySet("Foo"); Assert.IsTrue(ambiguous.IsBad(), "Ambiguous binding is bad"); Assert.AreEqual(EdmContainerElementKind.EntitySet, ambiguous.ContainerElementKind, "Correct container element kind"); Assert.AreEqual("NS1.Baz", ambiguous.Container.FullName(), "Correct container name"); Assert.AreEqual("Foo", ambiguous.Name, "Correct Name"); Assert.IsTrue(ambiguous.EntityType().IsBad(), "Association is bad."); }
public void ReadBindableODataOperationTest() { EdmModel model = Test.OData.Utils.Metadata.TestModels.BuildTestModel() as EdmModel; EdmEntityContainer defaultContainer = model.FindEntityContainer("DefaultContainer") as EdmEntityContainer; IEdmEntitySet cities = defaultContainer.FindEntitySet("Cities"); IEdmEntityType cityType = (IEdmEntityType)model.FindDeclaredType("TestModel.CityType"); var addressInCity1BindableFunctionWithOverload = defaultContainer.AddActionAndActionImport(model, "AddressInCity", EdmCoreModel.Instance.GetBoolean(isNullable: true), null, true); var addressInCity1Action = addressInCity1BindableFunctionWithOverload.Action.AsEdmAction(); addressInCity1Action.AddParameter("city", new EdmEntityTypeReference(cityType, isNullable: true)); addressInCity1Action.AddParameter("address", EdmCoreModel.Instance.GetString(isNullable: true)); var funcWithOneParamImport = defaultContainer.AddFunctionAndFunctionImport(model, "BindableFunctionWithOverload", EdmCoreModel.Instance.GetInt32(true), null, false, true); var funcWithOneParam = funcWithOneParamImport.Function.AsEdmFunction(); funcWithOneParam.AddParameter("p1", new EdmEntityTypeReference(cityType, isNullable: true)); var funcWithTwoParamImport = defaultContainer.AddFunctionAndFunctionImport(model, "BindableFunctionWithOverload", EdmCoreModel.Instance.GetInt32(true), null, false, true); var funcWithTwoParam = funcWithTwoParamImport.Function.AsEdmFunction(); funcWithTwoParam.AddParameter("p1", new EdmEntityTypeReference(cityType, isNullable: true)); funcWithTwoParam.AddParameter("p2", EdmCoreModel.Instance.GetString(isNullable: true)); var testCases = new[] { new { DebugDescription = "No always bindable operations in payload", Json = "\"#TestModel.PrimitiveResultOperation\":{}", ExpectedServiceOperationDescriptor = new[] { new ServiceOperationDescriptor { IsAction = true, Metadata = "http://odata.org/test/$metadata#TestModel.AddressInCity", Title = "TestModel.AddressInCity", Target = "http://odata.org/test/Cities(1)/TestModel.AddressInCity" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.PrimitiveResultOperation", Title = "TestModel.PrimitiveResultOperation", Target = "http://odata.org/test/Cities(1)/TestModel.PrimitiveResultOperation" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("()"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("(p2)"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload(p2=@p2)" }, } }, new { DebugDescription = "Always bindable operations from default container and always bindable function group in payload", Json = "\"#TestModel.PrimitiveResultOperation\":{},\"#TestModel.AddressInCity\":{},\"#TestModel.BindableFunctionWithOverload\":{}", ExpectedServiceOperationDescriptor = new[] { new ServiceOperationDescriptor { IsAction = true, Metadata = "http://odata.org/test/$metadata#TestModel.AddressInCity", Title = "TestModel.AddressInCity", Target = "http://odata.org/test/Cities(1)/TestModel.AddressInCity" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.PrimitiveResultOperation", Title = "TestModel.PrimitiveResultOperation", Target = "http://odata.org/test/Cities(1)/TestModel.PrimitiveResultOperation" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload", Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload" }, } }, new { DebugDescription = "Always bindable operations and function group with namespace from default container in payload", Json = "\"#TestModel.PrimitiveResultOperation\":{},\"#TestModel.AddressInCity\":{},\"#TestModel.BindableFunctionWithOverload\":{}", ExpectedServiceOperationDescriptor = new[] { new ServiceOperationDescriptor { IsAction = true, Metadata = "http://odata.org/test/$metadata#TestModel.AddressInCity", Title = "TestModel.AddressInCity", Target = "http://odata.org/test/Cities(1)/TestModel.AddressInCity" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.PrimitiveResultOperation", Title = "TestModel.PrimitiveResultOperation", Target = "http://odata.org/test/Cities(1)/TestModel.PrimitiveResultOperation" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload", Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload" }, } }, new { DebugDescription = "Always bindable operations from non-default container and function overload with 1 param in payload", Json = "\"#TestModel.PrimitiveResultOperation\":{},\"#TestModel.AddressInCity\":{},\"#TestModel.BindableFunctionWithOverload(p1)\":{}", ExpectedServiceOperationDescriptor = new[] { new ServiceOperationDescriptor { IsAction = true, Metadata = "http://odata.org/test/$metadata#TestModel.AddressInCity", Title = "TestModel.AddressInCity", Target = "http://odata.org/test/Cities(1)/TestModel.AddressInCity" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.PrimitiveResultOperation", Title = "TestModel.PrimitiveResultOperation", Target = "http://odata.org/test/Cities(1)/TestModel.PrimitiveResultOperation" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("()"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("(p2)"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload(p2=@p2)" }, } }, new { DebugDescription = "Always bindable operations and function overload with 2 params, with namespace from non-default container in payload", Json = "\"#TestModel.PrimitiveResultOperation\":{},\"#TestModel.AddressInCity\":{},\"#TestModel.BindableFunctionWithOverload(p1)\":{}", ExpectedServiceOperationDescriptor = new[] { new ServiceOperationDescriptor { IsAction = true, Metadata = "http://odata.org/test/$metadata#TestModel.AddressInCity", Title = "TestModel.AddressInCity", Target = "http://odata.org/test/Cities(1)/TestModel.AddressInCity" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.PrimitiveResultOperation", Title = "TestModel.PrimitiveResultOperation", Target = "http://odata.org/test/Cities(1)/TestModel.PrimitiveResultOperation" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("()"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("(p2)"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload(p2=@p2)" }, } }, new { DebugDescription = "All of the always bindable operations in payload", Json = "\"#TestModel.PrimitiveResultOperation\":{},\"#TestModel.AddressInCity\":{}," + "\"#TestModel.BindableFunctionWithOverload(p1)\":{},\"#TestModel.BindableFunctionWithOverload(p1,p2)\":{}", ExpectedServiceOperationDescriptor = new[] { new ServiceOperationDescriptor { IsAction = true, Metadata = "http://odata.org/test/$metadata#TestModel.AddressInCity", Title = "TestModel.AddressInCity", Target = "http://odata.org/test/Cities(1)/TestModel.AddressInCity" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.PrimitiveResultOperation", Title = "TestModel.PrimitiveResultOperation", Target = "http://odata.org/test/Cities(1)/TestModel.PrimitiveResultOperation" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("()"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("(p2)"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload(p2=@p2)" }, } }, new { DebugDescription = "All of the always bindable operations with namespace in payload", Json = "\"#TestModel.PrimitiveResultOperation\":{},\"#TestModel.AddressInCity\":{}," + "\"#TestModel.BindableFunctionWithOverload(p1)\":{},\"#TestModel.BindableFunctionWithOverload(p1,p2)\":{}", ExpectedServiceOperationDescriptor = new[] { new ServiceOperationDescriptor { IsAction = true, Metadata = "http://odata.org/test/$metadata#TestModel.AddressInCity", Title = "TestModel.AddressInCity", Target = "http://odata.org/test/Cities(1)/TestModel.AddressInCity" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.PrimitiveResultOperation", Title = "TestModel.PrimitiveResultOperation", Target = "http://odata.org/test/Cities(1)/TestModel.PrimitiveResultOperation" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("()"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload" }, new ServiceOperationDescriptor { IsFunction = true, Metadata = "http://odata.org/test/$metadata#TestModel.BindableFunctionWithOverload" + Uri.EscapeDataString("(p2)"), Title = "TestModel.BindableFunctionWithOverload", Target = "http://odata.org/test/Cities(1)/TestModel.BindableFunctionWithOverload(p2=@p2)" }, } }, }; IEnumerable <PayloadReaderTestDescriptor> testDescriptors = testCases.Select( t => new PayloadReaderTestDescriptor(this.Settings) { DebugDescription = t.DebugDescription, PayloadEdmModel = model, PayloadElement = PayloadBuilder.Entity("TestModel.CityType") .JsonRepresentation( "{" + "\"" + JsonLightConstants.ODataPropertyAnnotationSeparator + JsonLightConstants.ODataContextAnnotationName + "\":\"http://odata.org/test/$metadata#DefaultContainer.Cities/$entity\"," + "\"" + JsonLightConstants.ODataPropertyAnnotationSeparator + JsonLightConstants.ODataTypeAnnotationName + "\":\"TestModel.CityType\"," + "\"Id\":1," + "\"Name\":\"New York\"," + t.Json + "}") .ExpectedEntityType(cityType, cities), ExpectedResultPayloadElement = (tc) => { var entityInstance = PayloadBuilder.Entity("TestModel.CityType"). PrimitiveProperty("Id", 1). PrimitiveProperty("Name", "New York"). StreamProperty("Skyline", "http://odata.org/test/Cities(1)/Skyline", "http://odata.org/test/Cities(1)/Skyline"). NavigationProperty("CityHall", "http://odata.org/test/Cities(1)/CityHall"). NavigationProperty("DOL", "http://odata.org/test/Cities(1)/DOL"). NavigationProperty("PoliceStation", "http://odata.org/test/Cities(1)/PoliceStation"); foreach (var op in t.ExpectedServiceOperationDescriptor) { entityInstance.OperationDescriptor(op); } return(entityInstance); }, SkipTestConfiguration = tc => tc.IsRequest }); this.CombinatorialEngineProvider.RunCombinations( testDescriptors, this.ReaderTestConfigurationProvider.JsonLightFormatConfigurations, (testDescriptor, testConfiguration) => { if (testConfiguration.IsRequest) { testDescriptor = new PayloadReaderTestDescriptor(testDescriptor); testDescriptor.ExpectedResultNormalizers.Add(tc => RemoveOperationsNormalizer.Normalize); } // These descriptors are already tailored specifically for Json Light and // do not require normalization. testDescriptor.TestDescriptorNormalizers.Clear(); testDescriptor.RunTest(testConfiguration); }); }