< Summary

Information
Class: Chronicis.Client.Services.FieldClassifier
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/FieldClassifier.cs
Line coverage
100%
Covered lines: 22
Uncovered lines: 0
Coverable lines: 22
Total lines: 58
Line coverage: 100%
Branch coverage
100%
Covered branches: 14
Total branches: 14
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Classify(...)100%1414100%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/FieldClassifier.cs

#LineLine coverage
 1using System.Text.Json;
 2using static Chronicis.Client.Services.RenderDefinitionHelpers;
 3
 4namespace Chronicis.Client.Services;
 5
 6/// <summary>
 7/// Extracts and classifies JSON fields into title, hidden, and remaining categories.
 8/// </summary>
 9public static class FieldClassifier
 10{
 11    public static (string titleField, List<string> hidden, List<FieldInfo> remaining) Classify(JsonElement dataSource)
 12    {
 1913        var fieldInfos = new List<FieldInfo>();
 16814        foreach (var prop in dataSource.EnumerateObject())
 15        {
 6516            fieldInfos.Add(new FieldInfo
 6517            {
 6518                Name = prop.Name,
 6519                Value = prop.Value,
 6520                Kind = prop.Value.ValueKind,
 6521                IsNull = IsNullOrEmpty(prop.Value),
 6522                IsComplex = prop.Value.ValueKind == JsonValueKind.Object ||
 6523                            prop.Value.ValueKind == JsonValueKind.Array
 6524            });
 25        }
 26
 1927        var titleField = fieldInfos
 1928            .FirstOrDefault(f => TitleCandidates.Contains(f.Name, StringComparer.OrdinalIgnoreCase))
 1929            ?.Name ?? "name";
 30
 1931        var hidden = new List<string>();
 1932        var remaining = new List<FieldInfo>();
 33
 16834        foreach (var fi in fieldInfos)
 35        {
 6536            if (fi.Name.Equals(titleField, StringComparison.OrdinalIgnoreCase))
 37                continue;
 4838            if (IsHiddenField(fi.Name))
 1039                hidden.Add(fi.Name);
 40            else
 3841                remaining.Add(fi);
 42        }
 43
 1944        return (titleField, hidden, remaining);
 45    }
 46}
 47
 48/// <summary>
 49/// Describes a single JSON property with classification metadata.
 50/// </summary>
 51public class FieldInfo
 52{
 53    public string Name { get; set; } = "";
 54    public JsonElement Value { get; set; }
 55    public JsonValueKind Kind { get; set; }
 56    public bool IsNull { get; set; }
 57    public bool IsComplex { get; set; }
 58}