< Summary

Information
Class: TeleFlow.Framework.Middleware.UpdateExceptionMiddleware
Assembly: TeleFlow.Framework.Core
File(s): /_/src/TeleFlow.Framework.Core/Middleware/UpdateExceptionMiddleware.cs
Line coverage
83%
Covered lines: 15
Uncovered lines: 3
Coverable lines: 18
Total lines: 49
Line coverage: 83.3%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
.ctor()100%210%
.ctor(...)100%11100%
InvokeAsync()100%2277.77%
IsUpdateCancellation(...)100%22100%

File(s)

/_/src/TeleFlow.Framework.Core/Middleware/UpdateExceptionMiddleware.cs

#LineLine coverage
 1using Microsoft.Extensions.Logging;
 2using TeleFlow.Framework.Updates;
 3
 4namespace TeleFlow.Framework.Middleware;
 5
 6public sealed class UpdateExceptionMiddleware : IUpdateMiddleware
 7{
 18    private static readonly Action<ILogger, Exception?> LogUnhandledException =
 19        LoggerMessage.Define(
 110            LogLevel.Error,
 111            new EventId(1, nameof(LogUnhandledException)),
 112            "Unhandled exception while processing update.");
 13
 14    private readonly ILogger<UpdateExceptionMiddleware>? _logger;
 15
 16    public UpdateExceptionMiddleware()
 17    {
 018    }
 19
 20    public UpdateExceptionMiddleware(ILogger<UpdateExceptionMiddleware> logger)
 21    {
 222        _logger = logger;
 223    }
 24
 25    public async Task InvokeAsync(UpdateContext context, UpdateDelegate next)
 26    {
 227        ArgumentNullException.ThrowIfNull(context);
 228        ArgumentNullException.ThrowIfNull(next);
 29
 30        try
 31        {
 232            await next(context).ConfigureAwait(false);
 033        }
 234        catch (Exception exception) when (!IsUpdateCancellation(exception, context.CancellationToken))
 35        {
 136            if (_logger is not null)
 37            {
 138                LogUnhandledException(_logger, exception);
 39            }
 40
 141            throw;
 42        }
 043    }
 44
 45    private static bool IsUpdateCancellation(Exception exception, CancellationToken cancellationToken)
 46    {
 247        return exception is OperationCanceledException && cancellationToken.IsCancellationRequested;
 48    }
 49}