Skip to content

Commit 095ae3b

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

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
@@ -1914,6 +1914,76 @@ public void DeserializePatternPropertiesExtensionInV3AssignsPatternPropertiesPro
19141914
Assert.True(schema.Extensions is null || !schema.Extensions.ContainsKey("x-jsonschema-patternProperties"));
19151915
}
19161916

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

0 commit comments

Comments
 (0)