< Summary

Information
Class: Services.ApiServices._1CApi.OData.OneCODataErrorFormatter
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/OData/OneCODataErrorFormatter.cs
Line coverage
68%
Covered lines: 22
Uncovered lines: 10
Coverable lines: 32
Total lines: 76
Line coverage: 68.7%
Branch coverage
71%
Covered branches: 23
Total branches: 32
Branch coverage: 71.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Format(...)64.28%211466.66%
TryExtractODataCode(...)90%111080%
TryExtractODataMessage(...)62.5%13857.14%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/OData/OneCODataErrorFormatter.cs

#LineLine coverage
 1using Newtonsoft.Json;
 2using Services.ApiServices._1CApi.OData.Models;
 3
 4namespace Services.ApiServices._1CApi.OData;
 5
 6/// <summary>
 7/// Извлекает читаемое сообщение из OData-ошибки (JSON или технический текст исключения).
 8/// </summary>
 9public static class OneCODataErrorFormatter
 10{
 11    public static string Format(string? raw)
 12    {
 4813        if (string.IsNullOrWhiteSpace(raw))
 714            return string.Empty;
 15
 4116        var trimmed = raw.Trim();
 17
 4118        var jsonStart = trimmed.IndexOf('{');
 4119        if (jsonStart >= 0)
 20        {
 1721            var fromJson = TryExtractODataMessage(trimmed[jsonStart..]);
 1722            if (!string.IsNullOrWhiteSpace(fromJson))
 1123                return fromJson.Trim();
 24        }
 25
 3026        if (trimmed.Contains("OData /Post action", StringComparison.Ordinal))
 27        {
 028            var colonIdx = trimmed.LastIndexOf(':');
 029            if (colonIdx >= 0 && colonIdx < trimmed.Length - 1)
 30            {
 031                var tail = trimmed[(colonIdx + 1)..].Trim();
 032                var fromTail = TryExtractODataMessage(tail);
 033                return !string.IsNullOrWhiteSpace(fromTail) ? fromTail.Trim() : tail;
 34            }
 35        }
 36
 3037        return trimmed;
 38    }
 39
 40    /// <summary>Код ошибки OData (<c>odata.error.code</c>), если тело — OData-ошибка в JSON.</summary>
 41    internal static string? TryExtractODataCode(string? body)
 42    {
 1743        if (string.IsNullOrWhiteSpace(body))
 244            return null;
 45
 1546        var jsonStart = body.IndexOf('{');
 1547        if (jsonStart < 0)
 748            return null;
 49
 50        try
 51        {
 852            var code = JsonConvert.DeserializeObject<ODataErrorResponse>(body[jsonStart..])?.Error?.Code;
 853            return string.IsNullOrWhiteSpace(code) ? null : code.Trim();
 54        }
 055        catch
 56        {
 057            return null;
 58        }
 859    }
 60
 61    internal static string? TryExtractODataMessage(string? json)
 62    {
 1763        if (string.IsNullOrWhiteSpace(json))
 064            return null;
 65
 66        try
 67        {
 1768            var err = JsonConvert.DeserializeObject<ODataErrorResponse>(json);
 1769            return err?.Error?.Message?.Value;
 70        }
 071        catch
 72        {
 073            return null;
 74        }
 1775    }
 76}