< 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: 70_19770578580
Line coverage
100%
Covered lines: 33
Uncovered lines: 0
Coverable lines: 33
Total lines: 74
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;
 4using Plainquire.Filter.Abstractions;
 5using Plainquire.Filter.Swashbuckle.Models;
 6using System;
 7using System.Collections.Generic;
 8using System.Diagnostics.CodeAnalysis;
 9using System.Linq;
 10using System.Reflection;
 11using System.Text.Json.Nodes;
 12
 13namespace Plainquire.Filter.Swashbuckle;
 14
 15internal static class OpenApiParameterExtensions
 16{
 17    internal const string ENTITY_EXTENSION_PREFIX = "x-entity-filter-";
 18
 19    [SuppressMessage("ReSharper", "ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract", Justification = "Paramet
 20    public static bool IsEntityFilterParameter(this ApiParameterDescription description)
 6121        => description.ParameterDescriptor != null && description.ParameterDescriptor.ParameterType.IsGenericEntityFilte
 22
 23    [SuppressMessage("ReSharper", "ConditionalAccessQualifierIsNonNullableAccordingToAPIContract", Justification = "Para
 24    public static bool IsEntityFilterSetParameter(this ApiParameterDescription description)
 4225        => description.ParameterDescriptor?.ParameterType.GetCustomAttribute<EntityFilterSetAttribute>() != null;
 26
 27    public static void ReplaceFilterParameters(this IList<IOpenApiParameter> parameters, List<FilterParameterReplaceInfo
 28    {
 1829        foreach (var replacement in parameterReplacements)
 30        {
 331            if (!replacement.Parameters.Any())
 32                continue;
 33
 334            var parameterIndex = parameters.IndexOf(replacement.Parameters[0]);
 35
 4636            foreach (var parameter in replacement.Parameters)
 2037                parameters.Remove(parameter);
 38
 339            var propertyParameters = replacement
 340                .EntityFilters
 341                .SelectMany(entityFilterType => entityFilterType
 342                    .GenericTypeArguments[0]
 343                    .ExpandToPropertyParameters(docXmlReaders)
 344                )
 345                .ToList();
 46
 2247            foreach (var parameter in propertyParameters)
 848                parameters.Insert(parameterIndex++, parameter);
 49        }
 650    }
 51
 52    private static List<OpenApiParameter> ExpandToPropertyParameters(this Type filteredType, IReadOnlyCollection<DocXmlR
 53    {
 354        var filterableProperties = filteredType.GetFilterableProperties();
 355        var entityFilterAttribute = filteredType.GetCustomAttribute<EntityFilterAttribute>();
 56
 357        return filterableProperties
 358            .Select(property => new OpenApiParameter
 359            {
 360                Name = property.GetFilterParameterName(entityFilterAttribute?.Prefix),
 361                Description = docXmlReaders.GetXmlDocumentationSummary(property),
 362                Schema = new OpenApiSchema { Type = JsonSchemaType.String },
 363                In = ParameterLocation.Query,
 364                Extensions = new Dictionary<string, IOpenApiExtension>(StringComparer.Ordinal)
 365                {
 366                    [ENTITY_EXTENSION_PREFIX + "property-type"] = new JsonNodeExtension(JsonValue.Create(property.Proper
 367                }
 368            })
 369            .ToList();
 70    }
 71
 72    private static string? GetXmlDocumentationSummary(this IEnumerable<DocXmlReader> docXmlReaders, MemberInfo member)
 873        => docXmlReaders.Select(x => x.GetMemberComment(member)).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x));
 74}