Skip to content

Commit 733185f

Browse files
committed
Add test and update API surface
1 parent 32f75a1 commit 733185f

File tree

2 files changed

+55
-13
lines changed

2 files changed

+55
-13
lines changed

test/Microsoft.OpenApi.Tests/Models/References/OpenApiHeaderReferenceTests.cs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace Microsoft.OpenApi.Tests.Models.References
1919
public class OpenApiHeaderReferenceTests
2020
{
2121
// OpenApi doc with external $ref
22-
private const string OpenApi= @"
22+
private const string OpenApi = @"
2323
openapi: 3.0.0
2424
info:
2525
title: Sample API
@@ -149,7 +149,7 @@ public async Task SerializeHeaderReferenceAsV2JsonWorksAsync(bool produceTerseOu
149149
{
150150
// Arrange
151151
var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture);
152-
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true});
152+
var writer = new OpenApiJsonWriter(outputStringWriter, new OpenApiJsonWriterSettings { Terse = produceTerseOutput, InlineLocalReferences = true });
153153

154154
// Act
155155
_localHeaderReference.SerializeAsV2(writer);
@@ -158,5 +158,34 @@ public async Task SerializeHeaderReferenceAsV2JsonWorksAsync(bool produceTerseOu
158158
// Assert
159159
await Verifier.Verify(outputStringWriter).UseParameters(produceTerseOutput);
160160
}
161+
162+
[Fact]
163+
public void OpenApiHeaderTargetShouldResolveReference()
164+
{
165+
var doc = new OpenApiDocument
166+
{
167+
Components = new OpenApiComponents
168+
{
169+
Headers = new System.Collections.Generic.Dictionary<string, OpenApiHeader>
170+
{
171+
{ "header1", new OpenApiHeader
172+
{
173+
Description = "test header",
174+
Schema = new OpenApiSchema
175+
{
176+
Type = JsonSchemaType.String
177+
}
178+
}
179+
}
180+
}
181+
}
182+
};
183+
184+
doc.Workspace.RegisterComponents(doc);
185+
186+
var headerReference = new OpenApiHeaderReference("header1", doc);
187+
Assert.Equal("test header", headerReference.Description);
188+
Assert.Equal(JsonSchemaType.String, headerReference.Schema.Type);
189+
}
161190
}
162191
}

