< Summary

Information
Class: Services.ApiServices.ArmtekApi.Converters.ArmtekResultsAsListConverter<T>
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/ArmtekApi/Converters/ArmtekResultsAsListConverter.cs
Line coverage
64%
Covered lines: 9
Uncovered lines: 5
Coverable lines: 14
Total lines: 35
Line coverage: 64.2%
Branch coverage
68%
Covered branches: 11
Total branches: 16
Branch coverage: 68.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
CanConvert(...)100%210%
ReadJson(...)68.75%181681.81%
get_CanWrite()100%210%
WriteJson(...)100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/ArmtekApi/Converters/ArmtekResultsAsListConverter.cs

#LineLine coverage
 1using Newtonsoft.Json;
 2using Newtonsoft.Json.Linq;
 3
 4namespace Services.ApiServices.ArmtekApi.Converters;
 5
 6/// <summary>
 7/// Армтек возвращает группу статусов как массив, одиночный объект либо объект-обёртку
 8/// <c>{ "results": ... }</c>. Нормализует все варианты в список.
 9/// </summary>
 10public sealed class ArmtekResultsAsListConverter<T> : JsonConverter
 11{
 012    public override bool CanConvert(Type objectType) => objectType == typeof(List<T>);
 13
 14    public override object ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer
 15    {
 516        if (reader.TokenType is JsonToken.Null or JsonToken.String)
 017            return new List<T>();
 18
 519        var token = JToken.Load(reader);
 520        if (token is JObject wrapper && wrapper.TryGetValue("results", StringComparison.OrdinalIgnoreCase, out var resul
 321            token = results;
 22
 523        return token.Type switch
 524        {
 225            JTokenType.Array => token.ToObject<List<T>>(serializer) ?? new List<T>(),
 326            JTokenType.Object => [token.ToObject<T>(serializer)!],
 027            _ => new List<T>()
 528        };
 29    }
 30
 031    public override bool CanWrite => false;
 32
 33    public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) =>
 034        throw new NotSupportedException($"{nameof(ArmtekResultsAsListConverter<T>)} поддерживает только чтение.");
 35}