< Summary

Information
Class: Services.ApiServices._1CApi.OData.OneCRegisterEndpoint
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/OData/OneCRegisterEndpoint.cs
Line coverage
100%
Covered lines: 6
Uncovered lines: 0
Coverable lines: 6
Total lines: 32
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
WithCondition(...)100%44100%

File(s)

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

#LineLine coverage
 1namespace Services.ApiServices._1CApi.OData;
 2
 3/// <summary>
 4/// Сборка адресов виртуальных таблиц регистров 1С (<c>/Balance</c>, <c>/Turnovers</c>, <c>/SliceLast</c>).
 5/// </summary>
 6public static class OneCRegisterEndpoint
 7{
 8    /// <summary>
 9    /// Добавляет отбор к виртуальной таблице. 1С Fresh не разрешает <c>$filter</c> по её измерениям —
 10    /// отвечает HTTP 500 «Операция не разрешена в предложении "ГДЕ"», из-за чего остатки в UI
 11    /// приходили пустыми. Условие должно уходить параметром <c>Condition</c> самой таблицы,
 12    /// то есть частью URL-фрагмента, а не строкой запроса.
 13    /// </summary>
 14    /// <param name="endpoint">
 15    /// Адрес виртуальной таблицы, при необходимости с уже заданными параметрами
 16    /// (у <c>/Turnovers</c> это <c>StartPeriod</c> и <c>EndPeriod</c>) — тогда отбор дописывается к ним.
 17    /// </param>
 18    /// <param name="condition">Условие в синтаксисе OData; пустое значение оставляет адрес как есть.</param>
 19    public static string WithCondition(string endpoint, string? condition)
 20    {
 6321        if (string.IsNullOrWhiteSpace(condition))
 322            return endpoint;
 23
 24        // Кириллица в именах измерений и пробелы вокруг eq/or обязаны быть закодированы:
 25        // без этого 1С либо не разбирает адрес, либо молча теряет отбор.
 6026        var parameter = $"Condition={Uri.EscapeDataString(condition.Trim())}";
 27
 6028        return endpoint.EndsWith(')')
 6029            ? $"{endpoint[..^1]},{parameter})"
 6030            : $"{endpoint}({parameter})";
 31    }
 32}