< Summary - Code Coverage

Information
Class: Plainquire.Sort.JsonConverters.EntitySortConverter
Assembly: Plainquire.Sort
File(s): /home/runner/work/plainquire/plainquire/Plainquire.Sort/Plainquire.Sort/JsonConverters/EntitySortConverter.cs
Tag: 64_13932151703
Line coverage
97%
Covered lines: 37
Uncovered lines: 1
Coverable lines: 38
Total lines: 108
Line coverage: 97.3%
Branch coverage
62%
Covered branches: 5
Total branches: 8
Branch coverage: 62.5%
Method coverage
87%
Covered methods: 7
Total methods: 8
Method coverage: 87.5%

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
Read(...)100%110%
Write(...)100%11100%
Read(...)50%44100%
Write(...)100%11100%
GetPropertySorts(...)50%22100%
GetPropertySortData(...)100%22100%
CanConvert(...)100%11100%
CreateConverter(...)100%11100%

File(s)

/home/runner/work/plainquire/plainquire/Plainquire.Sort/Plainquire.Sort/JsonConverters/EntitySortConverter.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Text.Json;
 5using System.Text.Json.Serialization;
 6
 7namespace Plainquire.Sort.JsonConverters;
 8
 9/// <summary>
 10/// <see cref="EntitySort{TEntity}"/> specific JSON converter for Microsoft (System.Text.Json) JSON.
 11/// Implements <see cref="JsonConverter{T}" />
 12/// </summary>
 13/// <typeparam name="TEntity">The type of the entity be sorted.</typeparam>
 14/// <seealso cref="JsonConverter{T}" />
 15public class EntitySortConverter<TEntity> : JsonConverter<EntitySort<TEntity>>
 16{
 17    /// <inheritdoc />
 18    public override EntitySort<TEntity> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions option
 19        => EntitySortConverter.Read<EntitySort<TEntity>>(ref reader, options);
 20
 21    /// <inheritdoc />
 22    public override void Write(Utf8JsonWriter writer, EntitySort<TEntity> value, JsonSerializerOptions options)
 23        => EntitySortConverter.Write(writer, value, options);
 24}
 25
 26/// <summary>
 27/// <see cref="EntitySort"/> specific JSON converter for Microsoft (System.Text.Json) JSON.
 28/// Implements <see cref="JsonConverter{T}" />
 29/// </summary>
 30/// <seealso cref="JsonConverter{T}" />
 31public class EntitySortConverter : JsonConverter<EntitySort>
 32{
 33    /// <inheritdoc />
 34    public override EntitySort Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 035        => Read<EntitySort>(ref reader, options);
 36
 37    /// <inheritdoc />
 38    public override void Write(Utf8JsonWriter writer, EntitySort value, JsonSerializerOptions options)
 339        => Write(writer, value, options);
 40
 41    internal static TEntitySort Read<TEntitySort>(ref Utf8JsonReader reader, JsonSerializerOptions options)
 42        where TEntitySort : EntitySort, new()
 43    {
 10544        var entitySortData = JsonSerializer.Deserialize<EntitySortConverterData>(ref reader, options) ?? new EntitySortC
 10545        var propertySorts = GetPropertySorts(entitySortData);
 46
 10547        return new TEntitySort
 10548        {
 10549            PropertySorts = propertySorts ?? [],
 10550            Configuration = entitySortData.Configuration
 10551        };
 52    }
 53
 54    internal static void Write<TEntitySort>(Utf8JsonWriter writer, TEntitySort value, JsonSerializerOptions options)
 55        where TEntitySort : EntitySort
 56    {
 10557        var propertySortData = GetPropertySortData(value);
 58
 10559        var entitySortData = new EntitySortConverterData
 10560        {
 10561            PropertySorts = propertySortData,
 10562            Configuration = value.Configuration
 10563        };
 64
 10565        JsonSerializer.Serialize(writer, entitySortData, options);
 10566    }
 67
 68    internal static List<PropertySort>? GetPropertySorts(EntitySortConverterData entitySortData)
 20769        => entitySortData
 20770            .PropertySorts?
 20771            .Select(filter => new PropertySort(
 20772                propertyPath: filter.PropertyPath,
 20773                direction: filter.Direction,
 20774                position: filter.Position,
 20775                configuration: entitySortData.Configuration
 20776            ))
 20777            .ToList();
 78
 79    internal static List<PropertySortConverterData> GetPropertySortData<TEntitySort>(TEntitySort entitySort) where TEnti
 20780        => entitySort.PropertySorts
 20781            .Select(filter => new PropertySortConverterData
 20782            (
 20783                propertyPath: filter.PropertyPath,
 20784                direction: filter.Direction,
 20785                position: filter.Position
 20786            ))
 20787            .ToList();
 88
 89    /// <summary>
 90    /// <see cref="EntitySort{TEntity}"/> specific JSON converter factory for Microsoft (System.Text.Json) JSON.
 91    /// Implements <see cref="JsonConverterFactory" />
 92    /// </summary>
 93    /// <seealso cref="JsonConverterFactory" />
 94    public class Factory : JsonConverterFactory
 95    {
 96        /// <inheritdoc />
 97        public override bool CanConvert(Type typeToConvert)
 498            => typeToConvert.IsGenericEntitySort();
 99
 100        /// <inheritdoc />
 101        public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
 102        {
 4103            var entityType = typeToConvert.GetGenericArguments()[0];
 4104            var entitySortConverterType = typeof(EntitySortConverter<>).MakeGenericType(entityType);
 4105            return (JsonConverter?)Activator.CreateInstance(entitySortConverterType);
 106        }
 107    }
 108}