< Summary

Information
Class: OzonOrdersWeb.WebServices.Partners.PartnerAuditGridRow
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Partners/PartnerGridRows.cs
Line coverage
41%
Covered lines: 5
Uncovered lines: 7
Coverable lines: 12
Total lines: 71
Line coverage: 41.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_OccurredAtUtc()100%210%
get_PartnerId()100%210%
get_PartnerName()100%11100%
get_Actor()100%210%
get_ActorKind()100%11100%
get_Action()100%210%
get_OrderNumber()100%210%
get_Success()100%11100%
get_Details()100%210%
get_IpAddress()100%11100%

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>
 321public sealed record PartnerAuditGridRow(
 022    long Id,
 023    DateTime OccurredAtUtc,
 024    long? PartnerId,
 325    string? PartnerName,
 026    string Actor,
 227    string ActorKind,
 028    string Action,
 029    string? OrderNumber,
 130    bool Success,
 031    string? Details,
 332    string? IpAddress);
 33
 34public static class PartnerGridRows
 35{
 36    public const string ViewOnlyText = "Только просмотр";
 37
 38    public static IReadOnlyList<PartnerGridRow> Build(IEnumerable<PartnerListItemDto> partners) =>
 39        partners.Select(p =>
 40        {
 41            var labels = p.Permissions.Select(PermissionTitle).ToList();
 42            return new PartnerGridRow(
 43                p.Id, p.Name, p.Email, p.GoogleEmail, p.IsActive, p.LastLoginAtUtc, p.RulesCount,
 44                p.Permissions.Contains(PartnerPermissionCode.LabelPrint),
 45                p.Permissions.Contains(PartnerPermissionCode.Assemble),
 46                p.Permissions.Contains(PartnerPermissionCode.TrackNumber),
 47                labels.Count == 0 ? ViewOnlyText : string.Join(", ", labels));
 48        }).ToList();
 49
 50    public static string PermissionTitle(PartnerPermissionCode code) => code switch
 51    {
 52        PartnerPermissionCode.LabelPrint => "Этикетки",
 53        PartnerPermissionCode.Assemble => "Сборка и отгрузка",
 54        PartnerPermissionCode.TrackNumber => "Трек-номер",
 55        _ => code.ToString()
 56    };
 57
 58    public static string ActorKindTitle(PartnerActorKind kind) => kind switch
 59    {
 60        PartnerActorKind.Owner => "Владелец",
 61        PartnerActorKind.Partner => "Партнёр",
 62        _ => "Система"
 63    };
 64
 65    public static IReadOnlyList<PartnerAuditGridRow> BuildAudit(
 66        IEnumerable<PartnerAuditLog> rows, IReadOnlyDictionary<long, string> partnerNames) =>
 67        rows.Select(r => new PartnerAuditGridRow(
 68            r.Id, r.OccurredAtUtc, r.PartnerId,
 69            r.PartnerId is { } id ? partnerNames.GetValueOrDefault(id, "(удалён)") : null,
 70            r.Actor, ActorKindTitle(r.ActorKind), r.Action, r.OrderNumber, r.Success, r.Details, r.IpAddress)).ToList();
 71}