public void KindPropertyReturnsKeyEnumMember()
        {
            // Arrange & Act
            ODataKeySegment segment = new ODataKeySegment(_person);

            // Assert
            Assert.Equal(ODataSegmentKind.Key, segment.Kind);
        }
        public void KeySegmentEntityTypePropertyReturnsSameEntityType()
        {
            // Arrange & Act
            ODataKeySegment segment = new ODataKeySegment(_person);

            // Assert
            Assert.Same(_person, segment.EntityType);
        }
        public void KindPropertyReturnsUnknown()
        {
            // Arrange
            ODataKeySegment keySegment = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath       path       = new ODataPath(keySegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.Unknown, path.Kind);
        }
        public void CreateKeyParametersForSingleKeyWorks(bool prefix)
        {
            // Arrange
            EdmModel      model    = new EdmModel();
            EdmEntityType customer = new EdmEntityType("NS", "Customer");

            customer.AddKeys(customer.AddStructuralProperty("Id", EdmPrimitiveTypeKind.String));
            model.AddElement(customer);
            OpenApiConvertSettings setting = new OpenApiConvertSettings
            {
                PrefixEntityTypeNameBeforeKey = prefix
            };
            ODataContext    context    = new ODataContext(model, setting);
            ODataKeySegment keySegment = new ODataKeySegment(customer);

            // Act
            var parameters = context.CreateKeyParameters(keySegment);

            // Assert
            Assert.NotNull(parameters);
            var parameter = Assert.Single(parameters);

            string json = parameter.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
            string expected;

            if (prefix)
            {
                expected = @"{
  ""name"": ""Customer-Id"",
  ""in"": ""path"",
  ""description"": ""key: Customer-Id of Customer"",
  ""required"": true,
  ""schema"": {
    ""type"": ""string"",
    ""nullable"": true
  },
  ""x-ms-docs-key-type"": ""Customer""
}";
            }
            else
            {
                expected = @"{
  ""name"": ""Id"",
  ""in"": ""path"",
  ""description"": ""key: Id of Customer"",
  ""required"": true,
  ""schema"": {
    ""type"": ""string"",
    ""nullable"": true
  },
  ""x-ms-docs-key-type"": ""Customer""
}";
            }

            Assert.Equal(expected.ChangeLineBreaks(), json);
        }
        public void KindPropertyReturnsEntity()
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment keySegment             = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath       path = new ODataPath(nsSegment, keySegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.Entity, path.Kind);
        }
        public void GetPathItemNameReturnsCorrectKeyLiteralForCompositeKey(bool prefix)
        {
            // Arrange & Act
            ODataKeySegment        segment  = new ODataKeySegment(_customer);
            OpenApiConvertSettings settings = new OpenApiConvertSettings
            {
                PrefixEntityTypeNameBeforeKey = prefix
            };

            // Assert
            Assert.Equal("firstName={firstName},lastName={lastName}", segment.GetPathItemName(settings));
        }
        public void GetPathItemNameReturnsCorrectKeyLiteralForSimpleKey(bool prefix, string expected)
        {
            // Arrange & Act
            ODataKeySegment        segment  = new ODataKeySegment(_person);
            OpenApiConvertSettings settings = new OpenApiConvertSettings
            {
                PrefixEntityTypeNameBeforeKey = prefix
            };

            // Assert
            Assert.Equal(expected, segment.GetPathItemName(settings));
        }
        public void ODataPathLastSegmentWorks()
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment keySegment             = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath       path = new ODataPath(nsSegment, keySegment);

            // Act
            var segment = path.LastSegment;

            // Assert
            Assert.Same(keySegment, segment);
        }
        public void GetPathItemNameReturnsCorrectKeyLiteralForCompositeKey(bool prefix, bool addQuotes, string expected)
        {
            // Arrange & Act
            ODataKeySegment        segment  = new ODataKeySegment(_customer);
            OpenApiConvertSettings settings = new OpenApiConvertSettings
            {
                PrefixEntityTypeNameBeforeKey      = prefix,
                AddSingleQuotesForStringParameters = addQuotes,
            };

            // Assert
            Assert.Equal(expected, segment.GetPathItemName(settings));
        }
        public void GetPathItemNameReturnsCorrectWithSingleKeySegment(bool keyAsSegment, bool prefix, string expected)
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment        keySegment      = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath              path            = new ODataPath(nsSegment, keySegment);
            OpenApiConvertSettings settings        = new OpenApiConvertSettings
            {
                EnableKeyAsSegment            = keyAsSegment,
                PrefixEntityTypeNameBeforeKey = prefix
            };

            // Act
            string pathItemName = path.GetPathItemName(settings);

            // Assert
            Assert.Equal(expected, pathItemName);
        }
        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);
        }
        public void GetPathItemNameReturnsCorrectStringWithMultipleKeySegment(bool keyAsSegment, bool prefix, string expected)
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_compositeKeyEntitySet);
            ODataKeySegment        keySegment      = new ODataKeySegment(_compositeKeyEntityType);
            ODataPath              path            = new ODataPath(nsSegment, keySegment);
            OpenApiConvertSettings settings        = new OpenApiConvertSettings
            {
                EnableKeyAsSegment                 = keyAsSegment,
                PrefixEntityTypeNameBeforeKey      = prefix,
                AddSingleQuotesForStringParameters = true,
            };

            // Act
            string pathItemName = path.GetPathItemName(settings);

            // Assert
            Assert.Equal(expected, pathItemName);
        }
