1313using Swashbuckle . AspNetCore . TestSupport ;
1414using Xunit ;
1515using System . Threading . Tasks ;
16- using Microsoft . AspNetCore . Authentication ;
1716using Microsoft . AspNetCore . Server . HttpSys ;
17+ using Microsoft . AspNetCore . Authentication ;
1818
1919namespace Swashbuckle . AspNetCore . SwaggerGen . Test
2020{
@@ -1081,76 +1081,70 @@ public void GetSwagger_SupportsOption_SecuritySchemes()
10811081
10821082 var document = subject . GetSwagger ( "v1" ) ;
10831083
1084- Assert . Equal ( new [ ] { "basic" , "Bearer" } , document . Components . SecuritySchemes . Keys ) ;
1085- }
1086-
1087- [ Fact ]
1088- public async Task GetSwagger_SupportsSecuritySchemesSelector ( )
1089- {
1090- var subject = Subject (
1091- apiDescriptions : new ApiDescription [ ] { } ,
1092- options : new SwaggerGeneratorOptions
1093- {
1094- SwaggerDocs = new Dictionary < string , OpenApiInfo >
1095- {
1096- [ "v1" ] = new OpenApiInfo { Version = "V1" , Title = "Test API" }
1097- } ,
1098- SecuritySchemesSelector = ( schemes ) => new Dictionary < string , OpenApiSecurityScheme >
1099- {
1100- [ "basic" ] = new OpenApiSecurityScheme { Type = SecuritySchemeType . Http , Scheme = "basic" }
1101- }
1102- }
1103- ) ;
1104-
1105- var document = await subject . GetSwaggerAsync ( "v1" ) ;
1106-
1107- // Overrides the default set of [basic, bearer] with just [basic]
11081084 Assert . Equal ( new [ ] { "basic" } , document . Components . SecuritySchemes . Keys ) ;
11091085 }
11101086
1111- [ Fact ]
1112- public async Task GetSwagger_DefaultSecuritySchemeSelectorAddsBearerByDefault ( )
1087+ [ Theory ]
1088+ [ InlineData ( false , new string [ ] { } ) ]
1089+ [ InlineData ( true , new string [ ] { "Bearer" } ) ]
1090+ public async Task GetSwagger_SupportsOption_InferSecuritySchemes (
1091+ bool inferSecuritySchemes ,
1092+ string [ ] expectedSecuritySchemeNames )
1093+
11131094 {
11141095 var subject = Subject (
11151096 apiDescriptions : new ApiDescription [ ] { } ,
1097+ authenticationSchemes : new [ ] {
1098+ new AuthenticationScheme ( "Bearer" , null , typeof ( IAuthenticationHandler ) ) ,
1099+ new AuthenticationScheme ( "Cookies" , null , typeof ( IAuthenticationHandler ) )
1100+ } ,
11161101 options : new SwaggerGeneratorOptions
11171102 {
11181103 SwaggerDocs = new Dictionary < string , OpenApiInfo >
11191104 {
11201105 [ "v1" ] = new OpenApiInfo { Version = "V1" , Title = "Test API" }
11211106 } ,
1107+ InferSecuritySchemes = inferSecuritySchemes
11221108 }
11231109 ) ;
11241110
11251111 var document = await subject . GetSwaggerAsync ( "v1" ) ;
11261112
1127- Assert . Equal ( new [ ] { "Bearer" } , document . Components . SecuritySchemes . Keys ) ;
1113+ Assert . Equal ( expectedSecuritySchemeNames , document . Components . SecuritySchemes . Keys ) ;
11281114 }
11291115
1130- [ Fact ]
1131- public async Task GetSwagger_DefaultSecuritySchemesSelectorDoesNotOverrideBearer ( )
1116+ [ Theory ]
1117+ [ InlineData ( false , new string [ ] { } ) ]
1118+ [ InlineData ( true , new string [ ] { "Bearer" , "Cookies" } ) ]
1119+ public async Task GetSwagger_SupportsOption_SecuritySchemesSelector (
1120+ bool inferSecuritySchemes ,
1121+ string [ ] expectedSecuritySchemeNames )
1122+
11321123 {
11331124 var subject = Subject (
11341125 apiDescriptions : new ApiDescription [ ] { } ,
1126+ authenticationSchemes : new [ ] {
1127+ new AuthenticationScheme ( "Bearer" , null , typeof ( IAuthenticationHandler ) ) ,
1128+ new AuthenticationScheme ( "Cookies" , null , typeof ( IAuthenticationHandler ) )
1129+ } ,
11351130 options : new SwaggerGeneratorOptions
11361131 {
11371132 SwaggerDocs = new Dictionary < string , OpenApiInfo >
11381133 {
11391134 [ "v1" ] = new OpenApiInfo { Version = "V1" , Title = "Test API" }
11401135 } ,
1141- SecuritySchemes = new Dictionary < string , OpenApiSecurityScheme >
1142- {
1143- [ "Bearer" ] = new OpenApiSecurityScheme { Type = SecuritySchemeType . ApiKey , Scheme = "someSpecialOne" }
1144- }
1136+ InferSecuritySchemes = inferSecuritySchemes ,
1137+ SecuritySchemesSelector = ( authenticationSchemes ) =>
1138+ authenticationSchemes
1139+ . ToDictionary (
1140+ ( authScheme ) => authScheme . Name ,
1141+ ( authScheme ) => new OpenApiSecurityScheme ( ) )
11451142 }
11461143 ) ;
11471144
11481145 var document = await subject . GetSwaggerAsync ( "v1" ) ;
11491146
1150- var securityScheme = Assert . Single ( document . Components . SecuritySchemes ) ;
1151- Assert . Equal ( "Bearer" , securityScheme . Key ) ;
1152- Assert . Equal ( SecuritySchemeType . ApiKey , securityScheme . Value . Type ) ;
1153- Assert . Equal ( "someSpecialOne" , securityScheme . Value . Scheme ) ;
1147+ Assert . Equal ( expectedSecuritySchemeNames , document . Components . SecuritySchemes . Keys ) ;
11541148 }
11551149
11561150 [ Fact ]
@@ -1283,13 +1277,16 @@ public void GetSwagger_SupportsOption_DocumentFilters()
12831277 Assert . Contains ( "ComplexType" , document . Components . Schemas . Keys ) ;
12841278 }
12851279
1286- private SwaggerGenerator Subject ( IEnumerable < ApiDescription > apiDescriptions , SwaggerGeneratorOptions options = null )
1280+ private SwaggerGenerator Subject (
1281+ IEnumerable < ApiDescription > apiDescriptions ,
1282+ SwaggerGeneratorOptions options = null ,
1283+ IEnumerable < AuthenticationScheme > authenticationSchemes = null )
12871284 {
12881285 return new SwaggerGenerator (
12891286 options ?? DefaultOptions ,
12901287 new FakeApiDescriptionGroupCollectionProvider ( apiDescriptions ) ,
12911288 new SchemaGenerator ( new SchemaGeneratorOptions ( ) , new JsonSerializerDataContractResolver ( new JsonSerializerOptions ( ) ) ) ,
1292- new TestAuthenticationSchemeProvider ( )
1289+ new FakeAuthenticationSchemeProvider ( authenticationSchemes ?? Enumerable . Empty < AuthenticationScheme > ( ) )
12931290 ) ;
12941291 }
12951292
@@ -1301,41 +1298,4 @@ private SwaggerGenerator Subject(IEnumerable<ApiDescription> apiDescriptions, Sw
13011298 }
13021299 } ;
13031300 }
1304-
1305- class TestAuthenticationSchemeProvider : IAuthenticationSchemeProvider
1306- {
1307- private readonly IEnumerable < AuthenticationScheme > _authenticationSchemes = new AuthenticationScheme [ ]
1308- {
1309- new AuthenticationScheme ( "Bearer" , null , typeof ( IAuthenticationHandler ) )
1310- } ;
1311-
1312- public void AddScheme ( AuthenticationScheme scheme )
1313- => throw new NotImplementedException ( ) ;
1314- public Task < IEnumerable < AuthenticationScheme > > GetAllSchemesAsync ( )
1315- => Task . FromResult ( _authenticationSchemes ) ;
1316-
1317- public Task < AuthenticationScheme > GetDefaultAuthenticateSchemeAsync ( )
1318- => Task . FromResult ( _authenticationSchemes . First ( ) ) ;
1319-
1320- public Task < AuthenticationScheme > GetDefaultChallengeSchemeAsync ( )
1321- => Task . FromResult ( _authenticationSchemes . First ( ) ) ;
1322-
1323- public Task < AuthenticationScheme > GetDefaultForbidSchemeAsync ( )
1324- => Task . FromResult ( _authenticationSchemes . First ( ) ) ;
1325-
1326- public Task < AuthenticationScheme > GetDefaultSignInSchemeAsync ( )
1327- => Task . FromResult ( _authenticationSchemes . First ( ) ) ;
1328-
1329- public Task < AuthenticationScheme > GetDefaultSignOutSchemeAsync ( )
1330- => Task . FromResult ( _authenticationSchemes . First ( ) ) ;
1331-
1332- public Task < IEnumerable < AuthenticationScheme > > GetRequestHandlerSchemesAsync ( )
1333- => throw new NotImplementedException ( ) ;
1334-
1335- public Task < AuthenticationScheme > GetSchemeAsync ( string name )
1336- => Task . FromResult ( _authenticationSchemes . First ( ) ) ;
1337-
1338- public void RemoveScheme ( string name )
1339- => throw new NotImplementedException ( ) ;
1340- }
13411301}
0 commit comments