protected string GetOperationId(string prefix)
        {
            IList <string> items = new List <string>
            {
                NavigationSource.Name
            };

            var lastpath = Path.Segments.Last(c => c is ODataNavigationPropertySegment);

            foreach (var segment in Path.Segments.Skip(1))
            {
                ODataNavigationPropertySegment npSegment = segment as ODataNavigationPropertySegment;
                if (npSegment != null)
                {
                    if (segment == lastpath)
                    {
                        items.Add(prefix + Utils.UpperFirstChar(npSegment.NavigationProperty.Name));
                        break;
                    }
                    else
                    {
                        items.Add(npSegment.NavigationProperty.Name);
                    }
                }
            }

            return(string.Join(".", items));
        }
Esempio n. 2
0
        public void GetPathItemNameReturnsCorrectNavigationPropertyLiteral()
        {
            // Arrange & Act
            var segment = new ODataNavigationPropertySegment(_property);

            // Assert
            Assert.Equal("Nav", segment.GetPathItemName(new OpenApiConvertSettings()));
        }
Esempio n. 3
0
        public void KindPropertyReturnsNavigationPropertyEnumMember()
        {
            // Arrange & Act
            var segment = new ODataNavigationPropertySegment(_property);

            // Assert
            Assert.Equal(ODataSegmentKind.NavigationProperty, segment.Kind);
        }
Esempio n. 4
0
        public void GetEntityTypeReturnsCorrectEntityType()
        {
            // Arrange & Act
            var segment = new ODataNavigationPropertySegment(_property);

            // Assert
            Assert.Same(_entityType, segment.EntityType);
        }
Esempio n. 5
0
        public void CtorSetNavigationPropertyProperty()
        {
            // Arrange & Act
            var segment = new ODataNavigationPropertySegment(_property);

            // Assert
            Assert.Same(_property, segment.NavigationProperty);
        }
        /// <inheritdoc/>
        protected override void SetExtensions(OpenApiPathItem item)
        {
            if (!Context.Settings.ShowMsDosGroupPath)
            {
                return;
            }

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

            foreach (var path in Context.AllPaths.Where(p => p.Kind == ODataPathKind.NavigationProperty && p != Path))
            {
                bool lastIsKeySegment = path.LastSegment is ODataKeySegment;
                if (LastSegmentIsKeySegment != lastIsKeySegment)
                {
                    continue;
                }

                ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;
                if (NavigationSource != navigationSourceSegment.NavigationSource)
                {
                    continue;
                }

                ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;
                if (npSegment == null)
                {
                    npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
                }
                if (NavigationProperty != npSegment.NavigationProperty)
                {
                    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);
            }
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment is ODataKeySegment;
            ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;

            if (npSegment == null)
            {
                npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
            }
            NavigationProperty = npSegment.NavigationProperty;
        }
        /// <inheritdoc/>
        protected override void SetTags(OpenApiOperation operation)
        {
            IList <string> items = new List <string>
            {
                NavigationSource.Name
            };

            foreach (var segment in Path.Segments.Skip(1))
            {
                ODataNavigationPropertySegment npSegment = segment as ODataNavigationPropertySegment;
                if (npSegment != null)
                {
                    if (npSegment.NavigationProperty == NavigationProperty)
                    {
                        items.Add(NavigationProperty.ToEntityType().Name);
                        break;
                    }
                    else
                    {
                        if (items.Count >= Context.Settings.TagDepth - 1)
                        {
                            items.Add(npSegment.NavigationProperty.ToEntityType().Name);
                            break;
                        }
                        else
                        {
                            items.Add(npSegment.NavigationProperty.Name);
                        }
                    }
                }
            }

            string     name = string.Join(".", items);
            OpenApiTag tag  = new OpenApiTag
            {
                Name = name
            };

            tag.Extensions.Add(Constants.xMsTocType, new OpenApiString("page"));
            operation.Tags.Add(tag);

            Context.AppendTag(tag);

            base.SetTags(operation);
        }
        public void KindPropertyReturnsNavigationProperty()
        {
            // Arrange
            EdmNavigationPropertyInfo propertyInfo = new EdmNavigationPropertyInfo
            {
                Name = "Nav",
                TargetMultiplicity = EdmMultiplicity.One,
                Target             = _compositeKeyEntityType
            };
            var property = EdmNavigationProperty.CreateNavigationProperty(_simpleKeyEntityType, propertyInfo);
            ODataNavigationPropertySegment npSegment = new ODataNavigationPropertySegment(property);
            ODataNavigationSourceSegment   nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment keySegment = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath       path       = new ODataPath(nsSegment, keySegment, npSegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.NavigationProperty, path.Kind);
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment is ODataKeySegment;

            ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;

            if (npSegment == null)
            {
                npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
            }
            NavigationProperty = npSegment.NavigationProperty;

            NavigationPropertyPath = string.Join("/",
                                                 Path.Segments.Where(s => !(s is ODataKeySegment || s is ODataNavigationSourceSegment)).Select(e => e.Identifier));

            IEdmEntitySet entitySet = NavigationSource as IEdmEntitySet;
            IEdmSingleton singleton = NavigationSource as IEdmSingleton;

            NavigationRestrictionsType navigation;

            if (entitySet != null)
            {
                navigation = Context.Model.GetRecord <NavigationRestrictionsType>(entitySet, CapabilitiesConstants.NavigationRestrictions);
            }
            else
            {
                navigation = Context.Model.GetRecord <NavigationRestrictionsType>(singleton, CapabilitiesConstants.NavigationRestrictions);
            }

            if (navigation != null && navigation.RestrictedProperties != null)
            {
                Restriction = navigation.RestrictedProperties.FirstOrDefault(r => r.NavigationProperty != null && r.NavigationProperty == NavigationPropertyPath);
            }
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment is ODataKeySegment;

            ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;

            if (npSegment == null)
            {
                npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
            }
            NavigationProperty = npSegment.NavigationProperty;

            NavigationPropertyPath = string.Join("/",
                                                 path.Segments.OfType <ODataNavigationPropertySegment>().Select(p => p.NavigationProperty.Name));

            // So far, we haven't defined the HttpRequest for the navigation property path.
            // Request = Context.FindRequest(NavigationSource, OperationType.ToString());
        }