< Summary

Information
Class: Services.BitrixStockServices.BitrixStockWarehouseSnapshotMatching
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/BitrixStockServices/BitrixStockWarehouseSnapshotMatching.cs
Line coverage
90%
Covered lines: 18
Uncovered lines: 2
Coverable lines: 20
Total lines: 38
Line coverage: 90%
Branch coverage
70%
Covered branches: 7
Total branches: 10
Branch coverage: 70%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Manufacturer()100%11100%
get_IsMatch()100%11100%
Match(...)70%101088.88%

File(s)

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

#LineLine coverage
 1namespace Services.BitrixStockServices;
 2
 3/// <summary>
 4/// Выбирает строку складского снимка только для того же производителя, что указан в Ozon offer_id.
 5/// Поиск по одному артикулу намеренно запрещён: это могло накатить остаток другого бренда.
 6/// </summary>
 7public static class BitrixStockWarehouseSnapshotMatching
 8{
 149    public sealed record SnapshotRow<T>(string Manufacturer, string? MarketPrefix, T Value);
 10
 1011    public sealed record MatchResult<T>(bool IsMatch, T? Value, string Note);
 12
 13    public static MatchResult<T> Match<T>(
 14        string offerId,
 15        IEnumerable<SnapshotRow<T>> snapshots)
 16    {
 317        var article = BitrixStockOrphanOfferMatching.ExtractArticle(offerId);
 318        var prefix = BitrixStockOrphanOfferMatching.ExtractMarketPrefix(offerId);
 319        if (string.IsNullOrWhiteSpace(prefix))
 020            return new MatchResult<T>(false, default,
 021                $"Остаток → 0: в Ozon offer_id «{offerId}» нет MarketPrefix; fallback по артикулу «{article}» запрещён."
 22
 323        var rows = snapshots.ToList();
 624        var match = rows.FirstOrDefault(s => string.Equals(s.MarketPrefix, prefix, StringComparison.OrdinalIgnoreCase));
 325        if (match != null)
 126            return new MatchResult<T>(true, match.Value, string.Empty);
 27
 228        var knownManufacturers = rows
 229            .Select(s => string.IsNullOrWhiteSpace(s.MarketPrefix)
 230                ? $"{s.Manufacturer} (без кода)"
 231                : $"{s.Manufacturer} ({s.MarketPrefix})")
 232            .Distinct(StringComparer.OrdinalIgnoreCase)
 233            .ToList();
 234        var source = knownManufacturers.Count == 0 ? "нет строк 1С" : string.Join(", ", knownManufacturers);
 235        return new MatchResult<T>(false, default,
 236            $"Остаток → 0: Ozon={prefix}, snapshot={source}; fallback по артикулу «{article}» запрещён.");
 37    }
 38}