@@ -52,11 +52,13 @@ public void ApiKeySecurityScheme_SerializesAndDeserializesCorrectly()
5252
5353 // Act
5454 var json = JsonSerializer . Serialize ( scheme , s_jsonOptions ) ;
55- var deserialized = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) as ApiKeySecurityScheme ;
55+ var d = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) ;
5656
5757 // Assert
5858 Assert . Contains ( "\" type\" : \" apiKey\" " , json ) ;
5959 Assert . Contains ( "\" description\" :" , json ) ;
60+
61+ var deserialized = Assert . IsType < ApiKeySecurityScheme > ( d ) ;
6062 Assert . NotNull ( deserialized ) ;
6163 Assert . Equal ( "API key for authentication" , deserialized . Description ) ;
6264 Assert . Equal ( "X-API-Key" , deserialized . Name ) ;
@@ -71,11 +73,13 @@ public void HttpAuthSecurityScheme_SerializesAndDeserializesCorrectly()
7173
7274 // Act
7375 var json = JsonSerializer . Serialize ( scheme , s_jsonOptions ) ;
74- var deserialized = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) as HttpAuthSecurityScheme ;
76+ var d = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) ;
7577
7678 // Assert
7779 Assert . Contains ( "\" type\" : \" http\" " , json ) ;
7880 Assert . DoesNotContain ( "\" description\" " , json ) ;
81+
82+ var deserialized = Assert . IsType < HttpAuthSecurityScheme > ( d ) ;
7983 Assert . NotNull ( deserialized ) ;
8084 Assert . Equal ( "bearer" , deserialized . Scheme ) ;
8185 Assert . Null ( deserialized . Description ) ;
@@ -93,11 +97,53 @@ public void OAuth2SecurityScheme_SerializesAndDeserializesCorrectly()
9397
9498 // Act
9599 var json = JsonSerializer . Serialize ( scheme , s_jsonOptions ) ;
96- var deserialized = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) as OAuth2SecurityScheme ;
100+ var d = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) ;
97101
98102 // Assert
99- Assert . Contains ( "\" type\" : \" oauth2\" " , json ) ;
100103 Assert . Contains ( "\" description\" : \" OAuth2 authentication\" " , json ) ;
104+
105+ var deserialized = Assert . IsType < OAuth2SecurityScheme > ( d ) ; Assert . Contains ( "\" type\" : \" oauth2\" " , json ) ;
106+ Assert . NotNull ( deserialized ) ;
107+ Assert . Equal ( "OAuth2 authentication" , deserialized . Description ) ;
108+ Assert . NotNull ( deserialized . Flows ) ;
109+ Assert . Null ( deserialized . Flows . ClientCredentials ) ;
110+ Assert . Null ( deserialized . Flows . Implicit ) ;
111+ Assert . Null ( deserialized . Flows . AuthorizationCode ) ;
112+ Assert . NotNull ( deserialized . Flows . Password ) ;
113+ Assert . Equal ( "https://example.com/token" , deserialized . Flows . Password . TokenUrl . ToString ( ) ) ;
114+ Assert . NotNull ( deserialized . Flows . Password . Scopes ) ;
115+ Assert . Equal ( 2 , deserialized . Flows . Password . Scopes . Count ) ;
116+ Assert . Contains ( "read" , deserialized . Flows . Password . Scopes . Keys ) ;
117+ Assert . Contains ( "write" , deserialized . Flows . Password . Scopes . Keys ) ;
118+ Assert . Equal ( "Read access" , deserialized . Flows . Password . Scopes [ "read" ] ) ;
119+ Assert . Equal ( "Write access" , deserialized . Flows . Password . Scopes [ "write" ] ) ;
120+ }
121+
122+ [ Fact ]
123+ public void OAuth2SecurityScheme_DeserializesFromRawJsonCorrectly ( )
124+ {
125+ // Arrange
126+ var rawJson = """
127+ {
128+ "type": "oauth2",
129+ "description": "OAuth2 authentication",
130+ "flows": {
131+ "password": {
132+ "tokenUrl": "https://example.com/token",
133+ "scopes": {
134+ "read": "Read access",
135+ "write": "Write access"
136+ }
137+ }
138+ }
139+ }
140+ """ ;
141+
142+ // Act
143+ var d = JsonSerializer . Deserialize < SecurityScheme > ( rawJson , s_jsonOptions ) ;
144+
145+ // Assert
146+ var deserialized = Assert . IsType < OAuth2SecurityScheme > ( d ) ;
101147 Assert . NotNull ( deserialized ) ;
102148 Assert . Equal ( "OAuth2 authentication" , deserialized . Description ) ;
103149 Assert . NotNull ( deserialized . Flows ) ;
@@ -122,11 +168,13 @@ public void OpenIdConnectSecurityScheme_SerializesAndDeserializesCorrectly()
122168
123169 // Act
124170 var json = JsonSerializer . Serialize ( scheme , s_jsonOptions ) ;
125- var deserialized = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) as OpenIdConnectSecurityScheme ;
171+ var d = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) ;
126172
127173 // Assert
128174 Assert . Contains ( "\" type\" : \" openIdConnect\" " , json ) ;
129175 Assert . Contains ( "\" description\" : \" OpenID Connect authentication\" " , json ) ;
176+
177+ var deserialized = Assert . IsType < OpenIdConnectSecurityScheme > ( d ) ;
130178 Assert . NotNull ( deserialized ) ;
131179 Assert . Equal ( "OpenID Connect authentication" , deserialized . Description ) ;
132180 Assert . Equal ( "https://example.com/.well-known/openid_configuration" , deserialized . OpenIdConnectUrl . ToString ( ) ) ;
@@ -140,10 +188,33 @@ public void MutualTlsSecurityScheme_DeserializesFromBaseSecurityScheme()
140188
141189 // Act
142190 var json = JsonSerializer . Serialize ( scheme , s_jsonOptions ) ;
143- var deserialized = JsonSerializer . Deserialize < SecurityScheme > ( json ) ;
191+ var d = JsonSerializer . Deserialize < SecurityScheme > ( json , s_jsonOptions ) ;
144192
145193 // Assert
146- Assert . IsType < MutualTlsSecurityScheme > ( deserialized ) ;
194+ var deserialized = Assert . IsType < MutualTlsSecurityScheme > ( d ) ;
195+ Assert . NotNull ( deserialized ) ;
147196 Assert . Equal ( "Mutual TLS authentication" , deserialized . Description ) ;
148197 }
198+
199+ [ Fact ]
200+ public void OpenIdConnectSecurityScheme_DeserializesFromRawJsonCorrectly ( )
201+ {
202+ // Arrange
203+ var rawJson = """
204+ {
205+ "type": "openIdConnect",
206+ "description": "OpenID Connect authentication",
207+ "openIdConnectUrl": "https://example.com/.well-known/openid_configuration"
208+ }
209+ """ ;
210+
211+ // Act
212+ var d = JsonSerializer . Deserialize < SecurityScheme > ( rawJson , s_jsonOptions ) ;
213+
214+ // Assert
215+ var deserialized = Assert . IsType < OpenIdConnectSecurityScheme > ( d ) ;
216+ Assert . NotNull ( deserialized ) ;
217+ Assert . Equal ( "OpenID Connect authentication" , deserialized . Description ) ;
218+ Assert . Equal ( "https://example.com/.well-known/openid_configuration" , deserialized . OpenIdConnectUrl . ToString ( ) ) ;
219+ }
149220}
0 commit comments