From 9cec86b624f4327675e604d84864edbe91948e63 Mon Sep 17 00:00:00 2001 From: emantzoros Date: Fri, 19 Sep 2025 22:20:09 +0300 Subject: [PATCH] Tests for exception handling middleware. --- .../Controllers/CustomerControllerTests.cs | 1 + .../ErrorHandlingMiddlewareTests.cs | 94 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 BlazorApp.Tests/Middlewares/ErrorHandlingMiddlewareTests.cs diff --git a/BlazorApp.Tests/Controllers/CustomerControllerTests.cs b/BlazorApp.Tests/Controllers/CustomerControllerTests.cs index 6419253..8f8a4cb 100644 --- a/BlazorApp.Tests/Controllers/CustomerControllerTests.cs +++ b/BlazorApp.Tests/Controllers/CustomerControllerTests.cs @@ -2,6 +2,7 @@ using BlazorApp.Controllers; using BlazorApp.Interfaces.Services; using BlazorApp.Shared.Models; using BlazorApp.Shared.Models.Pagination; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Moq; diff --git a/BlazorApp.Tests/Middlewares/ErrorHandlingMiddlewareTests.cs b/BlazorApp.Tests/Middlewares/ErrorHandlingMiddlewareTests.cs new file mode 100644 index 0000000..fd5537a --- /dev/null +++ b/BlazorApp.Tests/Middlewares/ErrorHandlingMiddlewareTests.cs @@ -0,0 +1,94 @@ +using BlazorApp.Middlewares; +using BlazorApp.Models.Exceptions; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Moq; +using System.Net; +using System.Text; + +namespace BlazorApp.Tests.Middlewares +{ + public class ErrorHandlingMiddlewareTests + { + private readonly Mock> _loggerMock; + + public ErrorHandlingMiddlewareTests() + { + _loggerMock = new Mock>(); + } + + private HttpContext CreateHttpContext() + { + var context = new DefaultHttpContext(); + context.Response.Body = new MemoryStream(); + return context; + } + + private string GetResponseBody(HttpContext context) + { + context.Response.Body.Seek(0, SeekOrigin.Begin); + using var reader = new StreamReader(context.Response.Body, Encoding.UTF8); + return reader.ReadToEnd(); + } + + [Fact] + public async Task Invoke_WhenNotFoundException_Returns404() + { + var context = CreateHttpContext(); + RequestDelegate next = (ctx) => throw new NotFoundException("blabla"); + + var middleware = new ErrorHandlingMiddleware(next, _loggerMock.Object); + + await middleware.Invoke(context); + + Assert.Equal((int)HttpStatusCode.NotFound, context.Response.StatusCode); + var body = GetResponseBody(context); + Assert.Contains("blabla", body); + } + + [Fact] + public async Task Invoke_WhenBusinessException_Returns500() + { + var context = CreateHttpContext(); + RequestDelegate next = (ctx) => throw new BusinessException("blabla"); + + var middleware = new ErrorHandlingMiddleware(next, _loggerMock.Object); + + await middleware.Invoke(context); + + Assert.Equal((int)HttpStatusCode.InternalServerError, context.Response.StatusCode); + var body = GetResponseBody(context); + Assert.Contains("blabla", body); + } + + [Fact] + public async Task Invoke_WhenValidationException_Returns400() + { + var context = CreateHttpContext(); + RequestDelegate next = (ctx) => throw new ValidationException("blabla"); + + var middleware = new ErrorHandlingMiddleware(next, _loggerMock.Object); + + await middleware.Invoke(context); + + Assert.Equal((int)HttpStatusCode.BadRequest, context.Response.StatusCode); + var body = GetResponseBody(context); + Assert.Contains("blabla", body); + } + + [Fact] + public async Task Invoke_WhenUnhandledException_Returns500() + { + var context = CreateHttpContext(); + RequestDelegate next = (ctx) => throw new Exception("blabla"); + + var middleware = new ErrorHandlingMiddleware(next, _loggerMock.Object); + + await middleware.Invoke(context); + + Assert.Equal((int)HttpStatusCode.InternalServerError, context.Response.StatusCode); + var body = GetResponseBody(context); + Assert.Contains("blabla", body); + } + } +}