Skip to content

Commit 96bb3f0

Browse files
authored
Merge pull request #160 from Microsoft/PerthCharern/Support3.0.1
Support v3.0.1
2 parents bdba12d + e615c34 commit 96bb3f0

26 files changed

+106
-99
lines changed

src/Microsoft.OpenApi.Readers/OpenApiStreamReader.cs

+15-8
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,22 @@ public OpenApiDocument Read(Stream input, out OpenApiDiagnostic diagnostic)
6565

6666
var inputVersion = GetVersion(rootNode);
6767

68-
switch (inputVersion)
68+
if ( inputVersion == "2.0")
6969
{
70-
case "2.0":
71-
context.ReferenceService = new OpenApiV2ReferenceService(rootNode);
72-
return OpenApiV2Deserializer.LoadOpenApi(rootNode);
73-
74-
default:
75-
context.ReferenceService = new OpenApiV3ReferenceService(rootNode);
76-
return OpenApiV3Deserializer.LoadOpenApi(rootNode);
70+
context.ReferenceService = new OpenApiV2ReferenceService(rootNode);
71+
return OpenApiV2Deserializer.LoadOpenApi(rootNode);
72+
}
73+
else if (inputVersion.StartsWith("3.0."))
74+
{
75+
context.ReferenceService = new OpenApiV3ReferenceService(rootNode);
76+
return OpenApiV3Deserializer.LoadOpenApi(rootNode);
77+
}
78+
else
79+
{
80+
// If version number is not recognizable,
81+
// our best effort will try to deserialize the document to V3.
82+
context.ReferenceService = new OpenApiV3ReferenceService(rootNode);
83+
return OpenApiV3Deserializer.LoadOpenApi(rootNode);
7784
}
7885
}
7986
}

src/Microsoft.OpenApi.Workbench/MainModel.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ private string WriteContents(OpenApiDocument document)
200200
var outputStream = new MemoryStream();
201201
document.Serialize(
202202
outputStream,
203-
IsV3 ? OpenApiSpecVersion.OpenApi3_0_0 : OpenApiSpecVersion.OpenApi2_0,
203+
IsV3 ? OpenApiSpecVersion.OpenApi3_0 : OpenApiSpecVersion.OpenApi2_0,
204204
_format == "Yaml" ? OpenApiFormat.Yaml : OpenApiFormat.Json);
205205

206206
outputStream.Position = 0;

