Skip to content

Commit e0e3095

Browse files
committed
chore: implement review feedback
1 parent d27a4fc commit e0e3095

File tree

4 files changed

+85
-5
lines changed

4 files changed

+85
-5
lines changed

src/Microsoft.OpenApi/Models/OpenApiReference.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public string? ReferenceV3
8989

9090
if (IsExternal)
9191
{
92-
return _referenceV3 = GetExternalReferenceV3();
92+
return GetExternalReferenceV3();
9393
}
9494

9595
if (Type == ReferenceType.Tag)
@@ -107,7 +107,7 @@ public string? ReferenceV3
107107
return Id;
108108
}
109109

110-
return _referenceV3 = $"#/components/{Type.GetDisplayName()}/{Id}";
110+
return $"#/components/{Type.GetDisplayName()}/{Id}";
111111
}
112112
private set
113113
{

src/Microsoft.OpenApi/Services/OpenApiWorkspace.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ public bool Contains(string location)
371371
return default;
372372
}
373373

374-
private static IOpenApiSchema? ResolveSubSchema(IOpenApiSchema schema, string[] pathSegments)
374+
internal static IOpenApiSchema? ResolveSubSchema(IOpenApiSchema schema, string[] pathSegments)
375375
{
376376
// Traverse schema object to resolve subschemas
377377
if (pathSegments.Length == 0)

test/Microsoft.OpenApi.Readers.Tests/V31Tests/ReferenceSamples/rootComponentSchemaReference.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ paths:
1717
components:
1818
schemas:
1919
specialitem:
20-
title: Special Item
2120
$ref: "#/components/schemas/item"
2221
item:
2322
title: Item

test/Microsoft.OpenApi.Readers.Tests/V31Tests/RelativeReferenceTests.cs

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
using System.IO;
1+
using System.Collections.Generic;
2+
using System.IO;
23
using System.Net.Http;
34
using System.Text.Json.Nodes;
45
using System.Threading.Tasks;
56
using Microsoft.OpenApi.Models;
7+
using Microsoft.OpenApi.Models.Interfaces;
68
using Microsoft.OpenApi.Reader;
9+
using Microsoft.OpenApi.Services;
710
using Microsoft.OpenApi.Writers;
811
using Xunit;
912

@@ -202,5 +205,83 @@ public async Task ParseLocalReferenceToJsonSchemaResourceWorks()
202205
// Assert
203206
Assert.Equal(JsonSchemaType.Object | JsonSchemaType.Null, schema.Type);
204207
}
208+
209+
[Fact]
210+
public void ResolveSubSchema_ShouldTraverseKnownKeywords()
211+
{
212+
var schema = new OpenApiSchema
213+
{
214+
Type = JsonSchemaType.Object,
215+
Properties = new Dictionary<string, IOpenApiSchema>
216+
{
217+
["a"] = new OpenApiSchema
218+
{
219+
Properties = new Dictionary<string, IOpenApiSchema>
220+
{
221+
["b"] = new OpenApiSchema { Type = JsonSchemaType.String }
222+
}
223+
}
224+
}
225+
};
226+
227+
var path = new[] { "properties", "a", "properties", "b" };
228+
229+
var result = OpenApiWorkspace.ResolveSubSchema(schema, path);
230+
231+
Assert.NotNull(result);
232+
Assert.Equal(JsonSchemaType.String, result!.Type);
233+
}
234+
235+
public static IEnumerable<object[]> SubSchemaKeywordPropertyPaths =>
236+
[
237+
[new[] { "properties", "properties" }],
238+
[new[] { "properties", "allOf" }]
239+
];
240+
241+
242+
[Theory]
243+
[MemberData(nameof(SubSchemaKeywordPropertyPaths))]
244+
public void ResolveSubSchema_ShouldHandleUserDefinedKeywordNamedProperty(string[] pathSegments)
245+
{
246+
var schema = new OpenApiSchema
247+
{
248+
Type = JsonSchemaType.Object,
249+
Properties = new Dictionary<string, IOpenApiSchema>
250+
{
251+
["properties"] = new OpenApiSchema { Type = JsonSchemaType.String },
252+
["allOf"] = new OpenApiSchema { Type = JsonSchemaType.String }
253+
}
254+
};
255+
256+
var result = OpenApiWorkspace.ResolveSubSchema(schema, pathSegments);
257+
258+
Assert.NotNull(result);
259+
Assert.Equal(JsonSchemaType.String, result!.Type);
260+
}
261+
262+
[Fact]
263+
public void ResolveSubSchema_ShouldRecurseIntoAllOfComposition()
264+
{
265+
var schema = new OpenApiSchema
266+
{
267+
AllOf =
268+
[
269+
new OpenApiSchema
270+
{
271+
Properties = new Dictionary<string, IOpenApiSchema>
272+
{
273+
["x"] = new OpenApiSchema { Type = JsonSchemaType.Integer }
274+
}
275+
}
276+
]
277+
};
278+
279+
var path = new[] { "allOf", "0", "properties", "x" };
280+
281+
var result = OpenApiWorkspace.ResolveSubSchema(schema, path);
282+
283+
Assert.NotNull(result);
284+
Assert.Equal(JsonSchemaType.Integer, result!.Type);
285+
}
205286
}
206287
}

0 commit comments

Comments
 (0)