< Summary

Information
Class: OzonOrdersWeb.WebServices.Partners.PartnerGridRows
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Partners/PartnerGridRows.cs
Line coverage
88%
Covered lines: 24
Uncovered lines: 3
Coverable lines: 27
Total lines: 71
Line coverage: 88.8%
Branch coverage
75%
Covered branches: 9
Total branches: 12
Branch coverage: 75%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Build(...)100%22100%
PermissionTitle(...)50%4471.42%
ActorKindTitle(...)75%4483.33%
BuildAudit(...)100%22100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Partners/PartnerGridRows.cs

#LineLine coverage
 1using OzonDomains.Models.Partners;
 2using Services.PartnerServices;
 3
 4namespace OzonOrdersWeb.WebServices.Partners;
 5
 6/// <summary>Строка грида партнёров. Всё, что раньше считалось во вьюхе, посчитано здесь, чтобы по нему работали фильтры
 7public sealed record PartnerGridRow(
 8    long Id,
 9    string Name,
 10    string? Email,
 11    string? GoogleEmail,
 12    bool IsActive,
 13    DateTime? LastLoginAtUtc,
 14    int RulesCount,
 15    bool LabelPrint,
 16    bool Assemble,
 17    bool TrackNumber,
 18    string PermissionsText);
 19
 20/// <summary>Строки грида журнала партнёров: имя партнёра подставлено сервером, удалённый партнёр помечен.</summary>
 21public sealed record PartnerAuditGridRow(
 22    long Id,
 23    DateTime OccurredAtUtc,
 24    long? PartnerId,
 25    string? PartnerName,
 26    string Actor,
 27    string ActorKind,
 28    string Action,
 29    string? OrderNumber,
 30    bool Success,
 31    string? Details,
 32    string? IpAddress);
 33
 34public static class PartnerGridRows
 35{
 36    public const string ViewOnlyText = "Только просмотр";
 37
 38    public static IReadOnlyList<PartnerGridRow> Build(IEnumerable<PartnerListItemDto> partners) =>
 139        partners.Select(p =>
 140        {
 241            var labels = p.Permissions.Select(PermissionTitle).ToList();
 242            return new PartnerGridRow(
 243                p.Id, p.Name, p.Email, p.GoogleEmail, p.IsActive, p.LastLoginAtUtc, p.RulesCount,
 244                p.Permissions.Contains(PartnerPermissionCode.LabelPrint),
 245                p.Permissions.Contains(PartnerPermissionCode.Assemble),
 246                p.Permissions.Contains(PartnerPermissionCode.TrackNumber),
 247                labels.Count == 0 ? ViewOnlyText : string.Join(", ", labels));
 148        }).ToList();
 49
 250    public static string PermissionTitle(PartnerPermissionCode code) => code switch
 251    {
 152        PartnerPermissionCode.LabelPrint => "Этикетки",
 053        PartnerPermissionCode.Assemble => "Сборка и отгрузка",
 154        PartnerPermissionCode.TrackNumber => "Трек-номер",
 055        _ => code.ToString()
 256    };
 57
 358    public static string ActorKindTitle(PartnerActorKind kind) => kind switch
 359    {
 160        PartnerActorKind.Owner => "Владелец",
 261        PartnerActorKind.Partner => "Партнёр",
 062        _ => "Система"
 363    };
 64
 65    public static IReadOnlyList<PartnerAuditGridRow> BuildAudit(
 66        IEnumerable<PartnerAuditLog> rows, IReadOnlyDictionary<long, string> partnerNames) =>
 467        rows.Select(r => new PartnerAuditGridRow(
 468            r.Id, r.OccurredAtUtc, r.PartnerId,
 469            r.PartnerId is { } id ? partnerNames.GetValueOrDefault(id, "(удалён)") : null,
 470            r.Actor, ActorKindTitle(r.ActorKind), r.Action, r.OrderNumber, r.Success, r.Details, r.IpAddress)).ToList();
 71}