|
|
@ -13,9 +13,9 @@ using Microsoft.AspNetCore.Mvc; |
|
|
using Microsoft.AspNetCore.Mvc.Abstractions; |
|
|
using Microsoft.AspNetCore.Mvc.Abstractions; |
|
|
using Microsoft.AspNetCore.Mvc.Filters; |
|
|
using Microsoft.AspNetCore.Mvc.Filters; |
|
|
using Microsoft.AspNetCore.Routing; |
|
|
using Microsoft.AspNetCore.Routing; |
|
|
|
|
|
using Microsoft.Extensions.Logging; |
|
|
using Squidex.Infrastructure; |
|
|
using Squidex.Infrastructure; |
|
|
using Squidex.Infrastructure.Validation; |
|
|
using Squidex.Infrastructure.Validation; |
|
|
using Squidex.Log; |
|
|
|
|
|
using Xunit; |
|
|
using Xunit; |
|
|
|
|
|
|
|
|
#pragma warning disable MA0015 // Specify the parameter name in ArgumentException
|
|
|
#pragma warning disable MA0015 // Specify the parameter name in ArgumentException
|
|
|
@ -24,7 +24,7 @@ namespace Squidex.Web |
|
|
{ |
|
|
{ |
|
|
public class ApiExceptionFilterAttributeTests |
|
|
public class ApiExceptionFilterAttributeTests |
|
|
{ |
|
|
{ |
|
|
private readonly ISemanticLog log = A.Fake<ISemanticLog>(); |
|
|
private readonly ILogger<ApiExceptionFilterAttribute> log = A.Fake<ILogger<ApiExceptionFilterAttribute>>(); |
|
|
private readonly ApiExceptionFilterAttribute sut = new ApiExceptionFilterAttribute(); |
|
|
private readonly ApiExceptionFilterAttribute sut = new ApiExceptionFilterAttribute(); |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
@ -59,7 +59,7 @@ namespace Squidex.Web |
|
|
"property5[0].property6: Error5" |
|
|
"property5[0].property6: Error5" |
|
|
}, ((ErrorDto)result.Value!).Details); |
|
|
}, ((ErrorDto)result.Value!).Details); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -72,7 +72,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Assert.IsType<NotFoundResult>(context.Result); |
|
|
Assert.IsType<NotFoundResult>(context.Result); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -85,7 +85,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(500, context.Result, null); |
|
|
Validate(500, context.Result, null); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, context.Exception, A<LogFormatter>._!)) |
|
|
A.CallTo(log).Where(x => x.Method.Name == "Log" && x.GetArgument<Exception>(3) == context.Exception) |
|
|
.MustHaveHappened(); |
|
|
.MustHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -98,7 +98,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(400, context.Result, context.Exception); |
|
|
Validate(400, context.Result, context.Exception); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -111,7 +111,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(400, context.Result, context.Exception, "ERROR_CODE_XYZ"); |
|
|
Validate(400, context.Result, context.Exception, "ERROR_CODE_XYZ"); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -124,7 +124,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(400, context.Result, context.Exception); |
|
|
Validate(400, context.Result, context.Exception); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -137,7 +137,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(409, context.Result, context.Exception, "OBJECT_CONFLICT"); |
|
|
Validate(409, context.Result, context.Exception, "OBJECT_CONFLICT"); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -150,7 +150,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(410, context.Result, context.Exception, "OBJECT_DELETED"); |
|
|
Validate(410, context.Result, context.Exception, "OBJECT_DELETED"); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -163,7 +163,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(412, context.Result, context.Exception, "OBJECT_VERSION_CONFLICT"); |
|
|
Validate(412, context.Result, context.Exception, "OBJECT_VERSION_CONFLICT"); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -176,7 +176,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(403, context.Result, context.Exception, "FORBIDDEN"); |
|
|
Validate(403, context.Result, context.Exception, "FORBIDDEN"); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -189,7 +189,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(403, context.Result, null); |
|
|
Validate(403, context.Result, null); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, context.Exception, A<LogFormatter>._!)) |
|
|
A.CallTo(log).Where(x => x.Method.Name == "Log" && x.GetArgument<Exception>(3) == context.Exception) |
|
|
.MustHaveHappened(); |
|
|
.MustHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -202,7 +202,7 @@ namespace Squidex.Web |
|
|
|
|
|
|
|
|
Validate(403, context.Result, null); |
|
|
Validate(403, context.Result, null); |
|
|
|
|
|
|
|
|
A.CallTo(() => log.Log(A<SemanticLogLevel>._, A<Exception?>._, A<LogFormatter>._!)) |
|
|
A.CallTo(log) |
|
|
.MustNotHaveHappened(); |
|
|
.MustNotHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -238,7 +238,7 @@ namespace Squidex.Web |
|
|
{ |
|
|
{ |
|
|
var services = A.Fake<IServiceProvider>(); |
|
|
var services = A.Fake<IServiceProvider>(); |
|
|
|
|
|
|
|
|
A.CallTo(() => services.GetService(typeof(ISemanticLog))) |
|
|
A.CallTo(() => services.GetService(typeof(ILogger<ApiExceptionFilterAttribute>))) |
|
|
.Returns(log); |
|
|
.Returns(log); |
|
|
|
|
|
|
|
|
var httpContext = new DefaultHttpContext |
|
|
var httpContext = new DefaultHttpContext |
|
|
|