Skip to content

Commit 24222f6

Browse files
committed
V2 Serializer: Map custom type as string for parameter
1 parent 47e5cfd commit 24222f6

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,12 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
257257
{
258258
writer.WriteOptionalObject(OpenApiConstants.Schema, Schema, (w, s) => s.SerializeAsV2(w));
259259
}
260+
// In V2 parameter's type can't be a reference to a custom object schema or can't be of type object
261+
// So in that case map the type as string.
262+
else if (Schema?.Reference?.Type == ReferenceType.Schema || Schema?.Type == "object")
263+
{
264+
writer.WriteProperty(OpenApiConstants.Type, "string");
265+
}
260266
else
261267
{
262268
// type

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

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,58 @@ public class OpenApiParameterTests
5757
}
5858
};
5959

60+
public static OpenApiParameter AdvancedHeaderParameterWithSchemaReference = new OpenApiParameter
61+
{
62+
Name = "name1",
63+
In = ParameterLocation.Header,
64+
Description = "description1",
65+
Required = true,
66+
Deprecated = false,
67+
68+
Style = ParameterStyle.Simple,
69+
Explode = true,
70+
Schema = new OpenApiSchema
71+
{
72+
Reference = new OpenApiReference
73+
{
74+
Type = ReferenceType.Schema,
75+
Id = "schemaObject1"
76+
}
77+
},
78+
Examples = new List<OpenApiExample>
79+
{
80+
new OpenApiExample
81+
{
82+
Summary = "summary3",
83+
Description = "description3"
84+
}
85+
}
86+
};
87+
88+
public static OpenApiParameter AdvancedHeaderParameterWithSchemaTypeObject = new OpenApiParameter
89+
{
90+
Name = "name1",
91+
In = ParameterLocation.Header,
92+
Description = "description1",
93+
Required = true,
94+
Deprecated = false,
95+
96+
Style = ParameterStyle.Simple,
97+
Explode = true,
98+
Schema = new OpenApiSchema
99+
{
100+
Type = "object"
101+
},
102+
Examples = new List<OpenApiExample>
103+
{
104+
new OpenApiExample
105+
{
106+
Summary = "summary3",
107+
Description = "description3"
108+
}
109+
}
110+
};
111+
60112
private readonly ITestOutputHelper _output;
61113

62114
public OpenApiParameterTests(ITestOutputHelper output)
@@ -203,5 +255,57 @@ public void SerializeReferencedParameterAsV2JsonWithoutReferenceWorks()
203255
expected = expected.MakeLineBreaksEnvironmentNeutral();
204256
actual.Should().Be(expected);
205257
}
258+
259+
[Fact]
260+
public void SerializeParameterWithSchemaReferenceAsV2JsonWorks()
261+
{
262+
// Arrange
263+
var outputStringWriter = new StringWriter();
264+
var writer = new OpenApiJsonWriter(outputStringWriter);
265+
var expected =
266+
@"{
267+
""in"": ""header"",
268+
""name"": ""name1"",
269+
""description"": ""description1"",
270+
""required"": true,
271+
""type"": ""string""
272+
}";
273+
274+
// Act
275+
AdvancedHeaderParameterWithSchemaReference.SerializeAsV2(writer);
276+
writer.Flush();
277+
var actual = outputStringWriter.GetStringBuilder().ToString();
278+
279+
// Assert
280+
actual = actual.MakeLineBreaksEnvironmentNeutral();
281+
expected = expected.MakeLineBreaksEnvironmentNeutral();
282+
actual.Should().Be(expected);
283+
}
284+
285+
[Fact]
286+
public void SerializeParameterWithSchemaTypeObjectAsV2JsonWorks()
287+
{
288+
// Arrange
289+
var outputStringWriter = new StringWriter();
290+
var writer = new OpenApiJsonWriter(outputStringWriter);
291+
var expected =
292+
@"{
293+
""in"": ""header"",
294+
""name"": ""name1"",
295+
""description"": ""description1"",
296+
""required"": true,
297+
""type"": ""string""
298+
}";
299+
300+
// Act
301+
AdvancedHeaderParameterWithSchemaTypeObject.SerializeAsV2(writer);
302+
writer.Flush();
303+
var actual = outputStringWriter.GetStringBuilder().ToString();
304+
305+
// Assert
306+
actual = actual.MakeLineBreaksEnvironmentNeutral();
307+
expected = expected.MakeLineBreaksEnvironmentNeutral();
308+
actual.Should().Be(expected);
309+
}
206310
}
207311
}

0 commit comments

Comments
 (0)