Skip to content

Commit 25ab8f6

Browse files
authored
Merge branch 'master' into dm/release-1.0.0-beta016
2 parents 791ffad + d1a05fa commit 25ab8f6

File tree

3 files changed

+113
-2
lines changed

3 files changed

+113
-2
lines changed

src/Microsoft.OpenApi/Models/OpenApiParameter.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,13 @@ 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
263+
if (Schema?.UnresolvedReference == true || Schema?.Type == "object")
264+
{
265+
writer.WriteProperty(OpenApiConstants.Type, "string");
266+
}
260267
else
261268
{
262269
// type
@@ -291,7 +298,7 @@ public void SerializeAsV2WithoutReference(IOpenApiWriter writer)
291298
{
292299
writer.WriteProperty("collectionFormat", "pipes");
293300
}
294-
else if (this.Style == ParameterStyle.PipeDelimited)
301+
else if (this.Style == ParameterStyle.SpaceDelimited)
295302
{
296303
writer.WriteProperty("collectionFormat", "ssv");
297304
}

src/Microsoft.OpenApi/Models/SecuritySchemeType.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,5 @@ public enum SecuritySchemeType
2929
/// Use OAuth2 with OpenId Connect URL to discover OAuth2 configuration value.
3030
/// </summary>
3131
[Display("openIdConnect")] OpenIdConnect
32-
3332
}
3433
}

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

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,59 @@ 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+
UnresolvedReference = true
78+
},
79+
Examples = new Dictionary<string, OpenApiExample>
80+
{
81+
["test"] = new OpenApiExample
82+
{
83+
Summary = "summary3",
84+
Description = "description3"
85+
}
86+
}
87+
};
88+
89+
public static OpenApiParameter AdvancedHeaderParameterWithSchemaTypeObject = new OpenApiParameter
90+
{
91+
Name = "name1",
92+
In = ParameterLocation.Header,
93+
Description = "description1",
94+
Required = true,
95+
Deprecated = false,
96+
97+
Style = ParameterStyle.Simple,
98+
Explode = true,
99+
Schema = new OpenApiSchema
100+
{
101+
Type = "object"
102+
},
103+
Examples = new Dictionary<string, OpenApiExample>
104+
{
105+
["test"] = new OpenApiExample
106+
{
107+
Summary = "summary3",
108+
Description = "description3"
109+
}
110+
}
111+
};
112+
60113
private readonly ITestOutputHelper _output;
61114

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

0 commit comments

Comments
 (0)