< Summary

Information
Class: Services.ApiServices._1CApi.Nomenclature.NomenclatureResolution
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Nomenclature/NomenclatureResolution.cs
Line coverage
100%
Covered lines: 15
Uncovered lines: 0
Coverable lines: 15
Total lines: 43
Line coverage: 100%
Branch coverage
93%
Covered branches: 15
Total branches: 16
Branch coverage: 93.7%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_RefKey()100%11100%
get_Created()100%11100%
get_DisplayName()100%11100%
get_Reason()100%11100%
get_Status()100%11100%
get_FoundByVariant()100%11100%
LegacySearchArticle(...)91.66%1212100%
NoteReason(...)100%22100%
ReasonSuffix(...)100%22100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/1CApi/Nomenclature/NomenclatureResolution.cs

#LineLine coverage
 1using OzonDomains.Models;
 2
 3namespace Services.ApiServices._1CApi.Nomenclature;
 4
 5/// <summary>Итог разрешения номенклатуры одной позиции.</summary>
 6/// <param name="RefKey">Карточка 1С; null — карточки нет (для «только найти» или при неоднозначности).</param>
 7/// <param name="Created">Карточка создана этим вызовом.</param>
 8/// <param name="DisplayName">Название и артикул созданной карточки (для сообщения «создана номенклатура»).</param>
 9/// <param name="Reason">Причина, почему карточки нет или как она найдена (вариант артикула, бренд по названию).</param>
 10/// <param name="Status">Статус нового поиска; null, когда решал прежний поиск.</param>
 11/// <param name="FoundByVariant">Найдена по «похожему» артикулу — показываем с пометкой.</param>
 2312public sealed record NomenclatureResolution(
 2513    Guid? RefKey,
 2314    bool Created,
 115    string DisplayName,
 416    string? Reason,
 917    NomenclatureMatchStatus? Status,
 2418    bool FoundByVariant)
 19{
 20    /// <summary>
 21    /// Артикул для поиска, как его выбирал <c>OneCTransferManager</c> до модуля: часть ключа товара до «=», если в ней
 22    /// есть разделители (иначе очищенный артикул заказа). Нужен реализации по умолчанию, чтобы поведение не менялось.
 23    /// </summary>
 24    public static string LegacySearchArticle(Order order)
 25    {
 726        var productKeyArticle = order.ProductKey?.Split('=', 2)[0]?.Trim();
 3927        if (!string.IsNullOrWhiteSpace(productKeyArticle) && productKeyArticle.Any(ch => !char.IsLetterOrDigit(ch)))
 228            return productKeyArticle;
 29
 530        return order.Article?.Trim() ?? string.Empty;
 31    }
 32
 33    /// <summary>Запомнить причину для позиции без карточки (ключ — артикул); пустую причину не пишем.</summary>
 34    public static void NoteReason(IDictionary<string, string> reasons, string article, string? reason)
 35    {
 336        if (!string.IsNullOrWhiteSpace(reason))
 137            reasons[article] = reason;
 338    }
 39
 40    /// <summary>« — причина» для строки «не найдена номенклатура»; без причины (прежний поиск) пусто, текст не меняется
 41    public static string ReasonSuffix(IReadOnlyDictionary<string, string> reasons, string article)
 542        => reasons.TryGetValue(article, out var reason) ? $" — {reason}" : string.Empty;
 43}