File tree Expand file tree Collapse file tree 2 files changed +60
-1
lines changed
src/Microsoft.OpenApi/Extensions
test/Microsoft.OpenApi.Tests/Workspaces Expand file tree Collapse file tree 2 files changed +60
-1
lines changed Original file line number Diff line number Diff line change 3
3
4
4
using System ;
5
5
using System . Collections . Generic ;
6
+ using System . Linq ;
6
7
using Microsoft . OpenApi . Interfaces ;
7
8
using Microsoft . OpenApi . Models ;
8
9
using Microsoft . OpenApi . Services ;
@@ -23,7 +24,30 @@ public static class OpenApiReferencableExtensions
23
24
/// <returns>An IEnumerable of errors. This function will never return null.</returns>
24
25
public static IOpenApiReferenceable ResolveReference ( this IOpenApiReferenceable element , string jsonPointer )
25
26
{
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
+ }
27
51
}
28
52
}
29
53
}
Original file line number Diff line number Diff line change @@ -40,5 +40,40 @@ public void ReferencableElementResolvesEmptyJsonPointerToItself(IOpenApiReferenc
40
40
// Assert
41
41
Assert . Same ( referencableElement , resolvedReference ) ;
42
42
}
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
+ }
43
78
}
44
79
}
You can’t perform that action at this time.
0 commit comments