public async Task Invoke_ShouldCatchException() { //ARRANGE var useCaseException = new UseCaseException(UseCaseExceptionCode.FailedToAuthenticatedToInstagram); var defaultHttpContext = new DefaultHttpContext(); const HttpStatusCode httpStatusCode = HttpStatusCode.Unauthorized; requestDelegateMock.Setup(rd => rd(defaultHttpContext)).Throws(useCaseException); useCaseExceptionCodeMapperMock.Setup(ucecm => ucecm.MapToStatusCode(useCaseException.StatusCode)) .Returns(httpStatusCode); //ACT await _exceptionMiddleware.Invoke(defaultHttpContext); defaultHttpContext.Response.Body.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(defaultHttpContext.Response.Body, Encoding.UTF8)) { var responseBody = await reader.ReadToEndAsync(); //ASSERT Assert.AreEqual(defaultHttpContext.Response.ContentType, useCaseException.ContentType); Assert.AreEqual(responseBody, useCaseException.Message); Assert.AreEqual(defaultHttpContext.Response.StatusCode, (int)httpStatusCode); } }
private static Task HandleUseCaseExceptionAsync(HttpContext context, UseCaseException useCaseException) { context.Response.ContentType = "application/json"; context.Response.StatusCode = (int)HttpStatusCode.BadRequest; var json = new { context.Response.StatusCode, Message = useCaseException.Message }; return(context.Response.WriteAsync(System.Text.Json.JsonSerializer.Serialize(json))); }
protected static void HandleDbUpdateException(DbUpdateException e) { var uce = new UseCaseException() { UserErrorMessage = "An API database error was detected", DevErrorMessage = e.Message }; if (e.InnerException is Npgsql.PostgresException npgSqlEx) { uce.DevErrorMessage += Environment.NewLine + npgSqlEx.ConstraintName; uce.DevErrorMessage += Environment.NewLine + npgSqlEx.Detail; uce.DevErrorMessage += Environment.NewLine + npgSqlEx.MessageText; } throw uce; }