test/Microsoft.OpenApi.Tests/PublicApi/PublicApi.approved.txt

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,10 @@ namespace Microsoft.OpenApi.Interfaces
222222
Microsoft.OpenApi.Models.OpenApiReference Reference { get; set; }
223223
bool UnresolvedReference { get; set; }
224224
}
225+
public interface IOpenApiReferenceableWithTarget<T> : Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
226+
{
227+
T Target { get; }
228+
}
225229
public interface IOpenApiSerializable : Microsoft.OpenApi.Interfaces.IOpenApiElement
226230
{
227231
void SerializeAsV2(Microsoft.OpenApi.Writers.IOpenApiWriter writer);
@@ -1095,17 +1099,19 @@ namespace Microsoft.OpenApi.Models
10951099
}
10961100
namespace Microsoft.OpenApi.Models.References
10971101
{
1098-
public class OpenApiCallbackReference : Microsoft.OpenApi.Models.OpenApiCallback
1102+
public class OpenApiCallbackReference : Microsoft.OpenApi.Models.OpenApiCallback, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiCallback>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
10991103
{
11001104
public OpenApiCallbackReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1105+
public Microsoft.OpenApi.Models.OpenApiCallback Target { get; }
11011106
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
11021107
public override System.Collections.Generic.Dictionary<Microsoft.OpenApi.Expressions.RuntimeExpression, Microsoft.OpenApi.Models.OpenApiPathItem> PathItems { get; set; }
11031108
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11041109
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11051110
}
1106-
public class OpenApiExampleReference : Microsoft.OpenApi.Models.OpenApiExample
1111+
public class OpenApiExampleReference : Microsoft.OpenApi.Models.OpenApiExample, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiExample>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
11071112
{
11081113
public OpenApiExampleReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1114+
public Microsoft.OpenApi.Models.OpenApiExample Target { get; }
11091115
public override string Description { get; set; }
11101116
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
11111117
public override string ExternalValue { get; set; }
@@ -1114,9 +1120,10 @@ namespace Microsoft.OpenApi.Models.References
11141120
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11151121
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11161122
}
1117-
public class OpenApiHeaderReference : Microsoft.OpenApi.Models.OpenApiHeader
1123+
public class OpenApiHeaderReference : Microsoft.OpenApi.Models.OpenApiHeader, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiHeader>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
11181124
{
11191125
public OpenApiHeaderReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1126+
public Microsoft.OpenApi.Models.OpenApiHeader Target { get; }
11201127
public override bool AllowEmptyValue { get; set; }
11211128
public override bool AllowReserved { get; set; }
11221129
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Models.OpenApiMediaType> Content { get; set; }
@@ -1133,9 +1140,10 @@ namespace Microsoft.OpenApi.Models.References
11331140
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11341141
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11351142
}
1136-
public class OpenApiLinkReference : Microsoft.OpenApi.Models.OpenApiLink
1143+
public class OpenApiLinkReference : Microsoft.OpenApi.Models.OpenApiLink, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiLink>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
11371144
{
11381145
public OpenApiLinkReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1146+
public Microsoft.OpenApi.Models.OpenApiLink Target { get; }
11391147
public override string Description { get; set; }
11401148
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
11411149
public override string OperationId { get; set; }
@@ -1146,9 +1154,10 @@ namespace Microsoft.OpenApi.Models.References
11461154
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11471155
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11481156
}
1149-
public class OpenApiParameterReference : Microsoft.OpenApi.Models.OpenApiParameter
1157+
public class OpenApiParameterReference : Microsoft.OpenApi.Models.OpenApiParameter, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiParameter>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
11501158
{
11511159
public OpenApiParameterReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1160+
public Microsoft.OpenApi.Models.OpenApiParameter Target { get; }
11521161
public override bool AllowEmptyValue { get; set; }
11531162
public override bool AllowReserved { get; set; }
11541163
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Models.OpenApiMediaType> Content { get; set; }
@@ -1167,9 +1176,10 @@ namespace Microsoft.OpenApi.Models.References
11671176
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11681177
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11691178
}
1170-
public class OpenApiPathItemReference : Microsoft.OpenApi.Models.OpenApiPathItem
1179+
public class OpenApiPathItemReference : Microsoft.OpenApi.Models.OpenApiPathItem, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiPathItem>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
11711180
{
11721181
public OpenApiPathItemReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1182+
public Microsoft.OpenApi.Models.OpenApiPathItem Target { get; }
11731183
public override string Description { get; set; }
11741184
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
11751185
public override System.Collections.Generic.IDictionary<Microsoft.OpenApi.Models.OperationType, Microsoft.OpenApi.Models.OpenApiOperation> Operations { get; set; }
@@ -1178,19 +1188,21 @@ namespace Microsoft.OpenApi.Models.References
11781188
public override string Summary { get; set; }
11791189
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11801190
}
1181-
public class OpenApiRequestBodyReference : Microsoft.OpenApi.Models.OpenApiRequestBody
1191+
public class OpenApiRequestBodyReference : Microsoft.OpenApi.Models.OpenApiRequestBody, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiRequestBody>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
11821192
{
11831193
public OpenApiRequestBodyReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1194+
public Microsoft.OpenApi.Models.OpenApiRequestBody Target { get; }
11841195
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Models.OpenApiMediaType> Content { get; set; }
11851196
public override string Description { get; set; }
11861197
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
11871198
public override bool Required { get; set; }
11881199
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11891200
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
11901201
}
1191-
public class OpenApiResponseReference : Microsoft.OpenApi.Models.OpenApiResponse
1202+
public class OpenApiResponseReference : Microsoft.OpenApi.Models.OpenApiResponse, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiResponse>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
11921203
{
11931204
public OpenApiResponseReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1205+
public Microsoft.OpenApi.Models.OpenApiResponse Target { get; }
11941206
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Models.OpenApiMediaType> Content { get; set; }
11951207
public override string Description { get; set; }
11961208
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
@@ -1200,7 +1212,7 @@ namespace Microsoft.OpenApi.Models.References
12001212
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12011213
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12021214
}
1203-
public class OpenApiSchemaReference : Microsoft.OpenApi.Models.OpenApiSchema
1215+
public class OpenApiSchemaReference : Microsoft.OpenApi.Models.OpenApiSchema, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiSchema>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
12041216
{
12051217
public OpenApiSchemaReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
12061218
public Microsoft.OpenApi.Models.OpenApiSchema? Target { get; }
@@ -1259,9 +1271,10 @@ namespace Microsoft.OpenApi.Models.References
12591271
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12601272
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12611273
}
1262-
public class OpenApiSecuritySchemeReference : Microsoft.OpenApi.Models.OpenApiSecurityScheme
1274+
public class OpenApiSecuritySchemeReference : Microsoft.OpenApi.Models.OpenApiSecurityScheme, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiSecurityScheme>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
12631275
{
12641276
public OpenApiSecuritySchemeReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument, string externalResource = null) { }
1277+
public Microsoft.OpenApi.Models.OpenApiSecurityScheme Target { get; }
12651278
public override string BearerFormat { get; set; }
12661279
public override string Description { get; set; }
12671280
public override System.Collections.Generic.IDictionary<string, Microsoft.OpenApi.Interfaces.IOpenApiExtension> Extensions { get; set; }
@@ -1275,7 +1288,7 @@ namespace Microsoft.OpenApi.Models.References
12751288
public override void SerializeAsV3(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12761289
public override void SerializeAsV31(Microsoft.OpenApi.Writers.IOpenApiWriter writer) { }
12771290
}
1278-
public class OpenApiTagReference : Microsoft.OpenApi.Models.OpenApiTag, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
1291+
public class OpenApiTagReference : Microsoft.OpenApi.Models.OpenApiTag, Microsoft.OpenApi.Interfaces.IOpenApiElement, Microsoft.OpenApi.Interfaces.IOpenApiReferenceable, Microsoft.OpenApi.Interfaces.IOpenApiReferenceableWithTarget<Microsoft.OpenApi.Models.OpenApiTag>, Microsoft.OpenApi.Interfaces.IOpenApiSerializable
12791292
{
12801293
public OpenApiTagReference(Microsoft.OpenApi.Models.References.OpenApiTagReference source) { }
12811294
public OpenApiTagReference(string referenceId, Microsoft.OpenApi.Models.OpenApiDocument hostDocument) { }

0 commit comments

Comments
 (0)