@@ -445,6 +445,44 @@ public void AddsResponseDescription_WorksWithCollectionsAndTypedResultsWhereInne
445445 Assert . Equal ( "application/json" , createdOkFormat . MediaType ) ;
446446 }
447447
448+ [ Fact ]
449+ public void AddsResponseDescription_WorksWithCollectionsWhereInnerTypeIsInEndpointAndIsBaseClass ( )
450+ {
451+ const string expectedOkDescription = "The weather forecast for the next 5 days." ;
452+
453+ var apiDescription = GetApiDescription ( [ ProducesResponseType < List < GenericClass < string > > > ( StatusCodes . Status200OK , Description = expectedOkDescription ) ]
454+ ( ) => new List < BaseClass > { new ( ) } . AsEnumerable ( ) ) ;
455+
456+ var okResponseType = Assert . Single ( apiDescription . SupportedResponseTypes ) ;
457+
458+ Assert . Equal ( 200 , okResponseType . StatusCode ) ;
459+ Assert . Equal ( typeof ( IEnumerable < BaseClass > ) , okResponseType . Type ) ; // We use IEnumerable<BaseClass> as the inferred type has higher priority than those set by metadata (attributes)
460+ Assert . Equal ( typeof ( IEnumerable < BaseClass > ) , okResponseType . ModelMetadata ? . ModelType ) ;
461+ Assert . Equal ( expectedOkDescription , okResponseType . Description ) ;
462+
463+ var createdOkFormat = Assert . Single ( okResponseType . ApiResponseFormats ) ;
464+ Assert . Equal ( "application/json" , createdOkFormat . MediaType ) ;
465+ }
466+
467+ [ Fact ]
468+ public void AddsResponseDescription_WorksWithCollectionsAndTypedResultsWhereInnerTypeIsInEndpointAndIsBaseClass ( )
469+ {
470+ const string expectedOkDescription = "The weather forecast for the next 5 days." ;
471+
472+ var apiDescription = GetApiDescription ( [ ProducesResponseType < List < GenericClass < string > > > ( StatusCodes . Status200OK , Description = expectedOkDescription ) ]
473+ ( ) => TypedResults . Ok ( new List < BaseClass > { new ( ) } . AsEnumerable ( ) ) ) ;
474+
475+ var okResponseType = Assert . Single ( apiDescription . SupportedResponseTypes ) ;
476+
477+ Assert . Equal ( 200 , okResponseType . StatusCode ) ;
478+ Assert . Equal ( typeof ( IEnumerable < BaseClass > ) , okResponseType . Type ) ; // We use IEnumerable<BaseClass> as the inferred type has higher priority than those set by metadata (attributes)
479+ Assert . Equal ( typeof ( IEnumerable < BaseClass > ) , okResponseType . ModelMetadata ? . ModelType ) ;
480+ Assert . Equal ( expectedOkDescription , okResponseType . Description ) ;
481+
482+ var createdOkFormat = Assert . Single ( okResponseType . ApiResponseFormats ) ;
483+ Assert . Equal ( "application/json" , createdOkFormat . MediaType ) ;
484+ }
485+
448486 [ Fact ]
449487 public void WithEmptyMethodBody_AddsResponseDescription ( )
450488 {
@@ -1929,5 +1967,7 @@ private class TestServiceProvider : IServiceProvider
19291967 }
19301968
19311969 }
1932- private class GenericClass < TType > { public required TType Value { get ; set ; } }
1970+
1971+ private class GenericClass < TType > : BaseClass { public required TType Value { get ; set ; } }
1972+ private class BaseClass { }
19331973}
0 commit comments