< Summary

Information
Class: OzonOrdersWeb.Filters.SupplierDeliverySurchargeFilter
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Filters/SupplierDeliverySurchargeFilter.cs
Line coverage
100%
Covered lines: 11
Uncovered lines: 0
Coverable lines: 11
Total lines: 34
Line coverage: 100%
Branch coverage
71%
Covered branches: 10
Total branches: 14
Branch coverage: 71.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
OnActionExecutionAsync()71.42%1414100%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Filters/SupplierDeliverySurchargeFilter.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Mvc;
 2using Microsoft.AspNetCore.Mvc.Filters;
 3using OzonDomains;
 4using Services.ApiSupplierSettingsServices;
 5
 6namespace OzonOrdersWeb.Filters;
 7
 8/// <summary>Прибавляет к срокам предложений надбавку из настроек API-поставщика. Висит на тех же
 9/// *PriceController, что и <see cref="SupplierQuotationHistoryFilter"/>, но с большим Order —
 10/// чтобы отработать раньше и история проценки записала уже итоговые сроки.</summary>
 11public sealed class SupplierDeliverySurchargeFilter : IAsyncActionFilter
 12{
 13    private readonly ApiSupplierSettingsService _settings;
 14
 1015    public SupplierDeliverySurchargeFilter(ApiSupplierSettingsService settings) => _settings = settings;
 16
 17    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
 18    {
 519        var executed = await next();
 520        if (executed.Exception is not null) return;
 21
 522        var providerKey = SupplierQuotationHistoryFilter.ResolveProviderKey(executed.Controller.GetType().Name);
 623        if (providerKey is null || executed.Result is not ObjectResult { StatusCode: null or < 400 } result) return;
 24
 425        var offers = SupplierQuotationResultReader.ExtractOffers(result.Value);
 426        if (offers.Count == 0) return;
 27
 28        // Валюта здесь не важна: настройки уже существуют, а для несохранённого поставщика
 29        // GetAsync вернёт заготовку с нулевой надбавкой.
 430        var settings = await _settings.GetAsync(providerKey, CurrencyCode.RUB, context.HttpContext.RequestAborted);
 431        SupplierDeliverySurcharge.Apply(offers, settings.ExtraDeliveryHours);
 432        SupplierQuotationPriceMultiplier.Apply(offers, settings.PriceMultiplier);
 533    }
 34}