Skip to content

Commit afcbce9

Browse files
Resolve reference to 'schema' property on Parameter element
1 parent b7c37fc commit afcbce9

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

src/Microsoft.OpenApi/Extensions/OpenApiReferencableExtensions.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Linq;
67
using Microsoft.OpenApi.Interfaces;
78
using Microsoft.OpenApi.Models;
89
using Microsoft.OpenApi.Services;
@@ -23,7 +24,30 @@ public static class OpenApiReferencableExtensions
2324
/// <returns>An IEnumerable of errors. This function will never return null.</returns>
2425
public static IOpenApiReferenceable ResolveReference(this IOpenApiReferenceable element, string jsonPointer)
2526
{
26-
return element;
27+
if (jsonPointer == string.Empty)
28+
return element;
29+
if (element.GetType() == typeof(OpenApiParameter))
30+
{
31+
return ResolveReferenceOnParameterElement((OpenApiParameter)element, jsonPointer);
32+
}
33+
throw new NotImplementedException();
34+
}
35+
36+
private static IOpenApiReferenceable ResolveReferenceOnParameterElement(OpenApiParameter parameterElement, string jsonPointer)
37+
{
38+
var jsonPointerTokens = jsonPointer.Split('/');
39+
switch (jsonPointerTokens.First())
40+
{
41+
case OpenApiConstants.Schema:
42+
return parameterElement.Schema;
43+
case OpenApiConstants.Examples:
44+
{
45+
var mapKey = jsonPointerTokens.ElementAt(1);
46+
return parameterElement.Examples[mapKey];
47+
}
48+
default:
49+
throw new NotImplementedException();
50+
}
2751
}
2852
}
2953
}

test/Microsoft.OpenApi.Tests/Workspaces/OpenApiReferencableTests.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,40 @@ public void ReferencableElementResolvesEmptyJsonPointerToItself(IOpenApiReferenc
4040
// Assert
4141
Assert.Same(referencableElement, resolvedReference);
4242
}
43+
44+
[Fact]
45+
public void ParameterElementCanResolveReferenceToSchemaProperty()
46+
{
47+
// Arrange
48+
var parameterElement = new OpenApiParameter
49+
{
50+
Schema = new OpenApiSchema()
51+
};
52+
53+
// Act
54+
var resolvedReference = parameterElement.ResolveReference("schema");
55+
56+
// Assert
57+
Assert.Same(parameterElement.Schema, resolvedReference);
58+
}
59+
60+
[Fact]
61+
public void ParameterElementCanResolveReferenceToExampleTmpDbgImproveMyName()
62+
{
63+
// Arrange
64+
var parameterElement = new OpenApiParameter
65+
{
66+
Examples = new Dictionary<string, OpenApiExample>()
67+
{
68+
{ "example1", new OpenApiExample() }
69+
},
70+
};
71+
72+
// Act
73+
var resolvedReference = parameterElement.ResolveReference("examples/example1");
74+
75+
// Assert
76+
Assert.Same(parameterElement.Examples["example1"], resolvedReference);
77+
}
4378
}
4479
}

0 commit comments

Comments
 (0)