< Summary

Information
Class: Services.BitrixStockServices.BitrixStockMultiClientParser
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/BitrixStockServices/BitrixStockMultiClientParser.cs
Line coverage
88%
Covered lines: 30
Uncovered lines: 4
Coverable lines: 34
Total lines: 87
Line coverage: 88.2%
Branch coverage
90%
Covered branches: 38
Total branches: 42
Branch coverage: 90.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ParseMultiClientIds(...)100%2626100%
ParseMultiClientNames(...)75%201675%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/BitrixStockServices/BitrixStockMultiClientParser.cs

#LineLine coverage
 1using System.Text.Json;
 2
 3namespace Services.BitrixStockServices;
 4
 5/// <summary>
 6/// Унифицированный парсер MultiClientIdsJson в отчётах синхронизации BitrixStock.
 7/// Поддерживает как устаревший плоский массив идентификаторов [1, 2],
 8/// так и актуальный массив объектов [{id, name}, ...].
 9/// </summary>
 10public static class BitrixStockMultiClientParser
 11{
 12    /// <summary>
 13    /// Парсит MultiClientIdsJson — возвращает список уникальных положительных ID клиентов.
 14    /// </summary>
 15    public static List<int> ParseMultiClientIds(string? json)
 16    {
 1517        if (string.IsNullOrWhiteSpace(json))
 318            return new();
 19
 20        try
 21        {
 1222            using var doc = JsonDocument.Parse(json);
 1123            if (doc.RootElement.ValueKind != JsonValueKind.Array)
 124                return new();
 25
 1026            var ids = new List<int>();
 6827            foreach (var el in doc.RootElement.EnumerateArray())
 28            {
 2429                if (el.ValueKind == JsonValueKind.Number && el.TryGetInt32(out var numId))
 30                {
 1231                    if (numId > 0) ids.Add(numId);
 32                }
 1733                else if (el.ValueKind == JsonValueKind.Object)
 34                {
 1735                    if (el.TryGetProperty("id", out var idProp) && idProp.TryGetInt32(out var objId) && objId > 0)
 36                    {
 1637                        ids.Add(objId);
 38                    }
 139                    else if (el.TryGetProperty("Id", out var idPascalProp) && idPascalProp.TryGetInt32(out var objPascal
 40                    {
 141                        ids.Add(objPascalId);
 42                    }
 43                }
 44            }
 45
 1046            return ids.Distinct().ToList();
 47        }
 148        catch
 49        {
 150            return new();
 51        }
 1252    }
 53
 54    /// <summary>
 55    /// Парсит MultiClientIdsJson — возвращает имена клиентов (для формата [{id, name}, ...]).
 56    /// </summary>
 57    public static List<string> ParseMultiClientNames(string? json)
 58    {
 259        if (string.IsNullOrWhiteSpace(json))
 060            return new();
 61
 62        try
 63        {
 264            using var doc = JsonDocument.Parse(json);
 265            if (doc.RootElement.ValueKind != JsonValueKind.Array)
 066                return new();
 67
 268            var names = new List<string>();
 1469            foreach (var el in doc.RootElement.EnumerateArray())
 70            {
 571                if (el.ValueKind == JsonValueKind.Object)
 72                {
 273                    if (el.TryGetProperty("name", out var nameProp))
 174                        names.Add(nameProp.GetString() ?? "");
 175                    else if (el.TryGetProperty("Name", out var namePascalProp))
 176                        names.Add(namePascalProp.GetString() ?? "");
 77                }
 78            }
 79
 280            return names;
 81        }
 082        catch
 83        {
 084            return new();
 85        }
 286    }
 87}