Skip to content

Commit 704943c

Browse files
committed
fix: fixes inlining override when they should not happen
Signed-off-by: Vincent Biret <[email protected]>
1 parent 425335e commit 704943c

11 files changed

+51
-18
lines changed

src/Microsoft.OpenApi/Models/OpenApiReference.cs

+11-6
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,12 @@ public OpenApiReference(OpenApiReference reference)
158158
/// </summary>
159159
public void SerializeAsV31(IOpenApiWriter writer)
160160
{
161-
// summary and description are in 3.1 but not in 3.0
162-
writer.WriteProperty(OpenApiConstants.Summary, Summary);
163-
writer.WriteProperty(OpenApiConstants.Description, Description);
164-
165-
SerializeInternal(writer);
161+
SerializeInternal(writer, x =>
162+
{
163+
// summary and description are in 3.1 but not in 3.0
164+
writer.WriteProperty(OpenApiConstants.Summary, Summary);
165+
writer.WriteProperty(OpenApiConstants.Description, Description);
166+
});
166167
}
167168

168169
/// <summary>
@@ -176,7 +177,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
176177
/// <summary>
177178
/// Serialize <see cref="OpenApiReference"/>
178179
/// </summary>
179-
private void SerializeInternal(IOpenApiWriter writer)
180+
private void SerializeInternal(IOpenApiWriter writer, Action<IOpenApiWriter> callback = null)
180181
{
181182
Utils.CheckArgumentNull(writer);
182183

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

190191
writer.WriteStartObject();
192+
if (callback is not null)
193+
{
194+
callback(writer);
195+
}
191196

192197
// $ref
193198
writer.WriteProperty(OpenApiConstants.DollarRef, ReferenceV3);

src/Microsoft.OpenApi/Models/References/BaseOpenApiReferenceHolder.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
8080
}
8181
else
8282
{
83-
SerializeInternal(writer, (writer, element) => CopyReferenceAsTargetElementWithOverrides(element).SerializeAsV3(writer));
83+
SerializeInternal(writer, (writer, element) => element.SerializeAsV3(writer));
8484
}
8585
}
8686

@@ -106,7 +106,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
106106
}
107107
else
108108
{
109-
SerializeInternal(writer, (writer, element) => CopyReferenceAsTargetElementWithOverrides(element).SerializeAsV2(writer));
109+
SerializeInternal(writer, (writer, element) => element.SerializeAsV2(writer));
110110
}
111111
}
112112

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"description": "User request body",
3+
"$ref": "#/components/requestBodies/UserRequest"
4+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"description":"User request body","$ref":"#/components/requestBodies/UserRequest"}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"description": "User creation request body",
3+
"content": {
4+
"application/json": {
5+
"schema": {
6+
"type": "object",
7+
"properties": {
8+
"name": {
9+
"type": "string"
10+
},
11+
"email": {
12+
"type": "string"
13+
}
14+
}
15+
}
16+
}
17+
}
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"description":"User creation request body","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string"}}}}}}

test/Microsoft.OpenApi.Tests/Models/References/OpenApiRequestBodyReferenceTests.cs

+14-10
Original file line numberDiff line numberDiff line change
@@ -122,37 +122,41 @@ public void RequestBodyReferenceResolutionWorks()
122122
}
123123

124124
[Theory]
125-
[InlineData(true)]
126-
[InlineData(false)]
127-
public async Task SerializeRequestBodyReferenceAsV3JsonWorks(bool produceTerseOutput)
125+
[InlineData(true, true)]
126+
[InlineData(false, true)]
127+
[InlineData(true, false)]
128+
[InlineData(false, false)]
129+
public async Task SerializeRequestBodyReferenceAsV3JsonWorks(bool produceTerseOutput, bool inlineLocalReferences)
128130
{
129131
// Arrange
130132
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
131-
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput});
133+
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = inlineLocalReferences });
132134

133135
// Act
134136
_localRequestBodyReference.SerializeAsV3(writer);
135137
await writer.FlushAsync();
136138

137139
// Assert
138-
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
140+
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput, inlineLocalReferences);
139141
}
140142

141143
[Theory]
142-
[InlineData(true)]
143-
[InlineData(false)]
144-
public async Task SerializeRequestBodyReferenceAsV31JsonWorks(bool produceTerseOutput)
144+
[InlineData(true, true)]
145+
[InlineData(false, true)]
146+
[InlineData(true, false)]
147+
[InlineData(false, false)]
148+
public async Task SerializeRequestBodyReferenceAsV31JsonWorks(bool produceTerseOutput, bool inlineLocalReferences)
145149
{
146150
// Arrange
147151
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
148-
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true });
152+
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = inlineLocalReferences });
149153

150154
// Act
151155
_localRequestBodyReference.SerializeAsV31(writer);
152156
await writer.FlushAsync();
153157

154158
// Assert
155-
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
159+
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput, inlineLocalReferences);
156160
}
157161
}
158162
}

0 commit comments

Comments
 (0)