Esempio n. 1
0
        /// <inheritdoc/>
        protected override void SetBasicInfo(OpenApiOperation operation)
        {
            // Summary
            operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name;

            // OperationId
            if (Context.Settings.EnableOperationId)
            {
                string operationId = String.Join(".", Path.Segments.Where(s => !(s is ODataKeySegment)).Select(s => s.Identifier));
                if (EdmOperation.IsAction())
                {
                    operation.OperationId = operationId;
                }
                else
                {
                    ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment;
                    string pathItemName = operationSegment.GetPathItemName(Context.Settings, new HashSet <string>());

                    if (Context.Model.IsOperationOverload(operationSegment.Operation))
                    {
                        string hash = pathItemName.GetHashSHA256();
                        operation.OperationId = operationId + "-" + hash.Substring(0, 4);
                    }
                    else
                    {
                        operation.OperationId = operationId;
                    }
                }
            }

            base.SetBasicInfo(operation);
        }
Esempio n. 2
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataOperationSegment operationSegment = path.LastSegment as ODataOperationSegment;

            EdmOperation = operationSegment.Operation;
        }
        public void KindPropertyReturnsOperationEnumMember()
        {
            // Arrange & Act
            IEdmOperation operation = new EdmAction("NS", "MyAction", null);
            var           segment   = new ODataOperationSegment(operation);

            // Assert
            Assert.Equal(ODataSegmentKind.Operation, segment.Kind);
        }
        public void GetEntityTypeReturnsNull()
        {
            // Arrange & Act
            IEdmOperation operation = new EdmAction("NS", "MyAction", null);
            var           segment   = new ODataOperationSegment(operation);

            // Assert
            Assert.Null(segment.EntityType);
        }
        public void CtorSetOperationProperty()
        {
            // Arrange & Act
            IEdmOperation operation = new EdmAction("NS", "MyAction", null);
            var           segment   = new ODataOperationSegment(operation);

            // Assert
            Assert.Same(operation, segment.Operation);
        }
        public void GetEntityTypeThrowsNotImplementedException()
        {
            // Arrange & Act
            IEdmOperation operation = new EdmAction("NS", "MyAction", null);
            var           segment   = new ODataOperationSegment(operation);

            // Assert
            Assert.Throws <NotImplementedException>(() => segment.EntityType);
        }
        public void KindPropertyReturnsOperation()
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            EdmAction             action           = new EdmAction("NS", "MyAction", null, isBound: true, entitySetPathExpression: null);
            ODataOperationSegment opSegment        = new ODataOperationSegment(action);
            ODataPath             path             = new ODataPath(nsSegment, opSegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.Operation, path.Kind);
        }
Esempio n. 8
0
        /// <inheritdoc/>
        protected override void SetBasicInfo(OpenApiOperation operation)
        {
            // Summary
            operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name;

            // OperationId
            if (Context.Settings.EnableOperationId)
            {
                // When the key segment is available,
                // its EntityType name will be used
                // in the operationId to avoid potential
                // duplicates in entity vs entityset functions/actions

                List <string> identifiers = new();
                foreach (ODataSegment segment in Path.Segments)
                {
                    if (segment is not ODataKeySegment)
                    {
                        identifiers.Add(segment.Identifier);
                    }
                    else
                    {
                        identifiers.Add(segment.EntityType.Name);
                    }
                }

                string operationId = string.Join(".", identifiers);

                if (EdmOperation.IsAction())
                {
                    operation.OperationId = operationId;
                }
                else
                {
                    ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment;
                    string pathItemName = operationSegment.GetPathItemName(Context.Settings, new HashSet <string>());

                    if (Context.Model.IsOperationOverload(operationSegment.Operation))
                    {
                        string hash = pathItemName.GetHashSHA256();
                        operation.OperationId = operationId + "-" + hash.Substring(0, 4);
                    }
                    else
                    {
                        operation.OperationId = operationId;
                    }
                }
            }

            base.SetBasicInfo(operation);
        }
