Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f93d76a

Browse filesBrowse files
baywetCopilot
andcommitted
fix(library): use version-specific schema keyword callbacks
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent db41a3c commit f93d76a
Copy full SHA for f93d76a

2 files changed

+43-11Lines changed: 43 additions & 11 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/Microsoft.OpenApi/Models/OpenApiSchema.cs‎

Copy file name to clipboardExpand all lines: src/Microsoft.OpenApi/Models/OpenApiSchema.cs
+11-11Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
446446

447447
if (version == OpenApiSpecVersion.OpenApi3_1)
448448
{
449-
WriteJsonSchemaKeywords(writer);
449+
WriteJsonSchemaKeywords(writer, callback);
450450
}
451451

452452
// title
@@ -647,14 +647,14 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
647647
SerializeAsV2(writer: writer, parentRequiredProperties: new HashSet<string>(), propertyName: null);
648648
}
649649

650-
internal void WriteJsonSchemaKeywords(IOpenApiWriter writer)
650+
internal void WriteJsonSchemaKeywords(IOpenApiWriter writer, Action<IOpenApiWriter, IOpenApiSerializable> callback)
651651
{
652652
writer.WriteProperty(OpenApiConstants.Id, Id);
653653
writer.WriteProperty(OpenApiConstants.DollarSchema, Schema?.ToString());
654654
writer.WriteProperty(OpenApiConstants.Comment, Comment);
655655
writer.WriteProperty(OpenApiConstants.Const, Const);
656656
writer.WriteOptionalMap(OpenApiConstants.Vocabulary, Vocabulary, (w, s) => w.WriteValue(s));
657-
writer.WriteOptionalMap(OpenApiConstants.Defs, Definitions, (w, s) => s.SerializeAsV31(w));
657+
writer.WriteOptionalMap(OpenApiConstants.Defs, Definitions, callback);
658658
writer.WriteProperty(OpenApiConstants.Anchor, Anchor);
659659
writer.WriteProperty(OpenApiConstants.DynamicRef, DynamicRef);
660660
writer.WriteProperty(OpenApiConstants.DynamicAnchor, DynamicAnchor);
@@ -669,24 +669,24 @@ internal void WriteJsonSchemaKeywords(IOpenApiWriter writer)
669669
writer.WriteOptionalObject(
670670
OpenApiConstants.UnevaluatedProperties,
671671
UnevaluatedPropertiesSchema,
672-
(w, s) => s.SerializeAsV31(w));
672+
callback);
673673
}
674674
else if (!UnevaluatedProperties)
675675
{
676676
writer.WriteProperty(OpenApiConstants.UnevaluatedProperties, UnevaluatedProperties);
677677
}
678678
}
679679
writer.WriteOptionalCollection(OpenApiConstants.Examples, Examples, (nodeWriter, s) => nodeWriter.WriteAny(s));
680-
writer.WriteOptionalMap(OpenApiConstants.PatternProperties, PatternProperties, (w, s) => s.SerializeAsV31(w));
680+
writer.WriteOptionalMap(OpenApiConstants.PatternProperties, PatternProperties, callback);
681681
writer.WriteOptionalMap(OpenApiConstants.DependentRequired, DependentRequired, (w, s) => w.WriteValue(s));
682682
writer.WriteProperty(OpenApiConstants.ContentEncoding, ContentEncoding);
683683
writer.WriteProperty(OpenApiConstants.ContentMediaType, ContentMediaType);
684-
writer.WriteOptionalObject(OpenApiConstants.ContentSchema, ContentSchema, (w, s) => s.SerializeAsV31(w));
685-
writer.WriteOptionalObject(OpenApiConstants.PropertyNames, PropertyNames, (w, s) => s.SerializeAsV31(w));
686-
writer.WriteOptionalMap(OpenApiConstants.DependentSchemas, DependentSchemas, (w, s) => s.SerializeAsV31(w));
687-
writer.WriteOptionalObject(OpenApiConstants.If, If, (w, s) => s.SerializeAsV31(w));
688-
writer.WriteOptionalObject(OpenApiConstants.Then, Then, (w, s) => s.SerializeAsV31(w));
689-
writer.WriteOptionalObject(OpenApiConstants.Else, Else, (w, s) => s.SerializeAsV31(w));
684+
writer.WriteOptionalObject(OpenApiConstants.ContentSchema, ContentSchema, callback);
685+
writer.WriteOptionalObject(OpenApiConstants.PropertyNames, PropertyNames, callback);
686+
writer.WriteOptionalMap(OpenApiConstants.DependentSchemas, DependentSchemas, callback);
687+
writer.WriteOptionalObject(OpenApiConstants.If, If, callback);
688+
writer.WriteOptionalObject(OpenApiConstants.Then, Then, callback);
689+
writer.WriteOptionalObject(OpenApiConstants.Else, Else, callback);
690690
}
691691

692692
private void WriteV3CompatibilityKeywords(IOpenApiWriter writer, Action<IOpenApiWriter, IOpenApiSerializable> callback)
Collapse file

‎test/Microsoft.OpenApi.Tests/Mocks/OpenApiSchemaSerializationTests.cs‎

Copy file name to clipboardExpand all lines: test/Microsoft.OpenApi.Tests/Mocks/OpenApiSchemaSerializationTests.cs
+32Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,37 @@ public void SerializeAsV3_DoesNotCallV31OrV2Serialization()
4545
_xmlMock.Verify(c => c.SerializeAsV2(It.IsAny<IOpenApiWriter>()), Times.Never, "V2 method should not be called");
4646
_xmlMock.Verify(c => c.SerializeAsV31(It.IsAny<IOpenApiWriter>()), Times.Never, "V31 method should not be called");
4747
}
48+
49+
[Fact]
50+
public void SerializeAsV31_UsesV31CallbackForJsonSchemaKeywords()
51+
{
52+
using var stringWriter = new StringWriter();
53+
var writer = new OpenApiJsonWriter(stringWriter);
54+
var childSchemaMock = new Mock<OpenApiSchema> { CallBase = true };
55+
childSchemaMock.Object.Type = JsonSchemaType.String;
56+
_schema.ContentSchema = childSchemaMock.Object;
57+
58+
_schema.SerializeAsV31(writer);
59+
60+
childSchemaMock.Verify(c => c.SerializeAsV31(It.IsAny<IOpenApiWriter>()), Times.AtLeastOnce);
61+
childSchemaMock.Verify(c => c.SerializeAsV32(It.IsAny<IOpenApiWriter>()), Times.Never);
62+
childSchemaMock.Verify(c => c.SerializeAsV3(It.IsAny<IOpenApiWriter>()), Times.Never);
63+
}
64+
65+
[Fact]
66+
public void SerializeAsV32_UsesV32CallbackForJsonSchemaKeywords()
67+
{
68+
using var stringWriter = new StringWriter();
69+
var writer = new OpenApiJsonWriter(stringWriter);
70+
var childSchemaMock = new Mock<OpenApiSchema> { CallBase = true };
71+
childSchemaMock.Object.Type = JsonSchemaType.String;
72+
_schema.ContentSchema = childSchemaMock.Object;
73+
74+
_schema.SerializeAsV32(writer);
75+
76+
childSchemaMock.Verify(c => c.SerializeAsV32(It.IsAny<IOpenApiWriter>()), Times.AtLeastOnce);
77+
childSchemaMock.Verify(c => c.SerializeAsV31(It.IsAny<IOpenApiWriter>()), Times.Never);
78+
childSchemaMock.Verify(c => c.SerializeAsV3(It.IsAny<IOpenApiWriter>()), Times.Never);
79+
}
4880
}
4981
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.