Skip to content

Commit 1b67592

Browse files
Merge pull request #1774 from microsoft/mk/fix-examples-regression-bug
Fix examples serialization causing NullReferenceException
2 parents 60258b5 + a8a40ab commit 1b67592

File tree

4 files changed

+41
-25
lines changed

4 files changed

+41
-25
lines changed

src/Microsoft.OpenApi.Readers/Microsoft.OpenApi.Readers.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFramework>netstandard2.0</TargetFramework>
44
<LangVersion>latest</LangVersion>
55
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
6-
<Version>1.6.17</Version>
6+
<Version>1.6.18</Version>
77
<Description>OpenAPI.NET Readers for JSON and YAML documents</Description>
88
<SignAssembly>true</SignAssembly>
99
<!-- https://github.com/dotnet/sourcelink/blob/main/docs/README.md#embeduntrackedsources -->

src/Microsoft.OpenApi/Microsoft.OpenApi.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<TargetFramework>netstandard2.0</TargetFramework>
44
<LangVersion>Latest</LangVersion>
55
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
6-
<Version>1.6.17</Version>
6+
<Version>1.6.18</Version>
77
<Description>.NET models with JSON and YAML writers for OpenAPI specification</Description>
88
<SignAssembly>true</SignAssembly>
99
<!-- https://github.com/dotnet/sourcelink/blob/main/docs/README.md#embeduntrackedsources -->

src/Microsoft.OpenApi/Models/OpenApiMediaType.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ public void SerializeAsV3(IOpenApiWriter writer)
7777
writer.WriteOptionalObject(OpenApiConstants.Example, Example, (w, e) => w.WriteAny(e));
7878

7979
// examples
80-
SerializeExamples(writer, Examples);
80+
if (Examples != null && Examples.Any())
81+
{
82+
SerializeExamples(writer, Examples);
83+
}
8184

8285
// encoding
8386
writer.WriteOptionalMap(OpenApiConstants.Encoding, Encoding, (w, e) => e.SerializeAsV3(w));

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

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Globalization;
67
using System.IO;
@@ -1670,27 +1671,6 @@ private static OpenApiDocument ParseInputFile(string filePath)
16701671
return openApiDoc;
16711672
}
16721673

1673-
//[Fact]
1674-
//public void CopyConstructorForAdvancedDocumentWorks()
1675-
//{
1676-
// // Arrange & Act
1677-
// var doc = new OpenApiDocument(AdvancedDocument);
1678-
1679-
// var docOpId = doc.Paths["/pets"].Operations[OperationType.Get].OperationId = "findAllMyPets";
1680-
// var advancedDocOpId = AdvancedDocument.Paths["/pets"].Operations[OperationType.Get].OperationId;
1681-
// var responseSchemaTypeCopy = doc.Paths["/pets"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema.Type = "object";
1682-
// var advancedDocResponseSchemaType = AdvancedDocument.Paths["/pets"].Operations[OperationType.Get].Responses["200"].Content["application/json"].Schema.Type;
1683-
1684-
// // Assert
1685-
// Assert.NotNull(doc.Info);
1686-
// Assert.NotNull(doc.Servers);
1687-
// Assert.NotNull(doc.Paths);
1688-
// Assert.Equal(2, doc.Paths.Count);
1689-
// Assert.NotNull(doc.Components);
1690-
// Assert.NotEqual(docOpId, advancedDocOpId);
1691-
// Assert.NotEqual(responseSchemaTypeCopy, advancedDocResponseSchemaType);
1692-
//}
1693-
16941674
[Fact]
16951675
public void SerializeV2DocumentWithNonArraySchemaTypeDoesNotWriteOutCollectionFormat()
16961676
{
@@ -1858,5 +1838,38 @@ public void OpenApiDocumentCopyConstructorWithAnnotationsSucceeds()
18581838

18591839
Assert.NotEqual(baseDocument.Annotations["key1"], actualDocument.Annotations["key1"]);
18601840
}
1861-
}
1841+
1842+
[Fact]
1843+
public void SerializeExamplesDoesNotThrowNullReferenceException()
1844+
{
1845+
OpenApiDocument doc = new OpenApiDocument
1846+
{
1847+
Paths = new OpenApiPaths
1848+
{
1849+
["test"] = new OpenApiPathItem()
1850+
{
1851+
Operations = new Dictionary<OperationType, OpenApiOperation>()
1852+
{
1853+
[OperationType.Post] = new OpenApiOperation
1854+
{
1855+
RequestBody = new OpenApiRequestBody()
1856+
{
1857+
Content =
1858+
{
1859+
["application/json"] = new OpenApiMediaType()
1860+
{
1861+
Examples = null,
1862+
},
1863+
}
1864+
}
1865+
},
1866+
}
1867+
},
1868+
}
1869+
};
1870+
1871+
OpenApiJsonWriter apiWriter = new OpenApiJsonWriter(new StringWriter());
1872+
doc.Invoking(d => d.SerializeAsV3(apiWriter)).Should().NotThrow();
1873+
}
1874+
}
18621875
}

0 commit comments

Comments
 (0)