< Summary

Information
Class: OzonOrdersWeb.WebServices.Admin.AdminUserGridRow
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Admin/AdminGridRows.cs
Line coverage
66%
Covered lines: 8
Uncovered lines: 4
Coverable lines: 12
Total lines: 55
Line coverage: 66.6%
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%11100%
get_Id()100%210%
get_DisplayName()100%11100%
get_SecondaryName()100%11100%
get_Email()100%210%
get_AvatarUrl()100%11100%
get_Initials()100%11100%
get_Roles()100%210%
get_OverrideCount()100%210%
get_IsLocked()100%11100%
get_IsApproved()100%11100%
get_AccessFailedCount()100%11100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Admin/AdminGridRows.cs

#LineLine coverage
 1using OzonOrdersWeb.Areas.Admin.Models;
 2
 3namespace OzonOrdersWeb.WebServices.Admin;
 4
 5/// <summary>Строка грида пользователей /Admin/Users.</summary>
 36public sealed record AdminUserGridRow(
 07    string Id,
 28    string DisplayName,
 29    string? SecondaryName,
 010    string? Email,
 111    string? AvatarUrl,
 212    string Initials,
 013    IReadOnlyList<string> Roles,
 014    int OverrideCount,
 115    bool IsLocked,
 316    bool IsApproved,
 317    int AccessFailedCount);
 18
 19/// <summary>Строка грида реестра страниц /Admin/Pages: порядок дерева сохраняется как числовая колонка.</summary>
 20public sealed record AdminPageGridRow(
 21    int Id, int TreeOrder, int Depth, string DisplayName, string Code, string? Area, string Controller, string Action,
 22    bool IsMenuItem, bool IsActive);
 23
 24/// <summary>
 25/// Строки гридов раздела /Admin. Сюда переехала логика, которая жила в Razor списков: отображаемое имя и инициалы
 26/// пользователя, второй логин под Google-именем, признак «доступ одобрен» (email подтверждён и вход одобрен админом).
 27/// </summary>
 28public static class AdminGridRows
 29{
 30    public static IReadOnlyList<AdminUserGridRow> Users(IEnumerable<UserListItemVm> users) =>
 31        users.Select(u =>
 32        {
 33            var displayName = string.IsNullOrWhiteSpace(u.GoogleDisplayName) ? u.UserName : u.GoogleDisplayName!;
 34            var secondary = !string.IsNullOrWhiteSpace(u.GoogleDisplayName)
 35                            && !string.Equals(u.GoogleDisplayName, u.UserName, StringComparison.OrdinalIgnoreCase)
 36                ? u.UserName
 37                : null;
 38            return new AdminUserGridRow(
 39                u.Id, displayName, secondary, u.Email,
 40                string.IsNullOrWhiteSpace(u.GoogleAvatarUrl) ? null : u.GoogleAvatarUrl,
 41                Initials(displayName), u.RoleNames, u.OverrideCount, u.IsLocked,
 42                u.EmailConfirmed && u.IsAdminApproved, u.AccessFailedCount);
 43        }).ToList();
 44
 45    public static IReadOnlyList<AdminPageGridRow> Pages(IEnumerable<PageListItemVm> pages) =>
 46        pages.Select((p, i) => new AdminPageGridRow(p.Id, i, p.Depth, p.DisplayName, p.Code, p.Area, p.Controller, p.Act
 47            .ToList();
 48
 49    /// <summary>Две первые буквы имени — заглушка аватара.</summary>
 50    public static string Initials(string? name)
 51    {
 52        var source = string.IsNullOrWhiteSpace(name) ? "U" : name.Trim();
 53        return (source.Length >= 2 ? source[..2] : source).ToUpperInvariant();
 54    }
 55}