< Summary - Code Coverage

Information
Class: Plainquire.Filter.JsonConverters.EntityFilterConverter
Assembly: Plainquire.Filter
File(s): /home/runner/work/plainquire/plainquire/Plainquire.Filter/Plainquire.Filter/JsonConverters/EntityFilterConverter.cs
Tag: 64_13932151703
Line coverage
100%
Covered lines: 45
Uncovered lines: 0
Coverable lines: 45
Total lines: 115
Line coverage: 100%
Branch coverage
90%
Covered branches: 9
Total branches: 10
Branch coverage: 90%
Method coverage
100%
Covered methods: 8
Total methods: 8
Method coverage: 100%

Metrics

MethodBranch coverage Cyclomatic complexity NPath complexity Sequence coverage
Read(...)100%11100%
Write(...)100%11100%
Read(...)83.33%66100%
Write(...)100%11100%
GetPropertyFilters(...)100%22100%
GetPropertyFilterData(...)100%22100%
CanConvert(...)100%11100%
CreateConverter(...)100%11100%

File(s)

/home/runner/work/plainquire/plainquire/Plainquire.Filter/Plainquire.Filter/JsonConverters/EntityFilterConverter.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Text.Json;
 5using System.Text.Json.Serialization;
 6
 7namespace Plainquire.Filter.JsonConverters;
 8
 9/// <summary>
 10/// <see cref="EntityFilter{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 to filter for.</typeparam>
 14/// <seealso cref="JsonConverter{T}" />
 15public class EntityFilterConverter<TEntity> : JsonConverter<EntityFilter<TEntity>>
 16{
 17    /// <inheritdoc />
 18    public override EntityFilter<TEntity> Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions opti
 19        => EntityFilterConverter.Read<EntityFilter<TEntity>>(ref reader, options);
 20
 21    /// <inheritdoc />
 22    public override void Write(Utf8JsonWriter writer, EntityFilter<TEntity> value, JsonSerializerOptions options)
 23        => EntityFilterConverter.Write(writer, value, options);
 24}
 25
 26/// <summary>
 27/// <see cref="EntityFilter"/> specific JSON converter for Microsoft (System.Text.Json) JSON.
 28/// Implements <see cref="JsonConverter{T}" />
 29/// </summary>
 30/// <seealso cref="JsonConverter{T}" />
 31public class EntityFilterConverter : JsonConverter<EntityFilter>
 32{
 33    /// <inheritdoc />
 34    public override EntityFilter Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
 1235        => Read<EntityFilter>(ref reader, options);
 36
 37    /// <inheritdoc />
 38    public override void Write(Utf8JsonWriter writer, EntityFilter value, JsonSerializerOptions options)
 1039        => Write(writer, value, options);
 40
 41    internal static TEntityFilter Read<TEntityFilter>(ref Utf8JsonReader reader, JsonSerializerOptions options)
 42        where TEntityFilter : EntityFilter, new()
 43    {
 338044        var entityFilterData = JsonSerializer.Deserialize<EntityFilterConverterData>(ref reader, options) ?? new EntityF
 338045        var propertyFilters = GetPropertyFilters(entityFilterData);
 46
 338047        return new TEntityFilter
 338048        {
 338049            PropertyFilters = propertyFilters ?? [],
 338050            NestedFilters = entityFilterData.NestedFilters ?? [],
 338051            Configuration = entityFilterData.Configuration
 338052        };
 53    }
 54
 55    internal static void Write<TEntityFilter>(Utf8JsonWriter writer, TEntityFilter value, JsonSerializerOptions options)
 56        where TEntityFilter : EntityFilter
 57    {
 337158        var propertyFiltersData = GetPropertyFilterData(value);
 59
 337160        var entityFilterData = new EntityFilterConverterData
 337161        {
 337162            PropertyFilters = propertyFiltersData,
 337163            NestedFilters = value.NestedFilters,
 337164            Configuration = value.Configuration
 337165        };
 66
 337167        JsonSerializer.Serialize(writer, entityFilterData, options);
 337168    }
 69
 70    internal static List<PropertyFilter>? GetPropertyFilters(EntityFilterConverterData entityFilterData)
 675271        => entityFilterData
 675272            .PropertyFilters?
 675273            .Select(filter => new PropertyFilter(
 675274                propertyName: filter.PropertyName,
 675275                valueFilters: filter.ValueFilters
 675276                    .Select(valueFilter => ValueFilter.Create(
 675277                        valueFilter.Operator,
 675278                        valueFilter.Value,
 675279                        entityFilterData.Configuration
 675280                    ))
 675281                    .ToArray()
 675282            ))
 675283            .ToList();
 84
 85    internal static List<PropertyFilterConverterData> GetPropertyFilterData<TEntityFilter>(TEntityFilter entityFilter) w
 673486        => entityFilter.PropertyFilters
 673487            .Select(filter => new PropertyFilterConverterData
 673488            (
 673489                propertyName: filter.PropertyName,
 673490                valueFilters: filter.ValueFilters
 673491                    .Select(valueFilter => new ValueFilterConverterData { Operator = valueFilter.Operator, Value = value
 673492                    .ToList()
 673493            ))
 673494            .ToList();
 95
 96    /// <summary>
 97    /// <see cref="EntityFilter{TEntity}"/> specific JSON converter factory for Microsoft (System.Text.Json) JSON.
 98    /// Implements <see cref="JsonConverterFactory" />
 99    /// </summary>
 100    /// <seealso cref="JsonConverterFactory" />
 101    public class Factory : JsonConverterFactory
 102    {
 103        /// <inheritdoc />
 104        public override bool CanConvert(Type typeToConvert)
 19105            => typeToConvert.IsGenericEntityFilter();
 106
 107        /// <inheritdoc />
 108        public override JsonConverter? CreateConverter(Type typeToConvert, JsonSerializerOptions options)
 109        {
 19110            var entityType = typeToConvert.GetGenericArguments()[0];
 19111            var entityFilterConverterType = typeof(EntityFilterConverter<>).MakeGenericType(entityType);
 19112            return (JsonConverter?)Activator.CreateInstance(entityFilterConverterType);
 113        }
 114    }
 115}