< Summary

Information
Class: OzonOrdersWeb.WebServices.Directories.ApiSupplierCatalog
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Directories/ApiSupplierCatalog.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 60
Coverable lines: 60
Total lines: 97
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 20
Branch coverage: 0%
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_Description()100%210%
get_CartProvider()100%210%
get_CartController()100%210%
get_LogoMark()100%210%
get_LogoClass()100%210%
get_FixedCurrency()100%210%
.cctor()100%210%
Build(...)0%420200%

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
 6public sealed record ApiSupplierCatalogRow(
 7    string Key,
 8    string Name,
 9    string LogoUrl,
 10    string? LogoMark,
 11    string? LogoClass,
 12    string Description,
 13    string? CurrencyCode,
 14    bool? QuotationEnabled,
 15    string ConsoleUrl,
 16    string? CartUrl,
 17    string? SettingsUrl,
 18    IReadOnlyList<string> LinkedSuppliers);
 19
 20/// <summary>Каталог API-интеграций: что умеет каждая, где её консоль, корзина и настройки.</summary>
 21public static class ApiSupplierCatalog
 22{
 23    /// <summary>Описание интеграции. CartProvider — значение <c>provider</c> общей корзины SupplierCart;
 24    /// CartController — отдельная корзина (Japarts).</summary>
 025    public sealed record Entry(
 026        string Key,
 027        string Name,
 028        string LogoUrl,
 029        string Description,
 030        string? CartProvider = null,
 031        string? CartController = null,
 032        string? LogoMark = null,
 033        string? LogoClass = null,
 034        string? FixedCurrency = null);
 35
 036    public static readonly IReadOnlyList<Entry> Entries =
 037    [
 038        new("Armtek", "Армтек", "/images/armtek-logo.svg", "Проценка, заказы, фактуры, отчёты", "armtek"),
 039        new("ArmtekBy", "Армтек BY", "/images/armtek-logo.svg", "Беларусский аккаунт, проценка и API-консоль", "armtekby
 040        new("ShateM", "Шате‑М", "/images/shate-m-logo.svg", "Товары, проценка, заказы и возвраты"),
 041        new("Japarts", "Japarts", "/images/japarts-logo.jpg", "Проценка, серверная корзина и заказы", CartController: "J
 042        new("Avd", "АВД", "/images/avd-logo.svg", "Проценка (чтение), корзина и заказы (АВД API)", "avd"),
 043        new("Berg", "Берг", "/images/berg-logo-2026.png", "Проценка, справочники и статусы заказов (только чтение)"),
 044        new("Motex", "МоТехС", "/images/motex-logo.png", "Проценка и справочники (только чтение)"),
 045        new("MlAuto", "ML-Auto BY", "https://www.ml-auto.by/media/files/settings/inside-placeholder-logo-mobile.png",
 046            "Проценка, справочники, заказы и возвраты (только чтение)", "mlauto"),
 047        new("MlAutoRu", "ML-Auto RU", "https://www.ml-auto.by/media/files/settings/inside-placeholder-logo-mobile.png",
 048            "Справочники и тестовая проценка (только чтение)", "mlautoru"),
 049        new("ForumAuto", "Форум-Авто (Союз)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чтение)", "
 050        new("ForumAutoInterparts", "Форум-Авто (Интерпартс)", "/images/forum-auto-logo.svg", "Проценка и справочники (то
 051        new("ForumAutoPiter", "Форум-Авто (Питер)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чтени
 052        new("ForumAutoRostov", "Форум-Авто (Ростов)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чте
 053        new("ForumAutoIstra", "Форум-Авто (Истра)", "/images/forum-auto-logo.svg", "Проценка и справочники (только чтени
 054        new("FavoritParts", "Фаворит Союз", "/images/favorit-parts-logo.png", "Проценка, корзина и заказы", "favoritpart
 055        new("FavoritPartsIstra", "Фаворит Истра", "/images/favorit-parts-logo.png", "Проценка, корзина и заказы", "favor
 056        new("FavoritPartsRostov", "Фаворит Ростов", "/images/favorit-parts-logo.png", "Проценка, корзина и заказы", "fav
 057        new("MoskvorechieIstra", "Москворечье (Истра)", "/images/moskvorechie-logo.gif", "Проценка, внешняя корзина и за
 058            LogoClass: "sp-moskvorechie-logo"),
 059        new("MikadoMskHod20", "Микадо МскХод20", "https://mikado-parts.ru/img/MikadoLogo.svg", "WebService: диагностика,
 060            LogoClass: "sp-mikado-logo"),
 061        new("ZZapMoscow", "ZZap Москва", "/images/zzap-logo.svg", "Агрегатор продавцов: поиск без замен, корзина и заказ
 062            LogoClass: "sp-zzap-logo"),
 063        new("ProfitLiga", "Профит-Лига", "/images/profit-liga-logo.svg", "Проценка, корзина и заказы (Ростовский офис)",
 064            LogoClass: "sp-profit-liga-logo"),
 065        new("Nikei", "Nikei", "/images/nikei-logo.svg", "Read-only консоль и подготовка интеграции API", FixedCurrency: 
 066    ];
 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) =>
 078        Entries.Select(e =>
 079            {
 080                settings.TryGetValue(e.Key, out var s);
 081                var name = e.Key.StartsWith("ForumAuto", StringComparison.Ordinal)
 082                    ? s?.DisplayName ?? defaultDisplayNames.GetValueOrDefault(e.Key) ?? e.Name
 083                    : e.Name;
 084                var cartUrl = e.CartController != null ? url(e.CartController, "Index", null)
 085                    : e.CartProvider != null ? url("SupplierCart", "Index", e.CartProvider)
 086                    : null;
 087                return new ApiSupplierCatalogRow(
 088                    e.Key, name, e.LogoUrl, e.LogoMark, e.LogoClass, e.Description,
 089                    s != null ? s.CurrencyCode.ToString() : e.FixedCurrency,
 090                    s?.IsQuotationEnabled,
 091                    url(e.Key, "Index", null),
 092                    cartUrl,
 093                    isAdmin ? url("ApiSupplierSettings", e.Key, null) : null,
 094                    suppliers.Where(r => r.ApiProviders.Any(p => p.Key == e.Key)).Select(r => r.Name ?? "—").OrderBy(n =
 095            })
 096            .ToList();
 97}