|
1 | | -// Copyright (c) Microsoft Corporation. All rights reserved. |
| 1 | +// Copyright (c) Microsoft Corporation. All rights reserved. |
2 | 2 | // Licensed under the MIT license. |
3 | 3 |
|
4 | 4 | using System.Globalization; |
@@ -241,50 +241,53 @@ public async Task CopiesOverAllReferencedComponentsToTheSubsetDocumentCorrectly( |
241 | 241 | var doc = (await OpenApiDocument.LoadAsync(stream, "yaml", settings)).Document; |
242 | 242 |
|
243 | 243 | // validated the tags are read as references |
244 | | - var openApiOperationTags = doc.Paths["/items"].Operations[OperationType.Get].Tags?.ToArray(); |
| 244 | + var openApiOperationTags = doc?.Paths["/items"].Operations?[OperationType.Get].Tags?.ToArray(); |
245 | 245 | Assert.NotNull(openApiOperationTags); |
246 | 246 | Assert.Single(openApiOperationTags); |
247 | 247 | Assert.True(openApiOperationTags[0].UnresolvedReference); |
248 | 248 |
|
249 | 249 | var predicate = OpenApiFilterService.CreatePredicate(operationIds: operationIds); |
250 | | - var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); |
251 | | - |
252 | | - var response = subsetOpenApiDocument.Paths["/items"].Operations?[OperationType.Get]?.Responses?["200"]; |
253 | | - var responseHeader = response?.Headers?["x-custom-header"]; |
254 | | - var mediaTypeExample = response?.Content?["application/json"]?.Examples?.First().Value; |
255 | | - var targetHeaders = subsetOpenApiDocument.Components?.Headers; |
256 | | - var targetExamples = subsetOpenApiDocument.Components?.Examples; |
257 | | - |
258 | | - // Assert |
259 | | - Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); |
260 | | - var headerReference = Assert.IsType<OpenApiHeaderReference>(responseHeader); |
261 | | - Assert.False(headerReference.UnresolvedReference); |
262 | | - var exampleReference = Assert.IsType<OpenApiExampleReference>(mediaTypeExample); |
263 | | - Assert.False(exampleReference?.UnresolvedReference); |
264 | | - Assert.NotNull(targetHeaders); |
265 | | - Assert.Single(targetHeaders); |
266 | | - Assert.NotNull(targetExamples); |
267 | | - Assert.Single(targetExamples); |
268 | | - // validated the tags of the trimmed document are read as references |
269 | | - var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths["/items"].Operations[OperationType.Get].Tags?.ToArray(); |
270 | | - Assert.NotNull(trimmedOpenApiOperationTags); |
271 | | - Assert.Single(trimmedOpenApiOperationTags); |
272 | | - Assert.True(trimmedOpenApiOperationTags[0].UnresolvedReference); |
273 | | - |
274 | | - // Finally try to write the trimmed document as v3 document |
275 | | - var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); |
276 | | - var writer = new OpenApiJsonWriter(outputStringWriter) |
| 250 | + if (doc is not null) |
277 | 251 | { |
278 | | - Settings = new OpenApiWriterSettings() |
| 252 | + var subsetOpenApiDocument = OpenApiFilterService.CreateFilteredDocument(doc, predicate); |
| 253 | + |
| 254 | + var response = subsetOpenApiDocument.Paths["/items"].Operations?[OperationType.Get]?.Responses?["200"]; |
| 255 | + var responseHeader = response?.Headers?["x-custom-header"]; |
| 256 | + var mediaTypeExample = response?.Content?["application/json"]?.Examples?.First().Value; |
| 257 | + var targetHeaders = subsetOpenApiDocument.Components?.Headers; |
| 258 | + var targetExamples = subsetOpenApiDocument.Components?.Examples; |
| 259 | + |
| 260 | + // Assert |
| 261 | + Assert.Same(doc.Servers, subsetOpenApiDocument.Servers); |
| 262 | + var headerReference = Assert.IsType<OpenApiHeaderReference>(responseHeader); |
| 263 | + Assert.False(headerReference.UnresolvedReference); |
| 264 | + var exampleReference = Assert.IsType<OpenApiExampleReference>(mediaTypeExample); |
| 265 | + Assert.False(exampleReference?.UnresolvedReference); |
| 266 | + Assert.NotNull(targetHeaders); |
| 267 | + Assert.Single(targetHeaders); |
| 268 | + Assert.NotNull(targetExamples); |
| 269 | + Assert.Single(targetExamples); |
| 270 | + // validated the tags of the trimmed document are read as references |
| 271 | + var trimmedOpenApiOperationTags = subsetOpenApiDocument.Paths["/items"].Operations?[OperationType.Get].Tags?.ToArray(); |
| 272 | + Assert.NotNull(trimmedOpenApiOperationTags); |
| 273 | + Assert.Single(trimmedOpenApiOperationTags); |
| 274 | + Assert.True(trimmedOpenApiOperationTags[0].UnresolvedReference); |
| 275 | + |
| 276 | + // Finally try to write the trimmed document as v3 document |
| 277 | + var outputStringWriter = new StringWriter(CultureInfo.InvariantCulture); |
| 278 | + var writer = new OpenApiJsonWriter(outputStringWriter) |
279 | 279 | { |
280 | | - InlineExternalReferences = true, |
281 | | - InlineLocalReferences = true |
282 | | - } |
283 | | - }; |
284 | | - subsetOpenApiDocument.SerializeAsV3(writer); |
285 | | - await writer.FlushAsync(); |
286 | | - var result = outputStringWriter.ToString(); |
287 | | - Assert.NotEmpty(result); |
| 280 | + Settings = new OpenApiWriterSettings() |
| 281 | + { |
| 282 | + InlineExternalReferences = true, |
| 283 | + InlineLocalReferences = true |
| 284 | + } |
| 285 | + }; |
| 286 | + subsetOpenApiDocument.SerializeAsV3(writer); |
| 287 | + await writer.FlushAsync(); |
| 288 | + var result = outputStringWriter.ToString(); |
| 289 | + Assert.NotEmpty(result); |
| 290 | + } |
288 | 291 | } |
289 | 292 |
|
290 | 293 | [Theory] |
|
0 commit comments