src/Microsoft.OpenApi/Extensions/OpenApiSerializableExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public static void Serialize<T>(this T element, IOpenApiWriter writer, OpenApiSp
9999

100100
switch (specVersion)
101101
{
102-
case OpenApiSpecVersion.OpenApi3_0_0:
102+
case OpenApiSpecVersion.OpenApi3_0:
103103
element.SerializeAsV3(writer);
104104
break;
105105

src/Microsoft.OpenApi/Models/OpenApiDocument.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
namespace Microsoft.OpenApi.Models
1212
{
1313
/// <summary>
14-
/// Describes an Open API Document. See: https://swagger.io/specification
14+
/// Describes an OpenAPI object (OpenAPI document). See: https://swagger.io/specification
1515
/// </summary>
1616
public class OpenApiDocument : IOpenApiSerializable, IOpenApiExtensible
1717
{
@@ -57,7 +57,7 @@ public class OpenApiDocument : IOpenApiSerializable, IOpenApiExtensible
5757
public IDictionary<string, IOpenApiAny> Extensions { get; set; } = new Dictionary<string, IOpenApiAny>();
5858

5959
/// <summary>
60-
/// Serialize <see cref="OpenApiDocument"/> to Open Api v3.0.0
60+
/// Serialize <see cref="OpenApiDocument"/> to the latest patch of OpenAPI object V3.0.
6161
/// </summary>
6262
public void SerializeAsV3(IOpenApiWriter writer)
6363
{
@@ -69,7 +69,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
6969
writer.WriteStartObject();
7070

7171
// openapi
72-
writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.0");
72+
writer.WriteProperty(OpenApiConstants.OpenApi, "3.0.1");
7373

7474
// info
7575
writer.WriteRequiredObject(OpenApiConstants.Info, Info, (w, i) => i.SerializeAsV3(w));
@@ -102,7 +102,7 @@ public void SerializeAsV3(IOpenApiWriter writer)
102102
}
103103

104104
/// <summary>
105-
/// Serialize <see cref="OpenApiDocument"/> to Open Api v2.0.
105+
/// Serialize <see cref="OpenApiDocument"/> to OpenAPI object V2.0.
106106
/// </summary>
107107
public void SerializeAsV2(IOpenApiWriter writer)
108108
{

src/Microsoft.OpenApi/OpenApiSerializerSettings.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public sealed class OpenApiSerializerSettings
1111
/// <summary>
1212
/// Open Api specification version
1313
/// </summary>
14-
public OpenApiSpecVersion SpecVersion { get; set; } = OpenApiSpecVersion.OpenApi3_0_0;
14+
public OpenApiSpecVersion SpecVersion { get; set; } = OpenApiSpecVersion.OpenApi3_0;
1515

1616
/// <summary>
1717
/// Open Api document format.

src/Microsoft.OpenApi/OpenApiSpecVersion.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,18 @@
44
namespace Microsoft.OpenApi
55
{
66
/// <summary>
7-
/// Represents the Open Api specification version.
7+
/// Represents versions of OpenAPI specification.
88
/// </summary>
99
public enum OpenApiSpecVersion
1010
{
1111
/// <summary>
12-
/// Open Api v2.0
12+
/// Represents OpenAPI V2.0 spec
1313
/// </summary>
1414
OpenApi2_0,
1515

1616
/// <summary>
17-
/// Open Api v3.0.0
18-
/// </summary>
19-
OpenApi3_0_0
17+
/// Represents all patches of OpenAPI V3.0 spec (e.g. 3.0.0, 3.0.1)
18+
/// </summary>
19+
OpenApi3_0
2020
}
2121
}

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

+11-11
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ public void SerializeBasicComponentsAsJsonWorks()
259259
var expected = @"{ }";
260260

261261
// Act
262-
var actual = BasicComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0_0);
262+
var actual = BasicComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
263263

264264
// Assert
265265
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -274,7 +274,7 @@ public void SerializeBasicComponentsAsYamlWorks()
274274
var expected = @"{ }";
275275

276276
// Act
277-
var actual = BasicComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
277+
var actual = BasicComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
278278

279279
// Assert
280280
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -323,7 +323,7 @@ public void SerializeAdvancedComponentsAsJsonV3Works()
323323
}";
324324

325325
// Act
326-
var actual = AdvancedComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0_0);
326+
var actual = AdvancedComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
327327

328328
// Assert
329329
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -378,7 +378,7 @@ public void SerializeAdvancedComponentsWithReferenceAsJsonV3Works()
378378
}";
379379

380380
// Act
381-
var actual = AdvancedComponentsWithReference.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0_0);
381+
var actual = AdvancedComponentsWithReference.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
382382

383383
// Assert
384384
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -414,7 +414,7 @@ public void SerializeAdvancedComponentsAsYamlV3Works()
414414
openIdConnectUrl: https://example.com/openIdConnect";
415415

416416
// Act
417-
var actual = AdvancedComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
417+
var actual = AdvancedComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
418418

419419
// Assert
420420
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -453,7 +453,7 @@ public void SerializeAdvancedComponentsWithReferenceAsYamlV3Works()
453453
openIdConnectUrl: https://example.com/openIdConnect";
454454

455455
// Act
456-
var actual = AdvancedComponentsWithReference.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
456+
var actual = AdvancedComponentsWithReference.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
457457

458458
// Assert
459459
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -488,7 +488,7 @@ public void SerializeBrokenComponentsAsJsonWorks()
488488
}";
489489

490490
// Act
491-
var actual = BrokenComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0_0);
491+
var actual = BrokenComponents.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
492492

493493
// Assert
494494
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -515,7 +515,7 @@ public void SerializeBrokenComponentsAsYamlWorks()
515515
- ";
516516

517517
// Act
518-
var actual = BrokenComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
518+
var actual = BrokenComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
519519

520520
// Assert
521521
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -546,7 +546,7 @@ public void SerializeTopLevelReferencingComponentsAsYamlWorks()
546546
// type: string";
547547

