Skip to content

Commit e5a1080

Browse files
committed
feat: adds deserialization of the example extension
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
1 parent 9387b01 commit e5a1080

3 files changed

Lines changed: 78 additions & 0 deletions

File tree

src/Microsoft.OpenApi/Reader/V2/OpenApiSchemaDeserializer.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,10 @@ internal static partial class OpenApiV2Deserializer
267267
"example",
268268
(o, n, _, _) => o.Example = n
269269
},
270+
{
271+
OpenApiConstants.JsonSchemaExamplesExtension,
272+
(o, n, _, c) => o.Examples = n.CreateListOfAny(c)
273+
},
270274
{
271275
OpenApiConstants.PatternPropertiesExtension,
272276
(o, n, t, c) => o.PatternProperties = n.CreateMap(LoadSchema, t, c)

src/Microsoft.OpenApi/Reader/V3/OpenApiSchemaDeserializer.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,10 @@ internal static partial class OpenApiV3Deserializer
280280
"example",
281281
(o, n, _, _) => o.Example = n
282282
},
283+
{
284+
OpenApiConstants.JsonSchemaExamplesExtension,
285+
(o, n, _, c) => o.Examples = n.CreateListOfAny(c)
286+
},
283287
{
284288
"deprecated",
285289
(o, n, _, _) =>

test/Microsoft.OpenApi.Tests/Models/OpenApiSchemaTests.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,6 +1920,76 @@ public void DeserializePatternPropertiesExtensionInV3AssignsPatternPropertiesPro
19201920
Assert.True(schema.Extensions is null || !schema.Extensions.ContainsKey("x-jsonschema-patternProperties"));
19211921
}
19221922

1923+
[Fact]
1924+
public void DeserializeExamplesExtensionInV2AssignsExamplesProperty()
1925+
{
1926+
var jsonContent = """
1927+
{
1928+
"swagger": "2.0",
1929+
"info": { "title": "Test", "version": "1.0" },
1930+
"paths": {},
1931+
"definitions": {
1932+
"TestSchema": {
1933+
"type": "string",
1934+
"example": "primary example",
1935+
"x-jsonschema-examples": [
1936+
"secondary example",
1937+
42
1938+
]
1939+
}
1940+
}
1941+
}
1942+
""";
1943+
1944+
var readResult = OpenApiDocument.Parse(jsonContent, "json");
1945+
1946+
Assert.Empty(readResult.Diagnostic.Errors);
1947+
var schema = readResult.Document.Components.Schemas["TestSchema"];
1948+
Assert.Equal("primary example", schema.Example?.GetValue<string>());
1949+
Assert.NotNull(schema.Examples);
1950+
Assert.Collection(
1951+
schema.Examples,
1952+
example => Assert.Equal("secondary example", example.GetValue<string>()),
1953+
example => Assert.Equal(42, example.GetValue<int>()));
1954+
Assert.True(schema.Extensions is null || !schema.Extensions.ContainsKey(OpenApiConstants.JsonSchemaExamplesExtension));
1955+
}
1956+
1957+
[Fact]
1958+
public void DeserializeExamplesExtensionInV3AssignsExamplesProperty()
1959+
{
1960+
var jsonContent = """
1961+
{
1962+
"openapi": "3.0.0",
1963+
"info": { "title": "Test", "version": "1.0" },
1964+
"paths": {},
1965+
"components": {
1966+
"schemas": {
1967+
"TestSchema": {
1968+
"type": "string",
1969+
"example": "primary example",
1970+
"x-jsonschema-examples": [
1971+
"secondary example",
1972+
42
1973+
]
1974+
}
1975+
}
1976+
}
1977+
}
1978+
""";
1979+
1980+
var readResult = OpenApiDocument.Parse(jsonContent, "json");
1981+
1982+
Assert.Empty(readResult.Diagnostic.Errors);
1983+
var schema = readResult.Document.Components.Schemas["TestSchema"];
1984+
Assert.Equal("primary example", schema.Example?.GetValue<string>());
1985+
Assert.NotNull(schema.Examples);
1986+
Assert.Collection(
1987+
schema.Examples,
1988+
example => Assert.Equal("secondary example", example.GetValue<string>()),
1989+
example => Assert.Equal(42, example.GetValue<int>()));
1990+
Assert.True(schema.Extensions is null || !schema.Extensions.ContainsKey(OpenApiConstants.JsonSchemaExamplesExtension));
1991+
}
1992+
19231993
[Fact]
19241994
public void DeserializeContainsExtensionsInV3AssignsContainsProperties()
19251995
{

0 commit comments

Comments
 (0)