Skip to content

Commit b0a26e7

Browse files
committed
Add extra test cases for inner types
1 parent 7fda04b commit b0a26e7

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

src/Mvc/Mvc.ApiExplorer/test/EndpointMetadataApiDescriptionProviderTest.cs

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)