< Summary - Kestrun — Combined Coverage

Information
Class: Kestrun.OpenApi.OpenApiSchemaDiscovery
Assembly: Kestrun
File(s): /home/runner/work/Kestrun/Kestrun/src/CSharp/Kestrun/OpenApi/OpenApiSchemaDiscovery.cs
Tag: Kestrun/Kestrun@0d738bf294e6281b936d031e1979d928007495ff
Line coverage
0%
Covered lines: 0
Uncovered lines: 26
Coverable lines: 26
Total lines: 67
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 14
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100 12/12/2025 - 17:27:19 Line coverage: 0% (0/26) Branch coverage: 0% (0/14) Total lines: 67 Tag: Kestrun/Kestrun@826bf9dcf9db118c5de4c78a3259bce9549f0dcd 12/12/2025 - 17:27:19 Line coverage: 0% (0/26) Branch coverage: 0% (0/14) Total lines: 67 Tag: Kestrun/Kestrun@826bf9dcf9db118c5de4c78a3259bce9549f0dcd

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GetOpenApiTypesAuto()100%210%
GetRelevantAssemblies()0%2040%
GetTypesWithAttribute(...)0%2040%
GetSchemaTypes(...)0%4260%

File(s)

/home/runner/work/Kestrun/Kestrun/src/CSharp/Kestrun/OpenApi/OpenApiSchemaDiscovery.cs

#LineLine coverage
 1// OpenApiSchemaDiscovery.cs
 2namespace Kestrun.OpenApi;
 3
 4/// <summary>
 5/// Helper to discover OpenAPI schema types in loaded assemblies.
 6/// </summary>
 7public static class OpenApiSchemaDiscovery
 8{
 9    /// <summary>
 10    /// Discover all OpenAPI component types from dynamic PowerShell classes.
 11    /// Scans all loaded assemblies for classes decorated with OpenApiModelKindAttribute
 12    /// or having any OpenApi* attributes.
 13    /// </summary>
 14    /// <returns> The discovered OpenAPI component types.</returns>
 15    public static OpenApiComponentSet GetOpenApiTypesAuto()
 16    {
 017        var assemblies = GetRelevantAssemblies();
 018        return new OpenApiComponentSet
 019        {
 020            ParameterTypes = GetTypesWithAttribute(assemblies, typeof(OpenApiParameterComponent)),
 021            SchemaTypes = GetSchemaTypes(assemblies),
 022            ResponseTypes = GetTypesWithAttribute(assemblies, typeof(OpenApiResponseComponent)),
 023            HeaderTypes = GetTypesWithAttribute(assemblies, typeof(OpenApiHeaderComponent)),
 024            ExampleTypes = GetTypesWithAttribute(assemblies, typeof(OpenApiExampleComponent)),
 025            RequestBodyTypes = GetTypesWithAttribute(assemblies, typeof(OpenApiRequestBodyComponent)),
 026#if EXTENDED_OPENAPI
 027            SecuritySchemeTypes = GetTypesWithAttribute(assemblies, typeof(OpenApiSecuritySchemeComponent)),
 028            LinkTypes = GetTypesWithAttribute(assemblies, typeof(OpenApiLinkComponent)),
 029            CallbackTypes = GetTypesWithKind(assemblies, OpenApiModelKind.Callback),
 030            PathItemTypes = GetTypesWithKind(assemblies, OpenApiModelKind.PathItem)
 031#endif
 032        };
 33    }
 34
 35    private static System.Reflection.Assembly[] GetRelevantAssemblies()
 36    {
 037        return [.. AppDomain.CurrentDomain.GetAssemblies()
 038            .Where(a => a.FullName is not null &&
 039                    (a.FullName.Contains("PowerShell Class Assembly") ||
 040                        a.FullName.StartsWith("Kestrun")))];
 41    }
 42
 43    private static Type[] GetTypesWithAttribute(System.Reflection.Assembly[] assemblies, Type attributeType)
 44    {
 045        return [.. assemblies.SelectMany(asm => asm.GetTypes())
 046            .Where(t => t.IsClass && !t.IsAbstract && t.IsDefined(attributeType, true))];
 47    }
 48
 49    private static Type[] GetSchemaTypes(System.Reflection.Assembly[] assemblies)
 50    {
 051        return [.. assemblies.SelectMany(asm => asm.GetTypes())
 052            .Where(t => t.IsClass && !t.IsAbstract &&
 053                    !typeof(IOpenApiType).IsAssignableFrom(t) &&
 054                    t.IsDefined(typeof(OpenApiSchemaComponent), true))];
 55    }
 56
 57#if EXTENDED_OPENAPI
 58    private static Type[] GetTypesWithKind(System.Reflection.Assembly[] assemblies, OpenApiModelKind kind)
 59    {
 60        return [.. assemblies.SelectMany(asm => asm.GetTypes())
 61            .Where(t => t.IsClass && !t.IsAbstract &&
 62                t.GetCustomAttributes(typeof(OpenApiModelKindAttribute), true)
 63                 .OfType<OpenApiModelKindAttribute>()
 64                 .Any(a => a.Kind == kind))];
 65    }
 66#endif
 67}