Skip to content

Commit

Permalink
fix: fixes inlining override when they should not happen
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
  • Loading branch information
baywet committed Jan 27, 2025
1 parent 425335e commit 704943c
Show file tree
Hide file tree
Showing 11 changed files with 51 additions and 18 deletions.
17 changes: 11 additions & 6 deletions src/Microsoft.OpenApi/Models/OpenApiReference.cs
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,12 @@ public OpenApiReference(OpenApiReference reference)
/// </summary>
public void SerializeAsV31(IOpenApiWriter writer)
{
// summary and description are in 3.1 but not in 3.0
writer.WriteProperty(OpenApiConstants.Summary, Summary);
writer.WriteProperty(OpenApiConstants.Description, Description);

SerializeInternal(writer);
SerializeInternal(writer, x =>
{
// summary and description are in 3.1 but not in 3.0
writer.WriteProperty(OpenApiConstants.Summary, Summary);
writer.WriteProperty(OpenApiConstants.Description, Description);
});
}

/// <summary>
Expand All @@ -176,7 +177,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
/// <summary>
/// Serialize <see cref="OpenApiReference"/>
/// </summary>
private void SerializeInternal(IOpenApiWriter writer)
private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter> callback = null)
{
Utils.CheckArgumentNull(writer);

Expand All @@ -188,6 +189,10 @@ private void SerializeInternal(IOpenApiWriter writer)
}

writer.WriteStartObject();
if (callback is not null)
{
callback(writer);
}

// $ref
writer.WriteProperty(OpenApiConstants.DollarRef, ReferenceV3);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
}
else
{
SerializeInternal(writer, (writer, element) => CopyReferenceAsTargetElementWithOverrides(element).SerializeAsV3(writer));
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer));
}
}

Expand All @@ -106,7 +106,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
}
else
{
SerializeInternal(writer, (writer, element) => CopyReferenceAsTargetElementWithOverrides(element).SerializeAsV2(writer));
SerializeInternal(writer, (writer, element) => element.SerializeAsV2(writer));
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"description": "User request body",
"$ref": "#/components/requestBodies/UserRequest"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"description":"User request body","$ref":"#/components/requestBodies/UserRequest"}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"description": "User creation request body",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"email": {
"type": "string"
}
}
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"description":"User creation request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}}}}}}
Original file line number Diff line number Diff line change
Expand Up @@ -122,37 +122,41 @@ public void RequestBodyReferenceResolutionWorks()
}

[Theory]
[InlineData(true)]
[InlineData(false)]
public async Task SerializeRequestBodyReferenceAsV3JsonWorks(bool produceTerseOutput)
[InlineData(true, true)]
[InlineData(false, true)]
[InlineData(true, false)]
[InlineData(false, false)]
public async Task SerializeRequestBodyReferenceAsV3JsonWorks(bool produceTerseOutput, bool inlineLocalReferences)
{
// Arrange
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput});
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = inlineLocalReferences });

// Act
_localRequestBodyReference.SerializeAsV3(writer);
await writer.FlushAsync();

// Assert
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput, inlineLocalReferences);
}

[Theory]
[InlineData(true)]
[InlineData(false)]
public async Task SerializeRequestBodyReferenceAsV31JsonWorks(bool produceTerseOutput)
[InlineData(true, true)]
[InlineData(false, true)]
[InlineData(true, false)]
[InlineData(false, false)]
public async Task SerializeRequestBodyReferenceAsV31JsonWorks(bool produceTerseOutput, bool inlineLocalReferences)
{
// Arrange
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true });
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = inlineLocalReferences });

// Act
_localRequestBodyReference.SerializeAsV31(writer);
await writer.FlushAsync();

// Assert
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput, inlineLocalReferences);
}
}
}

0 comments on commit 704943c

Please sign in to comment.