Skip to content

Commit dcc1e83

Browse files
Merge pull request #1440 from microsoft/mk/visit-openapischema-not
Visit OpenApiSchema.Not property in OpenApiWalker
2 parents e2ff502 + 67ce8f4 commit dcc1e83

File tree

2 files changed

+64
-5
lines changed

2 files changed

+64
-5
lines changed

src/Microsoft.OpenApi/Services/OpenApiWalker.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,11 @@ internal void Walk(OpenApiSchema schema, bool isComponent = false)
773773
Walk("items", () => Walk(schema.Items));
774774
}
775775

776+
if (schema.Not != null)
777+
{
778+
Walk("not", () => Walk(schema.Not));
779+
}
780+
776781
if (schema.AllOf != null)
777782
{
778783
Walk("allOf", () => Walk(schema.AllOf));

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

Lines changed: 59 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
// Copyright (c) Microsoft Corporation. All rights reserved.
22
// Licensed under the MIT license.
33

4+
using System;
45
using System.Collections.Generic;
56
using System.Globalization;
67
using System.IO;
8+
using System.Linq;
79
using System.Threading.Tasks;
810
using FluentAssertions;
911
using Microsoft.OpenApi.Any;
1012
using Microsoft.OpenApi.Extensions;
1113
using Microsoft.OpenApi.Interfaces;
1214
using Microsoft.OpenApi.Models;
15+
using Microsoft.OpenApi.Services;
1316
using Microsoft.OpenApi.Writers;
1417
using VerifyXunit;
1518
using Xunit;
@@ -22,7 +25,7 @@ public class OpenApiSchemaTests
2225
{
2326
public static OpenApiSchema BasicSchema = new();
2427

25-
public static OpenApiSchema AdvancedSchemaNumber = new()
28+
public static readonly OpenApiSchema AdvancedSchemaNumber = new()
2629
{
2730
Title = "title1",
2831
MultipleOf = 3,
@@ -39,7 +42,7 @@ public class OpenApiSchemaTests
3942
}
4043
};
4144

42-
public static OpenApiSchema AdvancedSchemaObject = new()
45+
public static readonly OpenApiSchema AdvancedSchemaObject = new()
4346
{
4447
Title = "title1",
4548
Properties = new Dictionary<string, OpenApiSchema>
@@ -88,7 +91,7 @@ public class OpenApiSchemaTests
8891
}
8992
};
9093

91-
public static OpenApiSchema AdvancedSchemaWithAllOf = new()
94+
public static readonly OpenApiSchema AdvancedSchemaWithAllOf = new()
9295
{
9396
Title = "title1",
9497
AllOf = new List<OpenApiSchema>
@@ -140,7 +143,7 @@ public class OpenApiSchemaTests
140143
}
141144
};
142145

143-
public static OpenApiSchema ReferencedSchema = new()
146+
public static readonly OpenApiSchema ReferencedSchema = new()
144147
{
145148
Title = "title1",
146149
MultipleOf = 3,
@@ -163,7 +166,7 @@ public class OpenApiSchemaTests
163166
}
164167
};
165168

166-
public static OpenApiSchema AdvancedSchemaWithRequiredPropertiesObject = new()
169+
public static readonly OpenApiSchema AdvancedSchemaWithRequiredPropertiesObject = new()
167170
{
168171
Title = "title1",
169172
Required = new HashSet<string> { "property1" },
@@ -506,5 +509,56 @@ public void CloningSchemaExtensionsWorks()
506509
};
507510
Assert.NotEqual(schema.Extensions, schemaCopy.Extensions);
508511
}
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+
}
509563
}
510564
}

0 commit comments

Comments
 (0)