11using System . IO ;
2+ using System . Threading ;
23using System . Threading . Tasks ;
34using Xunit ;
45
56namespace Microsoft . OpenApi . Tests . Extensions ;
67
78public class OpenApiSerializableExtensionsTests
89{
9- [ Fact ]
10- public async Task UsesTheTerseOutputInformationFromSettingsTrue ( )
10+ private const string TerseOutput = "{\" name\" :\" param1\" ,\" in\" :\" query\" ,\" description\" :\" A sample parameter\" ,\" schema\" :{\" type\" :\" string\" }}" ;
11+ private const string PrettyOutput = "{\n \" name\" : \" param1\" ,\n \" in\" : \" query\" ,\n \" description\" : \" A sample parameter\" ,\n \" schema\" : {\n \" type\" : \" string\" \n }\n }" ;
12+
13+ private static OpenApiParameter CreateParameter ( ) => new ( )
1114 {
12- var parameter = new OpenApiParameter
13- {
14- Name = "param1" ,
15- In = ParameterLocation . Query ,
16- Description = "A sample parameter" ,
17- Required = false ,
18- Schema = new OpenApiSchema
19- {
20- Type = JsonSchemaType . String
21- }
22- } ;
23-
24- var settings = new OpenApiJsonWriterSettings
15+ Name = "param1" ,
16+ In = ParameterLocation . Query ,
17+ Description = "A sample parameter" ,
18+ Required = false ,
19+ Schema = new OpenApiSchema
2520 {
26- Terse = true
27- } ;
21+ Type = JsonSchemaType . String
22+ }
23+ } ;
24+
25+ // ——————————————————————————————————————————————————————————
26+ // SerializeAsync to Stream with format and settings
27+ // ——————————————————————————————————————————————————————————
28+
29+ [ Fact ]
30+ public async Task SerializeAsV31JsonToStreamWithTerseSettingsWorks ( )
31+ {
32+ var parameter = CreateParameter ( ) ;
33+ var settings = new OpenApiJsonWriterSettings { Terse = true } ;
2834
2935 using var stream = new MemoryStream ( ) ;
3036 await parameter . SerializeAsync ( stream , OpenApiSpecVersion . OpenApi3_1 , OpenApiConstants . Json , settings ) ;
@@ -33,28 +39,14 @@ public async Task UsesTheTerseOutputInformationFromSettingsTrue()
3339 using var reader = new StreamReader ( stream ) ;
3440 var output = await reader . ReadToEndAsync ( ) ;
3541
36- Assert . Equal ( "{ \" name \" : \" param1 \" , \" in \" : \" query \" , \" description \" : \" A sample parameter \" , \" schema \" :{ \" type \" : \" string \" }}" , output ) ;
42+ Assert . Equal ( TerseOutput , output ) ;
3743 }
3844
3945 [ Fact ]
40- public async Task UsesTheTerseOutputInformationFromSettingsFalse ( )
46+ public async Task SerializeAsV31JsonToStreamWithNonTerseSettingsWorks ( )
4147 {
42- var parameter = new OpenApiParameter
43- {
44- Name = "param1" ,
45- In = ParameterLocation . Query ,
46- Description = "A sample parameter" ,
47- Required = false ,
48- Schema = new OpenApiSchema
49- {
50- Type = JsonSchemaType . String
51- }
52- } ;
53-
54- var settings = new OpenApiJsonWriterSettings
55- {
56- Terse = false
57- } ;
48+ var parameter = CreateParameter ( ) ;
49+ var settings = new OpenApiJsonWriterSettings { Terse = false } ;
5850
5951 using var stream = new MemoryStream ( ) ;
6052 await parameter . SerializeAsync ( stream , OpenApiSpecVersion . OpenApi3_1 , OpenApiConstants . Json , settings ) ;
@@ -63,23 +55,13 @@ public async Task UsesTheTerseOutputInformationFromSettingsFalse()
6355 using var reader = new StreamReader ( stream ) ;
6456 var output = await reader . ReadToEndAsync ( ) ;
6557
66- Assert . Equal ( "{ \n \" name \" : \" param1 \" , \n \" in \" : \" query \" , \n \" description \" : \" A sample parameter \" , \n \" schema \" : { \n \" type \" : \" string \" \n } \n }" , output ) ;
58+ Assert . Equal ( PrettyOutput , output ) ;
6759 }
6860
6961 [ Fact ]
70- public async Task UsesTheTerseOutputInformationFromSettingsNoSettings ( )
62+ public async Task SerializeAsV31JsonToStreamWithoutSettingsWorks ( )
7163 {
72- var parameter = new OpenApiParameter
73- {
74- Name = "param1" ,
75- In = ParameterLocation . Query ,
76- Description = "A sample parameter" ,
77- Required = false ,
78- Schema = new OpenApiSchema
79- {
80- Type = JsonSchemaType . String
81- }
82- } ;
64+ var parameter = CreateParameter ( ) ;
8365
8466 using var stream = new MemoryStream ( ) ;
8567 await parameter . SerializeAsync ( stream , OpenApiSpecVersion . OpenApi3_1 , OpenApiConstants . Json , null ) ;
@@ -88,6 +70,120 @@ public async Task UsesTheTerseOutputInformationFromSettingsNoSettings()
8870 using var reader = new StreamReader ( stream ) ;
8971 var output = await reader . ReadToEndAsync ( ) ;
9072
91- Assert . Equal ( "{\n \" name\" : \" param1\" ,\n \" in\" : \" query\" ,\n \" description\" : \" A sample parameter\" ,\n \" schema\" : {\n \" type\" : \" string\" \n }\n }" , output ) ;
73+ Assert . Equal ( PrettyOutput , output ) ;
74+ }
75+
76+ // ——————————————————————————————————————————————————————————
77+ // SerializeAsJsonAsync to Stream with settings
78+ // ——————————————————————————————————————————————————————————
79+
80+ [ Fact ]
81+ public async Task SerializeAsJsonAsyncToStreamWithTerseSettingsWorks ( )
82+ {
83+ var parameter = CreateParameter ( ) ;
84+ var settings = new OpenApiJsonWriterSettings { Terse = true } ;
85+
86+ using var stream = new MemoryStream ( ) ;
87+ await parameter . SerializeAsJsonAsync ( stream , OpenApiSpecVersion . OpenApi3_1 , settings ) ;
88+
89+ stream . Position = 0 ;
90+ using var reader = new StreamReader ( stream ) ;
91+ var output = await reader . ReadToEndAsync ( ) ;
92+
93+ Assert . Equal ( TerseOutput , output ) ;
94+ }
95+
96+ [ Fact ]
97+ public async Task SerializeAsJsonAsyncToStreamWithNonTerseSettingsWorks ( )
98+ {
99+ var parameter = CreateParameter ( ) ;
100+ var settings = new OpenApiJsonWriterSettings { Terse = false } ;
101+
102+ using var stream = new MemoryStream ( ) ;
103+ await parameter . SerializeAsJsonAsync ( stream , OpenApiSpecVersion . OpenApi3_1 , settings ) ;
104+
105+ stream . Position = 0 ;
106+ using var reader = new StreamReader ( stream ) ;
107+ var output = await reader . ReadToEndAsync ( ) ;
108+
109+ Assert . Equal ( PrettyOutput , output ) ;
110+ }
111+
112+ [ Fact ]
113+ public async Task SerializeAsJsonAsyncToStreamWithoutSettingsWorks ( )
114+ {
115+ var parameter = CreateParameter ( ) ;
116+
117+ using var stream = new MemoryStream ( ) ;
118+ await parameter . SerializeAsJsonAsync ( stream , OpenApiSpecVersion . OpenApi3_1 , null ) ;
119+
120+ stream . Position = 0 ;
121+ using var reader = new StreamReader ( stream ) ;
122+ var output = await reader . ReadToEndAsync ( ) ;
123+
124+ Assert . Equal ( PrettyOutput , output ) ;
125+ }
126+
127+ // ——————————————————————————————————————————————————————————
128+ // SerializeAsJsonAsync to string with settings
129+ // ——————————————————————————————————————————————————————————
130+
131+ [ Fact ]
132+ public async Task SerializeAsJsonAsyncToStringWithTerseSettingsWorks ( )
133+ {
134+ var parameter = CreateParameter ( ) ;
135+ var settings = new OpenApiJsonWriterSettings { Terse = true } ;
136+
137+ var output = await parameter . SerializeAsJsonAsync ( OpenApiSpecVersion . OpenApi3_1 , settings , CancellationToken . None ) ;
138+
139+ Assert . Equal ( TerseOutput , output ) ;
140+ }
141+
142+ [ Fact ]
143+ public async Task SerializeAsJsonAsyncToStringWithNonTerseSettingsWorks ( )
144+ {
145+ var parameter = CreateParameter ( ) ;
146+ var settings = new OpenApiJsonWriterSettings { Terse = false } ;
147+
148+ var output = await parameter . SerializeAsJsonAsync ( OpenApiSpecVersion . OpenApi3_1 , settings , CancellationToken . None ) ;
149+
150+ Assert . Equal ( PrettyOutput , output ) ;
151+ }
152+
153+ // ——————————————————————————————————————————————————————————
154+ // SerializeAsync to string with format and settings
155+ // ——————————————————————————————————————————————————————————
156+
157+ [ Fact ]
158+ public async Task SerializeAsV31JsonToStringWithTerseSettingsWorks ( )
159+ {
160+ var parameter = CreateParameter ( ) ;
161+ var settings = new OpenApiJsonWriterSettings { Terse = true } ;
162+
163+ var output = await parameter . SerializeAsync ( OpenApiSpecVersion . OpenApi3_1 , OpenApiConstants . Json , settings , CancellationToken . None ) ;
164+
165+ Assert . Equal ( TerseOutput , output ) ;
166+ }
167+
168+ [ Fact ]
169+ public async Task SerializeAsV31JsonToStringWithNonTerseSettingsWorks ( )
170+ {
171+ var parameter = CreateParameter ( ) ;
172+ var settings = new OpenApiJsonWriterSettings { Terse = false } ;
173+
174+ var output = await parameter . SerializeAsync ( OpenApiSpecVersion . OpenApi3_1 , OpenApiConstants . Json , settings , CancellationToken . None ) ;
175+
176+ Assert . Equal ( PrettyOutput , output ) ;
177+ }
178+
179+ [ Fact ]
180+ public async Task SerializeAsV31JsonToStringWithDefaultWriterSettingsWorks ( )
181+ {
182+ var parameter = CreateParameter ( ) ;
183+ var settings = new OpenApiWriterSettings ( ) ;
184+
185+ var output = await parameter . SerializeAsync ( OpenApiSpecVersion . OpenApi3_1 , OpenApiConstants . Json , settings , CancellationToken . None ) ;
186+
187+ Assert . Equal ( PrettyOutput , output ) ;
92188 }
93189}
0 commit comments