< Summary

Line coverage
100%
Covered lines: 14
Uncovered lines: 0
Coverable lines: 14
Total lines: 2563
Line coverage: 100%
Branch coverage
100%
Covered branches: 14
Total branches: 14
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
File 1: Build(...)100%1212100%
File 1: Clean(...)100%22100%
File 2: OfferKeyPattern()100%11100%
File 2: NonAlphanumeric()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/FeedPriceServices/FeedArticleKey.cs

#LineLine coverage
 1using System.Text.RegularExpressions;
 2
 3namespace Services.FeedPriceServices;
 4
 5/// <summary>
 6/// Ключ артикула в фиде — offer_id вида «5511971RUE=DEP»: артикул, «=» и префикс производителя
 7/// (EtProducer.MarketPrefix).
 8/// </summary>
 9public static partial class FeedArticleKey
 10{
 11    [GeneratedRegex(@"^[A-Za-z0-9\-\[\]]+=[A-Za-z0-9\[\]]+$")]
 12    private static partial Regex OfferKeyPattern();
 13
 14    [GeneratedRegex("[^A-Za-z0-9]")]
 15    private static partial Regex NonAlphanumeric();
 16
 17    /// <summary>
 18    /// Кандидаты ключа: ProductKey заказа, если он в формате offer_id, и ключ, собранный из артикула
 19    /// и префикса. Пустой список, если ключ собрать не из чего.
 20    /// </summary>
 21    public static IReadOnlyList<string> Build(string? productKey, string? article, string? marketPrefix)
 22    {
 723        var result = new List<string>(2);
 24
 725        var key = productKey?.Trim();
 726        if (!string.IsNullOrEmpty(key) && OfferKeyPattern().IsMatch(key))
 227            result.Add(key);
 28
 729        var cleanArticle = Clean(article);
 730        var cleanPrefix = Clean(marketPrefix);
 731        if (cleanArticle.Length > 0 && cleanPrefix.Length > 0)
 32        {
 333            var built = $"{cleanArticle}={cleanPrefix}";
 334            if (!result.Contains(built, StringComparer.OrdinalIgnoreCase))
 235                result.Add(built);
 36        }
 37
 738        return result;
 39    }
 40
 41    private static string Clean(string? value) =>
 1442        string.IsNullOrWhiteSpace(value) ? string.Empty : NonAlphanumeric().Replace(value.Trim(), string.Empty);
 43}

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/obj/Release/net8.0/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs

File '/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/obj/Release/net8.0/System.Text.RegularExpressions.Generator/System.Text.RegularExpressions.Generator.RegexGenerator/RegexGenerator.g.cs' does not exist (any more).