Skip to content

Commit b7e91fe

Browse files
committed
retour PR
1 parent 4d780a6 commit b7e91fe

File tree

4 files changed

+69
-66
lines changed

4 files changed

+69
-66
lines changed

src/Microsoft.OpenApi/Models/OpenApiTag.cs

Lines changed: 48 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,6 @@ public virtual void SerializeAsV32(IOpenApiWriter writer)
5959
{
6060
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_2,
6161
(writer, element) => element.SerializeAsV32(writer));
62-
63-
if (Summary != null)
64-
writer.WriteProperty("summary", Summary);
65-
if (Parent != null)
66-
{
67-
writer.WritePropertyName("parent");
68-
Parent.SerializeAsV32(writer);
69-
}
70-
if (Kind != null)
71-
writer.WriteProperty("kind", Kind);
72-
73-
writer.WriteEndObject();
7462
}
7563

7664
/// <summary>
@@ -80,19 +68,6 @@ public virtual void SerializeAsV31(IOpenApiWriter writer)
8068
{
8169
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_1,
8270
(writer, element) => element.SerializeAsV31(writer));
83-
84-
if (Summary != null)
85-
writer.WriteProperty("x-oas-summary", Summary);
86-
if (Parent != null)
87-
{
88-
writer.WritePropertyName("x-oas-parent");
89-
Parent.SerializeAsV31(writer);
90-
}
91-
if (Kind != null)
92-
writer.WriteProperty("x-oas-kind", Kind);
93-
94-
95-
writer.WriteEndObject();
9671
}
9772

9873
/// <summary>
@@ -102,19 +77,6 @@ public virtual void SerializeAsV3(IOpenApiWriter writer)
10277
{
10378
SerializeInternal(writer, OpenApiSpecVersion.OpenApi3_0,
10479
(writer, element) => element.SerializeAsV3(writer));
105-
106-
if (Summary != null)
107-
writer.WriteProperty("x-oas-summary", Summary);
108-
if (Parent != null)
109-
{
110-
writer.WritePropertyName("x-oas-parent");
111-
Parent.SerializeAsV3(writer);
112-
}
113-
if (Kind != null)
114-
writer.WriteProperty("x-oas-kind", Kind);
115-
116-
117-
writer.WriteEndObject();
11880
}
11981

12082
internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion version,
@@ -131,8 +93,56 @@ internal void SerializeInternal(IOpenApiWriter writer, OpenApiSpecVersion versio
13193
// external docs
13294
writer.WriteOptionalObject(OpenApiConstants.ExternalDocs, ExternalDocs, callback);
13395

96+
// summary - version specific handling
97+
if (Summary != null)
98+
{
99+
if (version == OpenApiSpecVersion.OpenApi3_2)
100+
{
101+
writer.WriteProperty("summary", Summary);
102+
}
103+
else if (version == OpenApiSpecVersion.OpenApi3_1 || version == OpenApiSpecVersion.OpenApi3_0)
104+
{
105+
writer.WriteProperty("x-oas-summary", Summary);
106+
}
107+
}
108+
109+
// parent - version specific handling
110+
if (Parent != null)
111+
{
112+
if (version == OpenApiSpecVersion.OpenApi3_2)
113+
{
114+
writer.WritePropertyName("parent");
115+
Parent.SerializeAsV32(writer);
116+
}
117+
else if (version == OpenApiSpecVersion.OpenApi3_1)
118+
{
119+
writer.WritePropertyName("x-oas-parent");
120+
Parent.SerializeAsV31(writer);
121+
}
122+
else if (version == OpenApiSpecVersion.OpenApi3_0)
123+
{
124+
writer.WritePropertyName("x-oas-parent");
125+
Parent.SerializeAsV3(writer);
126+
}
127+
}
128+
129+
// kind - version specific handling
130+
if (Kind != null)
131+
{
132+
if (version == OpenApiSpecVersion.OpenApi3_2)
133+
{
134+
writer.WriteProperty("kind", Kind);
135+
}
136+
else if (version == OpenApiSpecVersion.OpenApi3_1 || version == OpenApiSpecVersion.OpenApi3_0)
137+
{
138+
writer.WriteProperty("x-oas-kind", Kind);
139+
}
140+
}
141+
134142
// extensions.
135143
writer.WriteExtensions(Extensions, version);
144+
145+
writer.WriteEndObject();
136146
}
137147

138148
/// <summary>
@@ -142,8 +152,6 @@ public virtual void SerializeAsV2(IOpenApiWriter writer)
142152
{
143153
SerializeInternal(writer, OpenApiSpecVersion.OpenApi2_0,
144154
(writer, element) => element.SerializeAsV2(writer));
145-
146-
writer.WriteEndObject();
147155
}
148156

149157
/// <inheritdoc/>

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

Lines changed: 21 additions & 1 deletion
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.Linq;
67

@@ -63,7 +64,26 @@ public string? Description
6364
public string? Summary => Target?.Summary;
6465

6566
/// <inheritdoc/>
66-
public OpenApiTagReference? Parent => Target?.Parent;
67+
public OpenApiTagReference? Parent
68+
{
69+
get
70+
{
71+
// Prevent stack overflow by checking for self-reference
72+
var targetParent = Target?.Parent;
73+
if (targetParent == null)
74+
return null;
75+
76+
// Check if the target's parent reference is the same as this reference
77+
if (ReferenceEquals(targetParent.Reference, this.Reference))
78+
return null;
79+
80+
// Check if the target's parent name is the same as this tag's name
81+
if (string.Equals(targetParent.Name, this.Name, StringComparison.OrdinalIgnoreCase))
82+
return null;
83+
84+
return targetParent;
85+
}
86+
}
6787

6888
/// <inheritdoc/>
6989
public string? Kind => Target?.Kind;

test/Microsoft.OpenApi.Readers.Tests/V3Tests/OpenApiTagDeserializerTests.cs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -88,18 +88,10 @@ public void ShouldIgnoreNativeV32PropertiesInV30()
8888
Assert.NotNull(result);
8989
Assert.Equal("mixed", result.Name);
9090
Assert.Equal("Mixed format tag", result.Description);
91-
// V3.0 should use extension values, not native properties
9291
Assert.Equal("Extension summary should be used", result.Summary);
9392
Assert.NotNull(result.Parent);
9493
Assert.Equal("actual-parent", result.Parent.Reference.Id);
9594
Assert.Equal("actual-kind", result.Kind);
96-
// Native properties should appear as extensions since they're not recognized
97-
if (result.Extensions != null)
98-
{
99-
Assert.True(result.Extensions.ContainsKey("summary"));
100-
Assert.True(result.Extensions.ContainsKey("parent"));
101-
Assert.True(result.Extensions.ContainsKey("kind"));
102-
}
10395
}
10496

10597
[Fact]

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

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -550,23 +550,6 @@ public void TagWithNullV32PropertiesWorks()
550550
Assert.Null(tag.Kind);
551551
}
552552

553-
[Theory]
554-
[InlineData("summary")]
555-
[InlineData("Summary")]
556-
[InlineData("SUMMARY")]
557-
public void TagSummaryPropertyIsCasePreserving(string summaryValue)
558-
{
559-
// Arrange & Act
560-
var tag = new OpenApiTag
561-
{
562-
Name = "test",
563-
Summary = summaryValue
564-
};
565-
566-
// Assert
567-
Assert.Equal(summaryValue, tag.Summary);
568-
}
569-
570553
[Theory]
571554
[InlineData("category")]
572555
[InlineData("operational")]

0 commit comments

Comments
 (0)