Skip to content

Commit 981e4ef

Browse files
Copilotbaywet
andauthored
fix(openapi): omit null response descriptions
Co-authored-by: baywet <7905502+baywet@users.noreply.github.com>
1 parent cd4fa2e commit 981e4ef

3 files changed

Lines changed: 26 additions & 8 deletions

File tree

src/Microsoft.OpenApi/Models/OpenApiResponse.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
7373
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0, (writer, element) => element.SerializeAsV3(writer));
7474
}
7575

76-
private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
76+
private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
7777
Action<IOpenApiWriter, IOpenApiSerializable> callback)
7878
{
7979
Utils.CheckArgumentNull(writer);
@@ -87,7 +87,7 @@ private void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version
8787
}
8888

8989
// description
90-
writer.WriteRequiredProperty(OpenApiConstants.Description, Description);
90+
writer.WriteProperty(OpenApiConstants.Description, Description);
9191

9292
// headers
9393
writer.WriteOptionalMap(OpenApiConstants.Headers, Headers, callback);
@@ -120,7 +120,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
120120
writer.WriteStartObject();
121121

122122
// description
123-
writer.WriteRequiredProperty(OpenApiConstants.Description, Description);
123+
writer.WriteProperty(OpenApiConstants.Description, Description);
124124

125125
var extensionsClone = Extensions is not null ? new Dictionary<string, IOpenApiExtension>(Extensions) : null;
126126

@@ -177,7 +177,7 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
177177
// so remove it from the cloned collection so we don't write it again.
178178
extensionsClone?.Remove(key);
179179
}
180-
}
180+
}
181181
}
182182
}
183183

test/Microsoft.OpenApi.Tests/Mocks/OpenApiResponseSerializationTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System.IO;
22
using System.Net.Http;
3+
using System.Text.Json.Nodes;
4+
using System.Threading.Tasks;
35
using Moq;
46
using Xunit;
57

@@ -61,5 +63,25 @@ public void SerializeAsV3_DoesNotCallV31OrV2Serialization()
6163
_linkMock.Verify(l => l.SerializeAsV31(It.IsAny<IOpenApiWriter>()), Times.Never);
6264
_linkMock.Verify(l => l.SerializeAsV2(It.IsAny<IOpenApiWriter>()), Times.Never);
6365
}
66+
67+
[Theory]
68+
[InlineData(OpenApiSpecVersion.OpenApi2_0)]
69+
[InlineData(OpenApiSpecVersion.OpenApi3_0)]
70+
[InlineData(OpenApiSpecVersion.OpenApi3_1)]
71+
[InlineData(OpenApiSpecVersion.OpenApi3_2)]
72+
public async Task SerializeResponseWithoutDescriptionAsJsonDoesNotWriteNullDescription(OpenApiSpecVersion specVersion)
73+
{
74+
// Arrange
75+
var response = new OpenApiResponse();
76+
77+
// Act
78+
var actual = await response.SerializeAsJsonAsync(specVersion, TestContext.Current.CancellationToken);
79+
80+
// Assert
81+
var node = JsonNode.Parse(actual);
82+
Assert.NotNull(node);
83+
var responseObject = Assert.IsType<JsonObject>(node);
84+
Assert.False(responseObject.ContainsKey(OpenApiConstants.Description));
85+
}
6486
}
6587
}

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

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,6 @@ public async Task SerializeOperationWithBodyAsV3JsonWorks()
343343
"$ref": "#/components/responses/response1"
344344
},
345345
"400": {
346-
"description": null,
347346
"content": {
348347
"application/json": {
349348
"schema": {
@@ -416,7 +415,6 @@ public async Task SerializeAdvancedOperationWithTagAndSecurityAsV3JsonWorks()
416415
"$ref": "#/components/responses/response1"
417416
},
418417
"400": {
419-
"description": null,
420418
"content": {
421419
"application/json": {
422420
"schema": {
@@ -648,7 +646,6 @@ public async Task SerializeOperationWithBodyAsV2JsonWorks()
648646
"$ref": "#/responses/response1"
649647
},
650648
"400": {
651-
"description": null,
652649
"schema": {
653650
"type": "number",
654651
"maximum": 10,
@@ -718,7 +715,6 @@ public async Task SerializeAdvancedOperationWithTagAndSecurityAsV2JsonWorks()
718715
"$ref": "#/responses/response1"
719716
},
720717
"400": {
721-
"description": null,
722718
"schema": {
723719
"type": "number",
724720
"maximum": 10,

0 commit comments

Comments
 (0)