public void SingleServiceOperationSuccessfullyResolved()
        {
            var parameters = new string[] { };

            IEdmOperationImport function;

            FunctionOverloadResolver.ResolveOperationImportFromList("GetCoolPeople", parameters, HardCodedTestModel.TestModel, out function, ODataUriResolver.Default).Should().BeTrue();
            function.Should().BeSameAs(HardCodedTestModel.GetFunctionImportForGetCoolPeople());
        }
        public void ActionWithMultipleOverloadsForTheSameBindingParameter()
        {
            var model      = ModelBuildingHelpers.GetModelWithIllegalActionOverloads();
            var parameters = new string[] { };

            IEdmOperationImport function;
            Action resolve = () => FunctionOverloadResolver.ResolveOperationImportFromList("Action", parameters, model, out function, ODataUriResolver.Default);

            resolve.ShouldThrow <ODataException>().WithMessage(ODataErrorStrings.FunctionOverloadResolver_MultipleActionImportOverloads("Action"));
        }
        public void ModelWithMultipleOverloadedActionsShouldThrow()
        {
            var model      = ModelBuildingHelpers.GetModelWithMixedActionsAndFunctionsWithSameName();
            var parameters = new string[0];

            IEdmOperationImport function;
            Action test = () => FunctionOverloadResolver.ResolveOperationImportFromList("Foo", parameters, model, out function, ODataUriResolver.Default);

            test.ShouldThrow <ODataException>().WithMessage(ODataErrorStrings.FunctionOverloadResolver_MultipleOperationImportOverloads("Foo"));
        }
        public void SingleServiceOperationSuccessfullyResolved()
        {
            var parameters = new string[] { };

            IEdmOperationImport function;
            var result = FunctionOverloadResolver.ResolveOperationImportFromList("GetCoolPeople", parameters, HardCodedTestModel.TestModel, out function, DefaultUriResolver);

            Assert.True(result);
            Assert.Same(HardCodedTestModel.GetFunctionImportForGetCoolPeople(), function);
        }
        public void OverloadServiceOperationSuccessfullyResolved()
        {
            var model = new EdmModel();

            // Add function without parameter.
            var int32TypeReference       = EdmCoreModel.Instance.GetInt32(false);
            var functionWithoutParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            model.AddElement(functionWithoutParameter);

            // Add function with parameter.
            var functionWithParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            functionWithParameter.AddParameter("Parameter", int32TypeReference);
            model.AddElement(functionWithParameter);

            // Add function with two parameters.
            var functionWithTwoParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            functionWithTwoParameter.AddParameter("Parameter", int32TypeReference);
            functionWithTwoParameter.AddParameter("Parameter2", int32TypeReference);
            model.AddElement(functionWithTwoParameter);

            // Add function import.
            var container = new EdmEntityContainer("Fully.Qualified.Namespace", "Container");

            model.AddElement(container);
            var functionImportWithoutParameter = container.AddFunctionImport("FunctionImport", functionWithoutParameter);
            var functionImportWithParameter    = container.AddFunctionImport("FunctionImport", functionWithParameter);
            var functionImportWithTwoParameter = container.AddFunctionImport("FunctionImport", functionWithTwoParameter);

            IEdmOperationImport functionImport;

            // Resolve overload function import without parameter.
            var parameters = new string[] { };

            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, ODataUriResolver.Default).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithoutParameter);

            // Resolve overload function import with parameter.
            parameters = new string[] { "Parameter" };
            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, ODataUriResolver.Default).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithParameter);

            // Resolve overload function import with parameter.
            parameters = new string[] { "Parameter", "Parameter2" };
            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, ODataUriResolver.Default).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithTwoParameter);
        }
