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 ;
@@ -22,7 +25,7 @@ public class OpenApiSchemaTests
22
25
{
23
26
public static OpenApiSchema BasicSchema = new ( ) ;
24
27
25
- public static OpenApiSchema AdvancedSchemaNumber = new ( )
28
+ public static readonly OpenApiSchema AdvancedSchemaNumber = new ( )
26
29
{
27
30
Title = "title1" ,
28
31
MultipleOf = 3 ,
@@ -39,7 +42,7 @@ public class OpenApiSchemaTests
39
42
}
40
43
} ;
41
44
42
- public static OpenApiSchema AdvancedSchemaObject = new ( )
45
+ public static readonly OpenApiSchema AdvancedSchemaObject = new ( )
43
46
{
44
47
Title = "title1" ,
45
48
Properties = new Dictionary < string , OpenApiSchema >
@@ -88,7 +91,7 @@ public class OpenApiSchemaTests
88
91
}
89
92
} ;
90
93
91
- public static OpenApiSchema AdvancedSchemaWithAllOf = new ( )
94
+ public static readonly OpenApiSchema AdvancedSchemaWithAllOf = new ( )
92
95
{
93
96
Title = "title1" ,
94
97
AllOf = new List < OpenApiSchema >
@@ -140,7 +143,7 @@ public class OpenApiSchemaTests
140
143
}
141
144
} ;
142
145
143
- public static OpenApiSchema ReferencedSchema = new ( )
146
+ public static readonly OpenApiSchema ReferencedSchema = new ( )
144
147
{
145
148
Title = "title1" ,
146
149
MultipleOf = 3 ,
@@ -163,7 +166,7 @@ public class OpenApiSchemaTests
163
166
}
164
167
} ;
165
168
166
- public static OpenApiSchema AdvancedSchemaWithRequiredPropertiesObject = new ( )
169
+ public static readonly OpenApiSchema AdvancedSchemaWithRequiredPropertiesObject = new ( )
167
170
{
168
171
Title = "title1" ,
169
172
Required = new HashSet < string > { "property1" } ,
@@ -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