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); }
/// <summary> /// Creates the path parameters for the <see cref="ODataPath"/> /// </summary> /// <param name="path">The ODataPath</param> /// <param name="context">The OData context.</param> /// <returns>The created list of <see cref="OpenApiParameter"/></returns> public static List <OpenApiParameter> CreatePathParameters(this ODataPath path, ODataContext context) { List <OpenApiParameter> pathParameters = new(); var parameterMappings = path.CalculateParameterMapping(context.Settings); foreach (ODataKeySegment keySegment in path.OfType <ODataKeySegment>()) { IDictionary <string, string> mapping = parameterMappings[keySegment]; pathParameters.AddRange(context.CreateKeyParameters(keySegment, mapping)); } // Add the route prefix parameter v1{data} if (context.Settings.RoutePathPrefixProvider?.Parameters != null) { pathParameters.AddRange(context.Settings.RoutePathPrefixProvider.Parameters); } return(pathParameters); }