Exemple #13
0
        /// <summary>
        /// Create key parameters for the <see cref="ODataKeySegment"/>.
        /// </summary>
        /// <param name="context">The OData context.</param>
        /// <param name="keySegment">The key segment.</param>
        /// <param name="parameterNameMapping">The parameter name mapping.</param>
        /// <returns>The created the list of <see cref="OpenApiParameter"/>.</returns>
        public static IList <OpenApiParameter> CreateKeyParameters(this ODataContext context, ODataKeySegment keySegment,
                                                                   IDictionary <string, string> parameterNameMapping = null)
        {
            Utils.CheckArgumentNull(context, nameof(context));
            Utils.CheckArgumentNull(keySegment, nameof(keySegment));

            IList <OpenApiParameter> parameters = new List <OpenApiParameter>();
            IEdmEntityType           entityType = keySegment.EntityType;

            IList <IEdmStructuralProperty> keys = entityType.Key().ToList();

            if (keys.Count() == 1)
            {
                string keyName = keys.First().Name;

                // If dictionary parameterNameMapping is defined, there's no need of setting the
                // keyName, we will retrieve this from the dictionary key.
                if (context.Settings.PrefixEntityTypeNameBeforeKey && parameterNameMapping == null)
                {
                    keyName = entityType.Name + "-" + keys.First().Name;
                }

                OpenApiParameter parameter = new OpenApiParameter
                {
                    Name        = parameterNameMapping == null ? keyName: parameterNameMapping[keyName],
                    In          = ParameterLocation.Path,
                    Required    = true,
                    Description = "key: " + keyName + " of " + entityType.Name,
                    Schema      = context.CreateEdmTypeSchema(keys.First().Type)
                };

                parameter.Extensions.Add(Constants.xMsKeyType, new OpenApiString(entityType.Name));
                parameters.Add(parameter);
            }
            else
            {
                // append key parameter
                foreach (var keyProperty in entityType.Key())
                {
                    OpenApiParameter parameter = new OpenApiParameter
                    {
                        Name = parameterNameMapping == null ?
                               keyProperty.Name:
                               parameterNameMapping[keyProperty.Name],// By design: not prefix with type name if enable type name prefix
                        In          = ParameterLocation.Path,
                        Required    = true,
                        Description = "key: " + keyProperty.Name + " of " + entityType.Name,
                        Schema      = context.CreateEdmTypeSchema(keyProperty.Type)
                    };

                    if (keySegment.KeyMappings != null)
                    {
                        parameter.Description = parameter.Description + $", {keyProperty.Name}={{{parameter.Name}}}";
                    }

                    parameter.Extensions.Add(Constants.xMsKeyType, new OpenApiString(entityType.Name));
                    parameters.Add(parameter);
                }
            }

            return(parameters);
        }
Exemple #14
0
        /// <summary>
        /// Create key parameters for the <see cref="ODataKeySegment"/>.
        /// </summary>
        /// <param name="keySegment">The key segment.</param>
        /// <returns>The created the list of <see cref="OpenApiParameter"/>.</returns>
        public static IList <OpenApiParameter> CreateKeyParameters(this ODataContext context, ODataKeySegment keySegment)
        {
            Utils.CheckArgumentNull(context, nameof(context));
            Utils.CheckArgumentNull(keySegment, nameof(keySegment));

            IList <OpenApiParameter> parameters = new List <OpenApiParameter>();
            IEdmEntityType           entityType = keySegment.EntityType;

            IList <IEdmStructuralProperty> keys = entityType.Key().ToList();

            if (keys.Count() == 1)
            {
                string keyName = keys.First().Name + keySegment.KeyIndex.ToString();
                if (context.Settings.PrefixEntityTypeNameBeforeKey)
                {
                    keyName = entityType.Name + "-" + keyName;
                }

                OpenApiParameter parameter = new OpenApiParameter
                {
                    Name        = keyName,
                    In          = ParameterLocation.Path,
                    Required    = true,
                    Description = "key: " + keyName,
                    Schema      = context.CreateEdmTypeSchema(keys.First().Type)
                };

                parameter.Extensions.Add(Constants.xMsKeyType, new OpenApiString(entityType.Name));
                parameters.Add(parameter);
            }
            else
            {
                // append key parameter
                foreach (var keyProperty in entityType.Key())
                {
                    string keyName = keyProperty.Name + keySegment.KeyIndex.ToString();

                    OpenApiParameter parameter = new OpenApiParameter
                    {
                        Name        = keyName,
                        In          = ParameterLocation.Path,
                        Required    = true,
                        Description = "key: " + keyName,
                        Schema      = context.CreateEdmTypeSchema(keyProperty.Type)
                    };

                    parameter.Extensions.Add(Constants.xMsKeyType, new OpenApiString(entityType.Name));
                    parameters.Add(parameter);
                }
            }

            return(parameters);
        }