< Summary

Information
Class: Services.ApiServices.JapartsApi.JapartsDataManager
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/JapartsApi/JapartsDataManager.cs
Line coverage
36%
Covered lines: 9
Uncovered lines: 16
Coverable lines: 25
Total lines: 46
Line coverage: 36%
Branch coverage
25%
Covered branches: 15
Total branches: 58
Branch coverage: 25.8%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
GetBalanceAsync()100%210%
SearchAsync()100%11100%
GetBasketAsync()100%210%
AddToBasketAsync()0%2040%
CreateOrderAsync()100%210%
DeleteFromBasketAsync()100%210%
First(...)100%210%
Rows(...)50%22100%
String(...)100%44100%
Decimal(...)50%22100%
NullableDecimal(...)50%22100%
NullableInt(...)100%22100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/ApiServices/JapartsApi/JapartsDataManager.cs

#LineLine coverage
 1using System.Globalization;
 2using System.Text.Json;
 3
 4namespace Services.ApiServices.JapartsApi;
 5
 36public sealed class JapartsDataManager(JapartsHttpClient client)
 7{
 8    public async Task<JapartsBalance> GetBalanceAsync(CancellationToken ct = default)
 9    {
 010        using var json = await client.SendAsync("showbalance", null, ct);
 011        var row = First(json);
 012        return new JapartsBalance(Decimal(row, "balance"), Decimal(row, "inbasket"), Decimal(row, "orderdebt"), Decimal(
 013    }
 14
 15    public async Task<IReadOnlyList<JapartsOffer>> SearchAsync(string article, string? brand, CancellationToken ct = def
 16    {
 317        using var json = await client.SendAsync("search3", new Dictionary<string, string?> { ["detailnum"] = article, ["
 318        return Rows(json).Select(x => new JapartsOffer(String(x,"priceid") ?? "", String(x,"makename") ?? "", String(x,"
 119    }
 20
 21    public async Task<IReadOnlyList<JapartsBasketItem>> GetBasketAsync(CancellationToken ct = default)
 22    {
 023        using var json = await client.SendAsync("showbasket", null, ct);
 024        return Rows(json).Select(x => new JapartsBasketItem(String(x,"basketid") ?? "", String(x,"makename") ?? "", Stri
 025    }
 26
 27    public async Task<string> AddToBasketAsync(string priceId, decimal quantity, decimal? clientPrice, string comment, C
 28    {
 029        using var json = await client.SendAsync("addtobasket2", new Dictionary<string,string?> { ["priceid"] = priceId, 
 030        return String(First(json), "result") ?? "ITEM ADDED TO BASKET";
 031    }
 32
 33    public async Task<IReadOnlyList<string>> CreateOrderAsync(IEnumerable<string> basketIds, CancellationToken ct = defa
 34    {
 035        using var json = await client.SendAsync("baskettoorder", new Dictionary<string,string?> { ["basketidm"] = string
 036        return Rows(json).Select(x => String(x, "ordernum")).OfType<string>().Distinct().ToList();
 037    }
 038    public async Task DeleteFromBasketAsync(IEnumerable<string> basketIds, CancellationToken ct = default) { using var _
 039    public async Task<IReadOnlyList<JapartsOrderItem>> GetOrdersAsync(int interval, CancellationToken ct = default) { us
 040    private static JsonElement First(JsonDocument json) => Rows(json).FirstOrDefault();
 141    private static IEnumerable<JsonElement> Rows(JsonDocument json) => json.RootElement.ValueKind == JsonValueKind.Array
 1542    private static string? String(JsonElement row,string name) => row.ValueKind == JsonValueKind.Object && row.TryGetPro
 243    private static decimal Decimal(JsonElement row,string name,decimal fallback=0) => decimal.TryParse(String(row,name),
 144    private static decimal? NullableDecimal(JsonElement row,string name) => decimal.TryParse(String(row,name),NumberStyl
 345    private static int? NullableInt(JsonElement row,string name) => int.TryParse(String(row,name),out var value) ? value
 46}