< Summary

Information
Class: ArturRios.Util.WebApi.Configuration.ServiceCollectionExtensions
Assembly: ArturRios.Util.WebApi
File(s): /home/runner/work/dotnet-webapi-util/dotnet-webapi-util/src/Configuration/ServiceCollectionExtensions.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 34
Line coverage: 100%
Branch coverage
50%
Covered branches: 2
Total branches: 4
Branch coverage: 50%
Method coverage
100%
Covered methods: 1
Fully covered methods: 1
Total methods: 1
Method coverage: 100%
Full method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddInvalidModelStateEnvelope(...)50%44100%

File(s)

/home/runner/work/dotnet-webapi-util/dotnet-webapi-util/src/Configuration/ServiceCollectionExtensions.cs

#LineLine coverage
 1using ArturRios.Output;
 2using Microsoft.AspNetCore.Mvc;
 3using Microsoft.Extensions.DependencyInjection;
 4
 5namespace ArturRios.Util.WebApi.Configuration;
 6
 7/// <summary>Service registrations shared by web APIs built with this library.</summary>
 8public static class ServiceCollectionExtensions
 9{
 10    /// <param name="services">The service collection to register into.</param>
 11    extension(IServiceCollection services)
 12    {
 13        /// <summary>Replaces ASP.NET Core's default invalid-model-state response with a 400 result carrying a failed
 14        /// <see cref="DataOutput{T}"/> whose errors list each invalid parameter and its message, so validation failures
 15        /// have the same shape as every other failed response.</summary>
 16        /// <returns>The same <paramref name="services"/> instance, for chaining.</returns>
 17        public IServiceCollection AddInvalidModelStateEnvelope() =>
 1918            services.Configure<ApiBehaviorOptions>(options =>
 1919            {
 1820                options.InvalidModelStateResponseFactory = context =>
 1821                {
 122                    var errors = context.ModelState
 123                        .Where(e => e.Value?.Errors.Count > 0)
 224                        .Select(e => $"Parameter: {e.Key} | Error: {e.Value?.Errors.First().ErrorMessage}").ToArray();
 1825
 126                    var output = DataOutput<string>.New
 127                        .WithData(string.Empty)
 128                        .WithErrors(errors);
 1829
 130                    return new BadRequestObjectResult(output);
 1831                };
 3732            });
 33    }
 34}