public void CreatePathItemForOperationImportReturnsCorrectPathItem(string operationImport,
                                                                           OperationType operationType)
        {
            // Arrange
            IEdmModel           model              = EdmModelHelper.TripServiceModel;
            ODataContext        context            = new ODataContext(model);
            IEdmOperationImport edmOperationImport = model.EntityContainer
                                                     .OperationImports().FirstOrDefault(o => o.Name == operationImport);

            Assert.NotNull(edmOperationImport); // guard
            string expectSummary = "Invoke " +
                                   (edmOperationImport.IsActionImport() ? "actionImport " : "functionImport ") + operationImport;
            ODataPath path = new ODataPath(new ODataOperationImportSegment(edmOperationImport));

            // Act
            OpenApiPathItem pathItem = _pathItemHandler.CreatePathItem(context, path);

            // Assert
            Assert.NotNull(pathItem);
            Assert.NotNull(pathItem.Operations);
            var operationKeyValue = Assert.Single(pathItem.Operations);

            Assert.Equal(operationType, operationKeyValue.Key);
            Assert.NotNull(operationKeyValue.Value);

            Assert.Equal(expectSummary, operationKeyValue.Value.Summary);
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ActionImportSegmentTemplate" /> class.
        /// </summary>
        /// <param name="segment">The operation import segment.</param>
        public ActionImportSegmentTemplate(OperationImportSegment segment)
        {
            Segment = segment ?? throw Error.ArgumentNull(nameof(segment));

            IEdmOperationImport operationImport = segment.OperationImports.FirstOrDefault();

            if (!operationImport.IsActionImport())
            {
                throw new ODataException(Error.Format(SRResources.SegmentShouldBeKind, "ActionImport", "ActionImportSegmentTemplate"));
            }

            ActionImport = (IEdmActionImport)operationImport;
        }
Esempio n. 3
0
        /// <inheritdoc/>
        public override bool TryMatch(ODataPathSegment pathSegment, IDictionary <string, object> values)
        {
            OperationImportSegment other = pathSegment as OperationImportSegment;

            if (other == null)
            {
                return(false);
            }

            IEdmOperationImport operationImport = Segment.OperationImports.First();
            IEdmOperationImport otherImport     = other.OperationImports.First();

            // for unbound action, just compare the action import
            if (operationImport.IsActionImport() && otherImport.IsActionImport())
            {
                return(operationImport == otherImport);
            }
            else if (operationImport.IsFunctionImport() && otherImport.IsFunctionImport())
            {
                // but for unbound function, we should compare the parameter names and
                // process the parameter values into odata routes.
                if (operationImport.Name != otherImport.Name)
                {
                    return(false);
                }

                IDictionary <string, object> parameterValues = new Dictionary <string, object>();
                foreach (var parameter in other.Parameters)
                {
                    object value = other.GetParameterValue(parameter.Name);
                    parameterValues[parameter.Name] = value;
                }

                if (RoutingConventionHelpers.TryMatch(ParameterMappings, parameterValues, values))
                {
                    foreach (var operationSegmentParameter in other.Parameters)
                    {
                        string name  = operationSegmentParameter.Name;
                        object value = parameterValues[name];

                        RoutingConventionHelpers.AddFunctionParameters((IEdmFunction)otherImport.Operation, name,
                                                                       value, values, values, ParameterMappings);
                    }

                    return(true);
                }
            }

            return(false);
        }
Esempio n. 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ActionImportSegmentTemplate" /> class.
        /// </summary>
        /// <param name="segment">The operation import segment.</param>
        internal ActionImportSegmentTemplate(OperationImportSegment segment)
        {
            Segment = segment ?? throw Error.ArgumentNull(nameof(segment));

            IEdmOperationImport operationImport = segment.OperationImports.FirstOrDefault();

            if (!operationImport.IsActionImport())
            {
                throw new ODataException(Error.Format(SRResources.SegmentShouldBeKind, "ActionImport", "ActionImportSegmentTemplate"));
            }

            ActionImport = (IEdmActionImport)operationImport;

            if (ActionImport.Action.ReturnType != null)
            {
                IsSingle = ActionImport.Action.ReturnType.TypeKind() != EdmTypeKind.Collection;

                EdmType = ActionImport.Action.ReturnType.Definition;
            }

            NavigationSource = segment.EntitySet;
        }