< Summary

Information
Class: OzonOrdersWeb.WebServices.Directories.ApiSupplierCatalogRow
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Directories/ApiSupplierCatalog.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 13
Coverable lines: 13
Total lines: 97
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
get_Key()100%210%
get_Name()100%210%
get_LogoUrl()100%210%
get_LogoMark()100%210%
get_LogoClass()100%210%
get_Description()100%210%
get_CurrencyCode()100%210%
get_QuotationEnabled()100%210%
get_ConsoleUrl()100%210%
get_CartUrl()100%210%
get_SettingsUrl()100%210%
get_LinkedSuppliers()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Directories/ApiSupplierCatalog.cs

#LineLine coverage
 1using OzonDomains.Models;
 2
 3namespace OzonOrdersWeb.WebServices.Directories;
 4
 5/// <summary>Строка грида «Поставщики по API» на странице поставщиков: карточка интеграции и ссылки на её разделы.</summ
 06public sealed record ApiSupplierCatalogRow(
 07    string Key,
 08    string Name,
 09    string LogoUrl,
 010    string? LogoMark,
 011    string? LogoClass,
 012    string Description,
 013    string? CurrencyCode,
 014    bool? QuotationEnabled,
 015    string ConsoleUrl,
 016    string? CartUrl,
 017    string? SettingsUrl,
 018    IReadOnlyList<string> LinkedSuppliers);
 19
 20/// <summary>Каталог API-интеграций: что умеет каждая, где её консоль, корзина и настройки.</summary>
 21public static class ApiSupplierCatalog
 22{
 23    /// <summary>Описание интеграции. CartProvider — значение <c>provider</c> общей корзины SupplierCart;
 24    /// CartController — отдельная корзина (Japarts).</summary>
 25    public sealed record Entry(
 26        string Key,
 27        string Name,
 28        string LogoUrl,
 29        string Description,
 30        string? CartProvider = null,
 31        string? CartController = null,
 32        string? LogoMark = null,
 33        string? LogoClass = null,
 34        string? FixedCurrency = null);
 35
 36    public static readonly IReadOnlyList<Entry> Entries =
 37    [
 38        new("Armtek", "Армтек", "/images/armtek-logo.svg", "Проценка, заказы, фактуры, отчёты", "armtek"),
 39        new("ArmtekBy", "Армтек BY", "/images/armtek-logo.svg", "Беларусский аккаунт, проценка и API-консоль", "armtekby
 40        new("ShateM", "Шате‑М", "/images/shate-m-logo.svg", "Товары, проценка, заказы и возвраты"),
 41        new("Japarts", "Japarts", "/images/japarts-logo.jpg", "Проценка, серверная корзина и заказы", CartController: "J
 42        new("Avd", "АВД", "/images/avd-logo.svg", "Проценка (чтение), корзина и заказы (АВД API)", "avd"),
 43        new("Berg", "Берг", "/images/berg-logo-2026.png", "Проценка, справочники и статусы заказов (только чтение)"),
 44        new("Motex", "МоТехС", "/images/motex-logo.png", "Проценка и справочники (только чтение)"),
 45        new("MlAuto", "ML-Auto BY", "https://www.ml-auto.by/media/files/settings/inside-placeholder-logo-mobile.png",
 46            "Проценка, справочники, заказы и возвраты (только чтение)", "mlauto"),
 47        new("MlAutoRu", "ML-Auto RU", "https://www.ml-auto.by/media/files/settings/inside-placeholder-logo-mobile.png",
 48            "Справочники и тестовая проценка (только чтение)", "mlautoru"),
 49        new("ForumAuto", "Форум-Авто (Союз)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чтение)", "
 50        new("ForumAutoInterparts", "Форум-Авто (Интерпартс)", "/images/forum-auto-logo.svg", "Проценка и справочники (то
 51        new("ForumAutoPiter", "Форум-Авто (Питер)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чтени
 52        new("ForumAutoRostov", "Форум-Авто (Ростов)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чте
 53        new("ForumAutoIstra", "Форум-Авто (Истра)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чтени
 54        new("FavoritParts", "Фаворит Союз", "/images/favorit-parts-logo.png", "Проценка, корзина и заказы", "favoritpart
 55        new("FavoritPartsIstra", "Фаворит Истра", "/images/favorit-parts-logo.png", "Проценка, корзина и заказы", "favor
 56        new("FavoritPartsRostov", "Фаворит Ростов", "/images/favorit-parts-logo.png", "Проценка, корзина и заказы", "fav
 57        new("MoskvorechieIstra", "Москворечье (Истра)", "/images/moskvorechie-logo.gif", "Проценка, внешняя корзина и за
 58            LogoClass: "sp-moskvorechie-logo"),
 59        new("MikadoMskHod20", "Микадо МскХод20", "https://mikado-parts.ru/img/MikadoLogo.svg", "WebService: диагностика,
 60            LogoClass: "sp-mikado-logo"),
 61        new("ZZapMoscow", "ZZap Москва", "/images/zzap-logo.svg", "Агрегатор продавцов: поиск без замен, корзина и заказ
 62            LogoClass: "sp-zzap-logo"),
 63        new("ProfitLiga", "Профит-Лига", "/images/profit-liga-logo.svg", "Проценка, корзина и заказы (Ростовский офис)",
 64            LogoClass: "sp-profit-liga-logo"),
 65        new("Nikei", "Nikei", "/images/nikei-logo.svg", "Read-only консоль и подготовка интеграции API", FixedCurrency: 
 66    ];
 67
 68    /// <summary>
 69    /// Строки грида. <paramref name="settings"/> — настройки по ключу интеграции (валюта, проценка, имя для Форум-Авто)
 70    /// ссылки строит <paramref name="url"/>(controller, action, provider). Настройки показываются только администратору
 71    /// </summary>
 72    public static List<ApiSupplierCatalogRow> Build(
 73        IReadOnlyDictionary<string, ApiSupplierSettings> settings,
 74        IReadOnlyDictionary<string, string> defaultDisplayNames,
 75        IReadOnlyList<SupplierGridRow> suppliers,
 76        bool isAdmin,
 77        Func<string, string, string?, string> url) =>
 78        Entries.Select(e =>
 79            {
 80                settings.TryGetValue(e.Key, out var s);
 81                var name = e.Key.StartsWith("ForumAuto", StringComparison.Ordinal)
 82                    ? s?.DisplayName ?? defaultDisplayNames.GetValueOrDefault(e.Key) ?? e.Name
 83                    : e.Name;
 84                var cartUrl = e.CartController != null ? url(e.CartController, "Index", null)
 85                    : e.CartProvider != null ? url("SupplierCart", "Index", e.CartProvider)
 86                    : null;
 87                return new ApiSupplierCatalogRow(
 88                    e.Key, name, e.LogoUrl, e.LogoMark, e.LogoClass, e.Description,
 89                    s != null ? s.CurrencyCode.ToString() : e.FixedCurrency,
 90                    s?.IsQuotationEnabled,
 91                    url(e.Key, "Index", null),
 92                    cartUrl,
 93                    isAdmin ? url("ApiSupplierSettings", e.Key, null) : null,
 94                    suppliers.Where(r => r.ApiProviders.Any(p => p.Key == e.Key)).Select(r => r.Name ?? "—").OrderBy(n =
 95            })
 96            .ToList();
 97}