14
14
15
15
namespace Microsoft . OpenApi . Tests . Extensions
16
16
{
17
- public class DictionaryExtensionsTests
17
+ public class CollectionExtensionsTests
18
18
{
19
19
public static readonly OpenApiDocument Document = new OpenApiDocument
20
20
{
@@ -137,72 +137,73 @@ public class DictionaryExtensionsTests
137
137
}
138
138
} ;
139
139
140
- [ Fact ]
141
- public void SortEmptyDictionaryReturnsEmptyDictionary ( )
140
+ [ Theory ]
141
+ [ MemberData ( nameof ( OpenApiSpecVersions ) ) ]
142
+ public async Task SortOpenApiDocumentUsingCustomComparerSucceeds ( OpenApiSpecVersion version )
142
143
{
143
144
// Arrange
144
- Document . Components . Headers = new Dictionary < string , IOpenApiHeader > ( ) ;
145
+ var outputStringWriter = new StringWriter ( CultureInfo . InvariantCulture ) ;
146
+ var settings = new OpenApiWriterSettings
147
+ {
148
+ Comparer = StringComparer . OrdinalIgnoreCase
149
+ } ;
150
+ var writer = new OpenApiYamlWriter ( outputStringWriter , settings ) ;
145
151
146
152
// Act
147
- var sortedDictionary = Document . Components . Headers . Sort ( ) ;
153
+ Document . SerializeAs ( version , writer ) ;
154
+ await writer . FlushAsync ( ) ;
148
155
149
156
// Assert
150
- Assert . Empty ( sortedDictionary ) ;
157
+ await Verifier . Verify ( outputStringWriter ) . UseParameters ( version ) ;
151
158
}
152
159
153
160
[ Fact ]
154
- public async Task SortOpenApiDocumentLexicographicallySucceeds ( )
161
+ public async Task SortHashSetsWorks ( )
155
162
{
156
163
// Arrange
157
164
var expected = @"required:
158
165
- id
159
166
- name
160
- properties:
161
- id:
162
- type: integer
163
- format: int64
164
- name:
165
- type: string
166
- tag:
167
- type: string" ;
167
+ - tag" ;
168
+ var schema = new OpenApiSchema
169
+ {
170
+ Required = new HashSet < string > { "tag" , "id" , "name" } ,
171
+ } ;
168
172
169
173
var outputStringWriter = new StringWriter ( CultureInfo . InvariantCulture ) ;
170
174
var settings = new OpenApiWriterSettings
171
175
{
172
- EnableSorting = true
176
+ Comparer = StringComparer . OrdinalIgnoreCase
173
177
} ;
174
178
var writer = new OpenApiYamlWriter ( outputStringWriter , settings ) ;
175
179
176
180
// Act
177
- var schema = Document . Components . Schemas [ "pet" ] ;
178
-
179
181
schema . SerializeAsV3 ( writer ) ;
180
182
await writer . FlushAsync ( ) ;
181
- var actual = outputStringWriter . ToString ( ) ;
183
+ var sortedString = outputStringWriter . ToString ( ) ;
182
184
183
185
// Assert
184
- Assert . Equal ( expected . MakeLineBreaksEnvironmentNeutral ( ) , actual . MakeLineBreaksEnvironmentNeutral ( ) ) ;
186
+ Assert . Equal ( expected . MakeLineBreaksEnvironmentNeutral ( ) , sortedString . MakeLineBreaksEnvironmentNeutral ( ) ) ;
185
187
}
186
188
187
- [ Theory ]
188
- [ MemberData ( nameof ( OpenApiSpecVersions ) ) ]
189
- public async Task SortOpenApiDocumentUsingCustomComparerSucceeds ( OpenApiSpecVersion version )
189
+ [ Fact ]
190
+ public void SortTagsByNameUsingComparerWorks ( )
190
191
{
191
192
// Arrange
192
- var outputStringWriter = new StringWriter ( CultureInfo . InvariantCulture ) ;
193
- var settings = new OpenApiWriterSettings
193
+ var tags = new HashSet < OpenApiTag >
194
194
{
195
- KeyComparer = StringComparer . OrdinalIgnoreCase
195
+ new ( ) { Name = "three" } ,
196
+ new ( ) { Name = "two" } ,
197
+ new ( ) { Name = "one" }
196
198
} ;
197
- var writer = new OpenApiYamlWriter ( outputStringWriter , settings ) ;
198
199
199
200
// Act
200
- Document . SerializeAs ( version , writer ) ;
201
- await writer . FlushAsync ( ) ;
201
+ var sortedTags = tags . Sort ( new OpenApiTagNameComparer ( ) ) ;
202
202
203
203
// Assert
204
- await Verifier . Verify ( outputStringWriter ) . UseParameters ( version ) ;
205
- }
204
+ Assert . Equal ( 3 , sortedTags . Count ) ;
205
+ Assert . True ( sortedTags [ 0 ] . Name == "one" ) ;
206
+ }
206
207
207
208
public static TheoryData < OpenApiSpecVersion > OpenApiSpecVersions ( )
208
209
{
@@ -214,4 +215,12 @@ public static TheoryData<OpenApiSpecVersion> OpenApiSpecVersions()
214
215
return values ;
215
216
}
216
217
}
218
+
219
+ public class OpenApiTagNameComparer : IComparer < OpenApiTag >
220
+ {
221
+ public int Compare ( OpenApiTag tag1 , OpenApiTag tag2 )
222
+ {
223
+ return string . Compare ( tag1 . Name , tag2 . Name , StringComparison . OrdinalIgnoreCase ) ;
224
+ }
225
+ }
217
226
}
0 commit comments