548548
// Act
549-
var actual = TopLevelReferencingComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
549+
var actual = TopLevelReferencingComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
550550

551551
// Assert
552552
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -562,7 +562,7 @@ public void SerializeTopLevelSelfReferencingComponentsAsYamlWorks()
562562
schema1: { }";
563563

564564
// Act
565-
var actual = TopLevelSelfReferencingComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
565+
var actual = TopLevelSelfReferencingComponents.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
566566

567567
// Assert
568568
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -587,7 +587,7 @@ public void SerializeTopLevelSelfReferencingWithOtherPropertiesComponentsAsYamlW
587587
type: string";
588588

589589
// Act
590-
var actual = TopLevelSelfReferencingComponentsWithOtherProperties.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
590+
var actual = TopLevelSelfReferencingComponentsWithOtherProperties.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
591591

592592
// Assert
593593
actual = actual.MakeLineBreaksEnvironmentNeutral();

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ public class OpenApiContactTests
2828
};
2929

3030
[Theory]
31-
[InlineData(OpenApiSpecVersion.OpenApi3_0_0, OpenApiFormat.Json, "{ }")]
31+
[InlineData(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Json, "{ }")]
3232
[InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Json, "{ }")]
33-
[InlineData(OpenApiSpecVersion.OpenApi3_0_0, OpenApiFormat.Yaml, "{ }")]
33+
[InlineData(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml, "{ }")]
3434
[InlineData(OpenApiSpecVersion.OpenApi2_0, OpenApiFormat.Yaml, "{ }")]
3535
public void SerializeBasicContactWorks(
3636
OpenApiSpecVersion version,
@@ -47,7 +47,7 @@ public void SerializeBasicContactWorks(
4747
}
4848

4949
[Theory]
50-
[InlineData(OpenApiSpecVersion.OpenApi3_0_0)]
50+
[InlineData(OpenApiSpecVersion.OpenApi3_0)]
5151
[InlineData(OpenApiSpecVersion.OpenApi2_0)]
5252
public void SerializeAdvanceContactAsJsonWorks(OpenApiSpecVersion version)
5353
{
@@ -70,7 +70,7 @@ public void SerializeAdvanceContactAsJsonWorks(OpenApiSpecVersion version)
7070
}
7171

7272
[Theory]
73-
[InlineData(OpenApiSpecVersion.OpenApi3_0_0)]
73+
[InlineData(OpenApiSpecVersion.OpenApi3_0)]
7474
[InlineData(OpenApiSpecVersion.OpenApi2_0)]
7575
public void SerializeAdvanceContactAsYamlWorks(OpenApiSpecVersion version)
7676
{

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -796,7 +796,7 @@ public void SerializeAdvancedDocumentAsV3JsonWorks()
796796
var writer = new OpenApiJsonWriter(outputStringWriter);
797797
var expected =
798798
@"{
799-
""openapi"": ""3.0.0"",
799+
""openapi"": ""3.0.1"",
800800
""info"": {
801801
""title"": ""Swagger Petstore (Simple)"",
802802
""description"": ""A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification"",
@@ -1310,7 +1310,7 @@ public void SerializeAdvancedDocumentWithReferenceAsV3JsonWorks()
13101310
var writer = new OpenApiJsonWriter(outputStringWriter);
13111311
var expected =
13121312
@"{
1313-
""openapi"": ""3.0.0"",
1313+
""openapi"": ""3.0.1"",
13141314
""info"": {
13151315
""title"": ""Swagger Petstore (Simple)"",
13161316
""description"": ""A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification"",

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public class OpenApiEncodingTests
2727
public void SerializeBasicEncodingAsV3Works(OpenApiFormat format, string expected)
2828
{
2929
// Arrange & Act
30-
var actual = BasicEncoding.Serialize(OpenApiSpecVersion.OpenApi3_0_0, format);
30+
var actual = BasicEncoding.Serialize(OpenApiSpecVersion.OpenApi3_0, format);
3131

3232
// Assert
3333
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -48,7 +48,7 @@ public void SerializeAdvanceEncodingAsV3JsonWorks()
4848
}";
4949

5050
// Act
51-
var actual = AdvanceEncoding.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0_0);
51+
var actual = AdvanceEncoding.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
5252

5353
// Assert
5454
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -67,7 +67,7 @@ public void SerializeAdvanceEncodingAsV3YamlWorks()
6767
allowReserved: true";
6868

6969
// Act
70-
var actual = AdvanceEncoding.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
70+
var actual = AdvanceEncoding.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
7171

7272
// Assert
7373
actual = actual.MakeLineBreaksEnvironmentNeutral();

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class OpenApiExternalDocsTests
2828
public void SerializeBasicExternalDocsAsV3Works(OpenApiFormat format, string expected)
2929
{
3030
// Arrange & Act
31-
var actual = BasicExDocs.Serialize(OpenApiSpecVersion.OpenApi3_0_0, format);
31+
var actual = BasicExDocs.Serialize(OpenApiSpecVersion.OpenApi3_0, format);
3232

3333
// Assert
3434
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -47,7 +47,7 @@ public void SerializeAdvanceExDocsAsV3JsonWorks()
4747
}";
4848

4949
// Act
50-
var actual = AdvanceExDocs.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0_0);
50+
var actual = AdvanceExDocs.SerializeAsJson(OpenApiSpecVersion.OpenApi3_0);
5151

5252
// Assert
5353
actual = actual.MakeLineBreaksEnvironmentNeutral();
@@ -64,7 +64,7 @@ public void SerializeAdvanceExDocsAsV3YamlWorks()
6464
url: https://example.com";
6565

6666
// Act
67-
var actual = AdvanceExDocs.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0_0);
67+
var actual = AdvanceExDocs.SerializeAsYaml(OpenApiSpecVersion.OpenApi3_0);
6868

6969
// Assert
7070
actual = actual.MakeLineBreaksEnvironmentNeutral();

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

+5-5
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class OpenApiInfoTests
3636

3737
public static IEnumerable<object[]> BasicInfoJsonExpected()
3838
{
39-
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0_0, OpenApiSpecVersion.OpenApi2_0};
39+
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0, OpenApiSpecVersion.OpenApi2_0};
4040
foreach (var specVersion in specVersions)
4141
{
4242
yield return new object[]
@@ -65,7 +65,7 @@ public void SerializeBasicInfoAsJsonWorks(OpenApiSpecVersion version, string exp
6565

6666
public static IEnumerable<object[]> BasicInfoYamlExpected()
6767
{
68-
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0_0, OpenApiSpecVersion.OpenApi2_0};
68+
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0, OpenApiSpecVersion.OpenApi2_0};
6969
foreach (var specVersion in specVersions)
7070
{
7171
yield return new object[]
@@ -92,7 +92,7 @@ public void SerializeBasicInfoAsYamlWorks(OpenApiSpecVersion version, string exp
9292

9393
public static IEnumerable<object[]> AdvanceInfoJsonExpect()
9494
{
95-
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0_0, OpenApiSpecVersion.OpenApi2_0};
95+
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0, OpenApiSpecVersion.OpenApi2_0};
9696
foreach (var specVersion in specVersions)
9797
{
9898
yield return new object[]
@@ -135,7 +135,7 @@ public void SerializeAdvanceInfoAsJsonWorks(OpenApiSpecVersion version, string e
135135

136136
public static IEnumerable<object[]> AdvanceInfoYamlExpect()
137137
{
138-
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0_0, OpenApiSpecVersion.OpenApi2_0};
138+
var specVersions = new[] {OpenApiSpecVersion.OpenApi3_0, OpenApiSpecVersion.OpenApi2_0};
139139
foreach (var specVersion in specVersions)
140140
{
141141
yield return new object[]
@@ -187,7 +187,7 @@ public void InfoVersionShouldAcceptDateStyledAsVersions()
187187
version: '2017-03-01'";
188188

189189
// Act
190-
var actual = info.Serialize(OpenApiSpecVersion.OpenApi3_0_0, OpenApiFormat.Yaml);
190+
var actual = info.Serialize(OpenApiSpecVersion.OpenApi3_0, OpenApiFormat.Yaml);
191191

192192
// Assert
193193
actual = actual.MakeLineBreaksEnvironmentNeutral();

0 commit comments

Comments
 (0)