< Summary

Information
Class: ClientManager.Shared.Messaging.MessageValidationMiddleware
Assembly: ClientManager.Shared
File(s): /home/runner/work/ClientManagerDemo/ClientManagerDemo/src/ClientManager/ClientManager.Shared/Messaging/Middleware/MessageValidationMiddleware.cs
Line coverage
100%
Covered lines: 12
Uncovered lines: 0
Coverable lines: 12
Total lines: 29
Line coverage: 100%
Branch coverage
66%
Covered branches: 4
Total branches: 6
Branch coverage: 66.6%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
InvokeAsync()75%88100%

File(s)

/home/runner/work/ClientManagerDemo/ClientManagerDemo/src/ClientManager/ClientManager.Shared/Messaging/Middleware/MessageValidationMiddleware.cs

#LineLine coverage
 1using System.ComponentModel.DataAnnotations;
 2using Microsoft.Extensions.Logging;
 3
 4namespace ClientManager.Shared.Messaging;
 5
 86public class MessageValidationMiddleware(ILogger<MessageValidationMiddleware>? logger) : IMessagePublishMiddleware
 7{
 88    readonly ILogger<MessageValidationMiddleware>? _logger = logger;
 9
 10    public async Task InvokeAsync<T>(T message, MessagePublishDeleagte<T> next, CancellationToken cancellationToken)
 11        where T : IMessage
 12    {
 1113        var validationResults = new List<ValidationResult>();
 1114        var context = new ValidationContext(message);
 15
 1116        bool isValid = Validator.TryValidateObject(message, context, validationResults, validateAllProperties: true);
 17
 1118        if (!isValid)
 19        {
 820            var errors = string.Join(", ", validationResults.Select(r => r.ErrorMessage));
 421            _logger?.LogWarning("Validation failed for {MessageType}: {Errors}", typeof(T).Name, errors);
 422            throw new ValidationException($"Message validation failed: {errors}");
 23        }
 24
 725        _logger?.LogDebug("Message {MessageType} passed validation", typeof(T).Name);
 26
 727        await next(message, cancellationToken);
 728    }
 29}