示例#6
0
        public void OverloadServiceOperationSuccessfullyResolved()
        {
            var model = new EdmModel();

            // Add function without parameter.
            var int32TypeReference       = EdmCoreModel.Instance.GetInt32(false);
            var functionWithoutParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            model.AddElement(functionWithoutParameter);

            // Add function with parameter.
            var functionWithParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            functionWithParameter.AddParameter("Parameter", int32TypeReference);
            model.AddElement(functionWithParameter);

            // Add function with two parameters.
            var functionWithTwoParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            functionWithTwoParameter.AddParameter("Parameter", int32TypeReference);
            functionWithTwoParameter.AddParameter("Parameter2", int32TypeReference);
            model.AddElement(functionWithTwoParameter);

            // Add function with two required and two optional parameters.
            var functionWithTwoRequiredOneOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            functionWithTwoRequiredOneOptionalParameter.AddParameter("Parameter", int32TypeReference);
            functionWithTwoRequiredOneOptionalParameter.AddParameter("Parameter2", int32TypeReference);
            functionWithTwoRequiredOneOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            functionWithTwoRequiredOneOptionalParameter.AddOptionalParameter("Parameter4", int32TypeReference);
            model.AddElement(functionWithTwoRequiredOneOptionalParameter);

            // Add function with one required and one optional parameters.
            var functionWithOneRequiredOneOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            functionWithOneRequiredOneOptionalParameter.AddParameter("Parameter1", int32TypeReference);
            functionWithOneRequiredOneOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            model.AddElement(functionWithOneRequiredOneOptionalParameter);

            // Add function with one required and two optional parameters.
            var functionWithOneRequiredTwoOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference);

            functionWithOneRequiredTwoOptionalParameter.AddParameter("Parameter1", int32TypeReference);
            functionWithOneRequiredTwoOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            functionWithOneRequiredTwoOptionalParameter.AddOptionalParameter("Parameter4", int32TypeReference);
            model.AddElement(functionWithOneRequiredTwoOptionalParameter);

            // Add function with one required and two optional parameters.
            var functionWithOneRequiredThreeOptionalParameter = new EdmFunction("Fully.Qualified.Namespace", "Function", int32TypeReference, true, null, true);

            functionWithOneRequiredThreeOptionalParameter.AddParameter("BindingParameter", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddParameter("Parameter1", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddOptionalParameter("Parameter3", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddOptionalParameter("Parameter4", int32TypeReference);
            functionWithOneRequiredThreeOptionalParameter.AddOptionalParameter("Parameter5", int32TypeReference);
            model.AddElement(functionWithOneRequiredThreeOptionalParameter);

            // Add function import.
            var container = new EdmEntityContainer("Fully.Qualified.Namespace", "Container");

            model.AddElement(container);
            var functionImportWithoutParameter = container.AddFunctionImport("FunctionImport", functionWithoutParameter);
            var functionImportWithParameter    = container.AddFunctionImport("FunctionImport", functionWithParameter);
            var functionImportWithTwoParameter = container.AddFunctionImport("FunctionImport", functionWithTwoParameter);
            var functionImportWithTwoRequiredOneOptionalParameter   = container.AddFunctionImport("FunctionImport", functionWithTwoRequiredOneOptionalParameter);
            var functionImportWithOneRequiredOneOptionalParameter   = container.AddFunctionImport("FunctionImport", functionWithOneRequiredOneOptionalParameter);
            var functionImportWithOneRequiredTwoOptionalParameter   = container.AddFunctionImport("FunctionImport", functionWithOneRequiredTwoOptionalParameter);
            var functionImportWithOneRequiredThreeOptionalParameter = container.AddFunctionImport("FunctionImport", functionWithOneRequiredThreeOptionalParameter);

            IEdmOperationImport functionImport;

            // Resolve overload function import without parameter.
            var parameters = new string[] { };

            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, DefaultUriResolver).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithoutParameter);

            // Resolve overload function import with parameter.
            parameters = new string[] { "Parameter" };
            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, DefaultUriResolver).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithParameter);

            // Resolve overload function import with parameter.
            parameters = new string[] { "Parameter", "Parameter2" };
            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, DefaultUriResolver).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithTwoParameter);

            // Resolve overload function with two required and one optional parameter.
            parameters = new string[] { "Parameter", "Parameter2", "Parameter3" };
            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, DefaultUriResolver).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithTwoRequiredOneOptionalParameter);

            // Resolve overload function with one required and two optional parameters.
            parameters = new string[] { "Parameter1", "Parameter3" };
            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, DefaultUriResolver).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithOneRequiredOneOptionalParameter);

            // Resolve overload function with one required and three optional parameters (one omitted).
            parameters = new string[] { "Parameter1", "Parameter3", "Parameter5" };
            FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, DefaultUriResolver).Should().BeTrue();
            functionImport.Should().BeSameAs(functionImportWithOneRequiredThreeOptionalParameter);

            // Raise exception if more than one match.
            parameters = new string[] { "Parameter1", "Parameter4" };
            Action resolve = () => FunctionOverloadResolver.ResolveOperationImportFromList("FunctionImport", parameters, model, out functionImport, DefaultUriResolver);

            resolve.ShouldThrow <ODataException>().WithMessage(ODataErrorStrings.FunctionOverloadResolver_MultipleOperationImportOverloads("FunctionImport"));
        }