Allow ProblemDetails \ ValidationProblemDetails to be more testable
Fixes https://github.com/dotnet/aspnetcore/issues/15166
This commit is contained in:
parent
94e314d4d2
commit
2d6fd453e2
|
|
@ -1886,13 +1886,29 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
string title = null,
|
||||
string type = null)
|
||||
{
|
||||
var problemDetails = ProblemDetailsFactory.CreateProblemDetails(
|
||||
HttpContext,
|
||||
statusCode: statusCode ?? 500,
|
||||
title: title,
|
||||
type: type,
|
||||
detail: detail,
|
||||
instance: instance);
|
||||
ProblemDetails problemDetails;
|
||||
if (ProblemDetailsFactory == null)
|
||||
{
|
||||
// ProblemDetailsFactory may be null in unit testing scenarios. Improvise to make this more testable.
|
||||
problemDetails = new ProblemDetails
|
||||
{
|
||||
Detail = detail,
|
||||
Instance = instance,
|
||||
Status = statusCode ?? 500,
|
||||
Title = title,
|
||||
Type = type,
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
problemDetails = ProblemDetailsFactory.CreateProblemDetails(
|
||||
HttpContext,
|
||||
statusCode: statusCode ?? 500,
|
||||
title: title,
|
||||
type: type,
|
||||
detail: detail,
|
||||
instance: instance);
|
||||
}
|
||||
|
||||
return new ObjectResult(problemDetails)
|
||||
{
|
||||
|
|
@ -1958,14 +1974,30 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
{
|
||||
modelStateDictionary ??= ModelState;
|
||||
|
||||
var validationProblem = ProblemDetailsFactory.CreateValidationProblemDetails(
|
||||
HttpContext,
|
||||
modelStateDictionary,
|
||||
statusCode: statusCode,
|
||||
title: title,
|
||||
type: type,
|
||||
detail: detail,
|
||||
instance: instance);
|
||||
ValidationProblemDetails validationProblem;
|
||||
if (ProblemDetailsFactory == null)
|
||||
{
|
||||
// ProblemDetailsFactory may be null in unit testing scenarios. Improvise to make this more testable.
|
||||
validationProblem = new ValidationProblemDetails(modelStateDictionary)
|
||||
{
|
||||
Detail = detail,
|
||||
Instance = instance,
|
||||
Status = statusCode,
|
||||
Title = title,
|
||||
Type = type,
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
validationProblem = ProblemDetailsFactory?.CreateValidationProblemDetails(
|
||||
HttpContext,
|
||||
modelStateDictionary,
|
||||
statusCode: statusCode,
|
||||
title: title,
|
||||
type: type,
|
||||
detail: detail,
|
||||
instance: instance);
|
||||
}
|
||||
|
||||
if (validationProblem.Status == 400)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -373,7 +373,7 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
Assert.Equal(routeName, acceptedAtRouteResult.RouteName);
|
||||
Assert.Single(acceptedAtRouteResult.RouteValues);
|
||||
Assert.Equal("sample", acceptedAtRouteResult.RouteValues["route"]);
|
||||
Assert.Same(value,acceptedAtRouteResult.Value);
|
||||
Assert.Same(value, acceptedAtRouteResult.Value);
|
||||
|
||||
// Arrange
|
||||
controller = new TestabilityController();
|
||||
|
|
@ -682,6 +682,42 @@ namespace Microsoft.AspNetCore.Mvc
|
|||
Assert.Equal(new { Arg1 = "Hi", Arg2 = "There" }, result.Arguments);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Problem_Works()
|
||||
{
|
||||
// Arrange
|
||||
var detail = "Some random error";
|
||||
var controller = new TestabilityController();
|
||||
|
||||
// Act
|
||||
var result = controller.Problem(detail);
|
||||
|
||||
// Assert
|
||||
var badRequest = Assert.IsType<ObjectResult>(result);
|
||||
var problemDetails = Assert.IsType<ProblemDetails>(badRequest.Value);
|
||||
Assert.Equal(detail, problemDetails.Detail);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ValidationProblem_Works()
|
||||
{
|
||||
// Arrange
|
||||
var detail = "Some random error";
|
||||
var controller = new TestabilityController();
|
||||
|
||||
// Act
|
||||
controller.ModelState.AddModelError("some-key", "some-error");
|
||||
var result = controller.ValidationProblem(detail);
|
||||
|
||||
// Assert
|
||||
var badRequest = Assert.IsType<ObjectResult>(result);
|
||||
var validationProblemDetails = Assert.IsType<ValidationProblemDetails>(badRequest.Value);
|
||||
Assert.Equal(detail, validationProblemDetails.Detail);
|
||||
var error = Assert.Single(validationProblemDetails.Errors);
|
||||
Assert.Equal("some-key", error.Key);
|
||||
Assert.Equal(new[] { "some-error" }, error.Value);
|
||||
}
|
||||
|
||||
public static IEnumerable<object[]> TestabilityViewTestData
|
||||
{
|
||||
get
|
||||
|
|
|
|||
Loading…
Reference in New Issue