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); }
/// <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); }
/// <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); }