Esempio n. 9
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            // It's bound operation, the first segment must be the navigaiton source.
            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            ODataOperationSegment operationSegment = path.LastSegment as ODataOperationSegment;

            EdmOperation = operationSegment.Operation;

            HasTypeCast = path.Segments.Any(s => s is ODataTypeCastSegment);
        }
        public void GetPathItemNameReturnsCorrectActionLiteral(bool unqualifiedCall, bool isBound)
        {
            // Arrange & Act
            EdmAction action  = new EdmAction("NS", "MyAction", null, isBound: isBound, entitySetPathExpression: null);
            var       segment = new ODataOperationSegment(action);
            OpenApiConvertSettings settings = new OpenApiConvertSettings
            {
                EnableUnqualifiedCall = unqualifiedCall
            };

            string expected = unqualifiedCall ? "MyAction" : "NS.MyAction";

            // Assert
            Assert.Equal(expected, segment.GetPathItemName(settings));
        }
        /// <inheritdoc/>
        protected override void SetExtensions(OpenApiPathItem item)
        {
            if (!Context.Settings.ShowMsDosGroupPath)
            {
                return;
            }

            ODataNavigationSourceSegment navigationSourceSegment = Path.FirstSegment as ODataNavigationSourceSegment;
            IEdmNavigationSource         currentNavSource        = navigationSourceSegment.NavigationSource;

            IList <ODataPath> samePaths = new List <ODataPath>();

            foreach (var path in Context.AllPaths.Where(p => p.Kind == ODataPathKind.Operation && p != Path))
            {
                navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;
                if (currentNavSource != navigationSourceSegment.NavigationSource)
                {
                    continue;
                }

                ODataOperationSegment operationSegment = path.LastSegment as ODataOperationSegment;
                if (EdmOperation.FullName() != operationSegment.Operation.FullName())
                {
                    continue;
                }

                samePaths.Add(path);
            }

            if (samePaths.Any())
            {
                OpenApiArray           array    = new OpenApiArray();
                OpenApiConvertSettings settings = Context.Settings.Clone();
                settings.EnableKeyAsSegment = Context.KeyAsSegment;
                foreach (var p in samePaths)
                {
                    array.Add(new OpenApiString(p.GetPathItemName(settings)));
                }

                item.Extensions.Add(Constants.xMsDosGroupPath, array);
            }

            base.SetExtensions(item);
            item.Extensions.AddCustomAtributesToExtensions(Context, EdmOperation);
        }
        public void GetPathItemNameReturnsCorrectFunctionLiteral(bool unqualifiedCall, bool isBound, string expected)
        {
            // Arrange & Act
            IEdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(new EdmEntityType("NS", "Entity"), false);
            IEdmTypeReference       parameterType       = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false);
            EdmFunction             boundFunction       = BoundFunction("MyFunction", isBound, entityTypeReference);

            boundFunction.AddParameter("param", parameterType);

            var segment = new ODataOperationSegment(boundFunction);
            OpenApiConvertSettings settings = new OpenApiConvertSettings
            {
                EnableUnqualifiedCall = unqualifiedCall
            };

            // Assert
            Assert.Equal(expected, segment.GetPathItemName(settings));
        }
        public void GetPathItemNameReturnsCorrectFunctionLiteralForEscapedComposableFunction(bool isEscapedFunction, bool enableEscapeFunctionCall, string expected)
        {
            // Arrange & Act
            IEdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(new EdmEntityType("NS", "Entity"), false);
            IEdmTypeReference       parameterType       = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.String, isNullable: false);
            EdmFunction             boundFunction       = BoundFunction("MyFunction", true, entityTypeReference, true);

            boundFunction.AddParameter("param", parameterType);

            var segment = new ODataOperationSegment(boundFunction, isEscapedFunction);
            OpenApiConvertSettings settings = new OpenApiConvertSettings
            {
                EnableUriEscapeFunctionCall        = enableEscapeFunctionCall,
                AddSingleQuotesForStringParameters = true
            };

            // Assert
            Assert.Equal(expected, segment.GetPathItemName(settings));
        }
Esempio n. 14
0
        /// <inheritdoc/>
        protected override void SetBasicInfo(OpenApiOperation operation)
        {
            // Summary
            operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name;

            // OperationId
            if (Context.Settings.EnableOperationId)
            {
                StringBuilder operationId = new StringBuilder(NavigationSource.Name);
                if (HasTypeCast)
                {
                    ODataTypeCastSegment typeCast = Path.Segments.FirstOrDefault(s => s is ODataTypeCastSegment) as ODataTypeCastSegment;
                    operationId.Append(".");
                    operationId.Append(typeCast.EntityType.Name);
                }
                else
                {
                    operationId.Append(".");
                    operationId.Append(NavigationSource.EntityType().Name);
                }

                operationId.Append(".");
                operationId.Append(EdmOperation.Name);
                if (EdmOperation.IsAction())
                {
                    operation.OperationId = operationId.ToString();
                }
                else
                {
                    ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment;
                    string pathItemName = operationSegment.GetPathItemName(Context.Settings);
                    string md5          = pathItemName.GetHashMd5();
                    operation.OperationId = operationId.Append(".").Append(md5.Substring(8)).ToString();
                }
            }

            base.SetBasicInfo(operation);
        }
Esempio n. 15
0
        /// <inheritdoc/>
        protected override void SetBasicInfo(OpenApiOperation operation)
        {
            // Summary
            operation.Summary = "Invoke " + (EdmOperation.IsAction() ? "action " : "function ") + EdmOperation.Name;

            // OperationId
            if (Context.Settings.EnableOperationId)
            {
                string operationId = String.Join(".", Path.Segments.Where(s => !(s is ODataKeySegment)).Select(s => s.Name));
                if (EdmOperation.IsAction())
                {
                    operation.OperationId = operationId;
                }
                else
                {
                    ODataOperationSegment operationSegment = Path.LastSegment as ODataOperationSegment;
                    string pathItemName = operationSegment.GetPathItemName(Context.Settings);
                    string md5          = pathItemName.GetHashMd5();
                    operation.OperationId = operationId + "." + md5.Substring(0, 4);
                }
            }

            base.SetBasicInfo(operation);
        }