|
1 | 1 | // Copyright (c) Microsoft Corporation. All rights reserved.
|
2 | 2 | // Licensed under the MIT license.
|
3 | 3 |
|
| 4 | +using System; |
4 | 5 | using System.Collections.Generic;
|
5 | 6 | using System.Globalization;
|
6 | 7 | using System.IO;
|
| 8 | +using System.Linq; |
7 | 9 | using System.Threading.Tasks;
|
8 | 10 | using FluentAssertions;
|
9 | 11 | using Microsoft.OpenApi.Any;
|
10 | 12 | using Microsoft.OpenApi.Extensions;
|
11 | 13 | using Microsoft.OpenApi.Interfaces;
|
12 | 14 | using Microsoft.OpenApi.Models;
|
| 15 | +using Microsoft.OpenApi.Services; |
13 | 16 | using Microsoft.OpenApi.Writers;
|
14 | 17 | using VerifyXunit;
|
15 | 18 | using Xunit;
|
@@ -506,5 +509,56 @@ public void CloningSchemaExtensionsWorks()
|
506 | 509 | };
|
507 | 510 | Assert.NotEqual(schema.Extensions, schemaCopy.Extensions);
|
508 | 511 | }
|
| 512 | + |
| 513 | + [Fact] |
| 514 | + public void OpenApiWalkerVisitsOpenApiSchemaNot() |
| 515 | + { |
| 516 | + var outerSchema = new OpenApiSchema() |
| 517 | + { |
| 518 | + Title = "Outer Schema", |
| 519 | + Not = new OpenApiSchema() |
| 520 | + { |
| 521 | + Title = "Inner Schema", |
| 522 | + Type = "string", |
| 523 | + } |
| 524 | + }; |
| 525 | + |
| 526 | + var document = new OpenApiDocument() |
| 527 | + { |
| 528 | + Paths = new OpenApiPaths() |
| 529 | + { |
| 530 | + ["/foo"] = new OpenApiPathItem() |
| 531 | + { |
| 532 | + Parameters = new[] |
| 533 | + { |
| 534 | + new OpenApiParameter() |
| 535 | + { |
| 536 | + Name = "foo", |
| 537 | + In = ParameterLocation.Query, |
| 538 | + Schema = outerSchema, |
| 539 | + } |
| 540 | + } |
| 541 | + } |
| 542 | + } |
| 543 | + }; |
| 544 | + |
| 545 | + // Act |
| 546 | + var visitor = new SchemaVisitor(); |
| 547 | + var walker = new OpenApiWalker(visitor); |
| 548 | + walker.Walk(document); |
| 549 | + |
| 550 | + // Assert |
| 551 | + visitor.Titles.Count.Should().Be(2); |
| 552 | + } |
| 553 | + } |
| 554 | + |
| 555 | + internal class SchemaVisitor : OpenApiVisitorBase |
| 556 | + { |
| 557 | + public List<string> Titles = new(); |
| 558 | + |
| 559 | + public override void Visit(OpenApiSchema schema) |
| 560 | + { |
| 561 | + Titles.Add(schema.Title); |
| 562 | + } |
509 | 563 | }
|
510 | 564 | }
|
0 commit comments