< Summary

Information
Class: OzonOrdersWeb.WebServices.Orders.OrdersIndexPageViewDataRequest
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Orders/OrdersIndexPageViewDataService.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 4
Coverable lines: 4
Total lines: 121
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
get_UserId()100%210%
get_IsWebAdmin()100%210%
get_PrefetchedPermissionBundle()100%210%
get_CancellationToken()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/WebServices/Orders/OrdersIndexPageViewDataService.cs

#LineLine coverage
 1using OzonOrdersWeb.Authorization;
 2using OzonOrdersWeb.WebServices;
 3using Services.Authorization.Dtos;
 4using Services.Authorization.Services;
 5
 6namespace OzonOrdersWeb.WebServices.Orders;
 7
 8public sealed class OrdersIndexPageViewData
 9{
 10    public IReadOnlyDictionary<int, string> TransactionTooltips { get; init; } = new Dictionary<int, string>();
 11
 12    public IReadOnlyList<TransactionTransitionRuleVm> TransactionTransitionRules { get; init; } = [];
 13
 14    public bool IsAppSuperAdmin { get; init; }
 15
 16    public IReadOnlyList<string> AppPageTransactionPaths { get; init; } = [];
 17
 18    public IReadOnlyList<string> AppPageContextMenuPaths { get; init; } = [];
 19
 20    public bool UseAppPageTransactionMenu { get; init; }
 21
 22    public bool UseAppPageContextMenu { get; init; }
 23}
 24
 25public sealed class OrdersIndexPageViewDataRequest
 26{
 027    public required string UserId { get; init; }
 28
 029    public bool IsWebAdmin { get; init; }
 30
 031    public UserPermissionsBundle? PrefetchedPermissionBundle { get; init; }
 32
 033    public CancellationToken CancellationToken { get; init; }
 34}
 35
 36public interface IOrdersIndexPageViewDataService
 37{
 38    Task<OrdersIndexPageViewData> BuildAsync(OrdersIndexPageViewDataRequest request);
 39}
 40
 41public sealed class OrdersIndexPageViewDataService : IOrdersIndexPageViewDataService
 42{
 43    private readonly TransactionTooltipService _transactionTooltipService;
 44    private readonly TransactionTransitionRuleService _transactionTransitionRuleService;
 45    private readonly IPermissionService _permissionService;
 46
 47    public OrdersIndexPageViewDataService(
 48        TransactionTooltipService transactionTooltipService,
 49        TransactionTransitionRuleService transactionTransitionRuleService,
 50        IPermissionService permissionService)
 51    {
 52        _transactionTooltipService = transactionTooltipService;
 53        _transactionTransitionRuleService = transactionTransitionRuleService;
 54        _permissionService = permissionService;
 55    }
 56
 57    public async Task<OrdersIndexPageViewData> BuildAsync(OrdersIndexPageViewDataRequest request)
 58    {
 59        var tooltips = await _transactionTooltipService.GetTransactionTooltipsAsync();
 60        var transitionRules = await _transactionTransitionRuleService.GetRulesAsync();
 61
 62        var emptyMenu = new OrdersIndexPageViewData
 63        {
 64            TransactionTooltips = tooltips,
 65            TransactionTransitionRules = transitionRules
 66        };
 67
 68        if (request.IsWebAdmin)
 69        {
 70            return emptyMenu;
 71        }
 72
 73        var bundle = request.PrefetchedPermissionBundle
 74                     ?? await _permissionService.GetUserPermissionsAsync(request.UserId, request.CancellationToken);
 75
 76        if (bundle.IsSuperAdmin)
 77        {
 78            return new OrdersIndexPageViewData
 79            {
 80                TransactionTooltips = tooltips,
 81                TransactionTransitionRules = transitionRules,
 82                IsAppSuperAdmin = true
 83            };
 84        }
 85
 86        if (bundle.Pages is null || bundle.Pages.Count == 0)
 87        {
 88            return emptyMenu;
 89        }
 90
 91        var byCode = bundle.Pages.ToDictionary(p => p.PageCode, StringComparer.OrdinalIgnoreCase);
 92
 93        var txPaths = new List<string>();
 94        foreach (var code in Studio2RolePageMenuCatalog.TransactionDropdownPageCodes)
 95        {
 96            if (byCode.TryGetValue(code, out var page) && (page.CanCreate || page.CanView))
 97            {
 98                txPaths.Add(Studio2RolePageMenuCatalog.ToMvcPath(code));
 99            }
 100        }
 101
 102        var ctxPaths = new List<string>();
 103        foreach (var code in Studio2OrderContextMenuCatalog.ContextMenuPageCodes)
 104        {
 105            if (byCode.TryGetValue(code, out var page) && (page.CanCreate || page.CanView))
 106            {
 107                ctxPaths.Add(Studio2RolePageMenuCatalog.ToMvcPath(code));
 108            }
 109        }
 110
 111        return new OrdersIndexPageViewData
 112        {
 113            TransactionTooltips = tooltips,
 114            TransactionTransitionRules = transitionRules,
 115            AppPageTransactionPaths = txPaths,
 116            AppPageContextMenuPaths = ctxPaths,
 117            UseAppPageTransactionMenu = true,
 118            UseAppPageContextMenu = true
 119        };
 120    }
 121}