< Summary - Code Coverage

Information
Class: Plainquire.Filter.Swashbuckle.OpenApiParameterExtensions
Assembly: Plainquire.Filter.Swashbuckle
File(s): /home/runner/work/plainquire/plainquire/Plainquire.Filter/Plainquire.Filter.Swashbuckle/Extensions/OpenApiParameterExtensions.cs
Tag: 64_13932151703
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 75
Line coverage: 100%
Branch coverage
85%
Covered branches: 12
Total branches: 14
Branch coverage: 85.7%
Method coverage
100%
Covered methods: 5
Total methods: 5
Method coverage: 100%

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
IsEntityFilterParameter(...)50%22100%
IsEntityFilterSetParameter(...)50%22100%
ReplaceFilterParameters(...)100%1010100%
ExpandToPropertyParameters(...)100%11100%
GetXmlDocumentationSummary(...)100%11100%

File(s)

/home/runner/work/plainquire/plainquire/Plainquire.Filter/Plainquire.Filter.Swashbuckle/Extensions/OpenApiParameterExtensions.cs

#LineLine coverage
 1using LoxSmoke.DocXml;
 2using Microsoft.AspNetCore.Mvc.ApiExplorer;
 3using Microsoft.OpenApi.Any;
 4using Microsoft.OpenApi.Interfaces;
 5using Microsoft.OpenApi.Models;
 6using Plainquire.Filter.Abstractions;
 7using Plainquire.Filter.Swashbuckle.Models;
 8using System;
 9using System.Collections.Generic;
 10using System.Diagnostics.CodeAnalysis;
 11using System.Linq;
 12using System.Reflection;
 13
 14namespace Plainquire.Filter.Swashbuckle;
 15
 16internal static class OpenApiParameterExtensions
 17{
 18    internal const string ENTITY_EXTENSION_PREFIX = "x-entity-filter-";
 19
 20    [SuppressMessage("ReSharper", "ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract", Justification = "Paramet
 21    public static bool IsEntityFilterParameter(this ApiParameterDescription description)
 6122        => description.ParameterDescriptor != null && description.ParameterDescriptor.ParameterType.IsGenericEntityFilte
 23
 24    [SuppressMessage("ReSharper", "ConditionalAccessQualifierIsNonNullableAccordingToAPIContract", Justification = "Para
 25    public static bool IsEntityFilterSetParameter(this ApiParameterDescription description)
 4226        => description.ParameterDescriptor?.ParameterType.GetCustomAttribute<EntityFilterSetAttribute>() != null;
 27
 28    public static void ReplaceFilterParameters(this IList<OpenApiParameter> parameters, List<FilterParameterReplaceInfo>
 29    {
 1830        foreach (var replacement in parameterReplacements)
 31        {
 332            if (!replacement.Parameters.Any())
 33                continue;
 34
 335            var parameterIndex = parameters.IndexOf(replacement.Parameters[0]);
 36
 4637            foreach (var parameter in replacement.Parameters)
 2038                parameters.Remove(parameter);
 39
 340            var propertyParameters = replacement
 341                .EntityFilters
 342                .SelectMany(entityFilterType => entityFilterType
 343                    .GenericTypeArguments[0]
 344                    .ExpandToPropertyParameters(docXmlReaders)
 345                )
 346                .ToList();
 47
 2248            foreach (var parameter in propertyParameters)
 849                parameters.Insert(parameterIndex++, parameter);
 50        }
 651    }
 52
 53    private static List<OpenApiParameter> ExpandToPropertyParameters(this Type filteredType, IReadOnlyCollection<DocXmlR
 54    {
 355        var filterableProperties = filteredType.GetFilterableProperties();
 356        var entityFilterAttribute = filteredType.GetCustomAttribute<EntityFilterAttribute>();
 57
 358        return filterableProperties
 359            .Select(property => new OpenApiParameter
 360            {
 361                Name = property.GetFilterParameterName(entityFilterAttribute?.Prefix),
 362                Description = docXmlReaders.GetXmlDocumentationSummary(property),
 363                Schema = new OpenApiSchema { Type = "string" },
 364                In = ParameterLocation.Query,
 365                Extensions = new Dictionary<string, IOpenApiExtension>(StringComparer.Ordinal)
 366                {
 367                    [ENTITY_EXTENSION_PREFIX + "property-type"] = new OpenApiString(property.PropertyType.GetUnderlyingT
 368                }
 369            })
 370            .ToList();
 71    }
 72
 73    private static string? GetXmlDocumentationSummary(this IEnumerable<DocXmlReader> docXmlReaders, MemberInfo member)
 874        => docXmlReaders.Select(x => x.GetMemberComment(member)).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x));
 75}