From 6f0105e8585ab56185a43894fb0c6cf6bde5b7d8 Mon Sep 17 00:00:00 2001 From: Sizhong Du Date: Thu, 2 Jun 2016 17:05:24 +0800 Subject: [PATCH] Only parameterless function imports could be included in the service document #104 --- src/Microsoft.OData.Core/ODataUtils.cs | 2 +- .../ODataUtilsTests.cs | 32 +++++++++++-------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/Microsoft.OData.Core/ODataUtils.cs b/src/Microsoft.OData.Core/ODataUtils.cs index 0abebd0129..5535dbb637 100644 --- a/src/Microsoft.OData.Core/ODataUtils.cs +++ b/src/Microsoft.OData.Core/ODataUtils.cs @@ -201,7 +201,7 @@ public static ODataServiceDocument GenerateServiceDocument(this IEdmModel model) .Select(entitySet => new ODataEntitySetInfo() { Name = entitySet.Name, Title = entitySet.Name, Url = new Uri(entitySet.Name, UriKind.RelativeOrAbsolute) }).ToList(); serviceDocument.Singletons = model.EntityContainer.Singletons() .Select(singleton => new ODataSingletonInfo() { Name = singleton.Name, Title = singleton.Name, Url = new Uri(singleton.Name, UriKind.RelativeOrAbsolute) }).ToList(); - serviceDocument.FunctionImports = model.EntityContainer.OperationImports().OfType().Where(functionImport => functionImport.IncludeInServiceDocument) + serviceDocument.FunctionImports = model.EntityContainer.OperationImports().OfType().Where(functionImport => (functionImport.IncludeInServiceDocument && !functionImport.Function.Parameters.Any())) .Select(functionImport => new ODataFunctionImportInfo() { Name = functionImport.Name, Title = functionImport.Name, Url = new Uri(functionImport.Name, UriKind.RelativeOrAbsolute) }).ToList(); return serviceDocument; diff --git a/test/FunctionalTests/Microsoft.OData.Core.Tests/ODataUtilsTests.cs b/test/FunctionalTests/Microsoft.OData.Core.Tests/ODataUtilsTests.cs index 846a8936a1..907caf0ab4 100644 --- a/test/FunctionalTests/Microsoft.OData.Core.Tests/ODataUtilsTests.cs +++ b/test/FunctionalTests/Microsoft.OData.Core.Tests/ODataUtilsTests.cs @@ -160,23 +160,23 @@ public void TestGenerateServiceDocument() { var serviceDocument = this.CreateTestModel().GenerateServiceDocument(); var entitySets = serviceDocument.EntitySets.ToList(); - Assert.Equal(entitySets.Count, 2); - Assert.Equal(entitySets[0].Name, "Products"); - Assert.Equal(entitySets[0].Url.ToString(), "Products"); - Assert.Equal(entitySets[1].Name, "Customers"); - Assert.Equal(entitySets[1].Url.ToString(), "Customers"); + Assert.Equal(2, entitySets.Count); + Assert.Equal("Products", entitySets[0].Name); + Assert.Equal("Products", entitySets[0].Url.ToString()); + Assert.Equal("Customers", entitySets[1].Name); + Assert.Equal("Customers", entitySets[1].Url.ToString()); var singletons = serviceDocument.Singletons.ToList(); - Assert.Equal(singletons.Count, 2); - Assert.Equal(singletons[0].Name, "SingleProduct"); - Assert.Equal(singletons[0].Url.ToString(), "SingleProduct"); - Assert.Equal(singletons[1].Name, "SingleCustomer"); - Assert.Equal(singletons[1].Url.ToString(), "SingleCustomer"); + Assert.Equal(2, singletons.Count); + Assert.Equal("SingleProduct", singletons[0].Name); + Assert.Equal("SingleProduct", singletons[0].Url.ToString()); + Assert.Equal("SingleCustomer", singletons[1].Name); + Assert.Equal("SingleCustomer", singletons[1].Url.ToString()); var functionImports = serviceDocument.FunctionImports.ToList(); - Assert.Equal(functionImports.Count, 1); - Assert.Equal(functionImports[0].Name, "SimpleFunctionImport2"); - Assert.Equal(functionImports[0].Url.ToString(), "SimpleFunctionImport2"); + Assert.Equal(1, functionImports.Count); + Assert.Equal("SimpleFunctionImport3", functionImports[0].Name); + Assert.Equal("SimpleFunctionImport3", functionImports[0].Url.ToString()); } [Fact] @@ -221,7 +221,11 @@ private IEdmModel CreateTestModel() EdmFunction function2 = new EdmFunction("TestModel", "SimpleFunction2", EdmCoreModel.Instance.GetInt32(false), false /*isbound*/, null, true); function2.AddParameter("p1", EdmCoreModel.Instance.GetInt32(false)); - defaultContainer.AddFunctionImport("SimpleFunctionImport2", function1, null, true /*IncludeInServiceDocument*/); + defaultContainer.AddFunctionImport("SimpleFunctionImport2", function2, null, true /*IncludeInServiceDocument*/); + + // Parameterless unbound function. + EdmFunction function3 = new EdmFunction("TestModel", "SimpleFunction3", EdmCoreModel.Instance.GetInt32(false), false /*isbound*/, null, true); + defaultContainer.AddFunctionImport("SimpleFunctionImport3", function3, null, true /*IncludeInServiceDocument*/); return model; }