< Summary

Information
Class: Services.EmailRoutingServices.FileEmailRoutingSchedulerStore
Assembly: Services
File(s): /home/runner/work/Studio2Prod/Studio2Prod/AppRepository/EmailRoutingServices/EmailRoutingSchedulerStore.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 65
Coverable lines: 65
Total lines: 112
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 4
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
GetCurrent()100%210%
SaveSettingsAsync()100%210%
DisableAsync()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/AppRepository/EmailRoutingServices/EmailRoutingSchedulerStore.cs

#LineLine coverage
 1using Microsoft.Extensions.Configuration;
 2using Microsoft.Extensions.Hosting;
 3using Microsoft.Extensions.Logging;
 4using Microsoft.Extensions.Options;
 5using Newtonsoft.Json.Linq;
 6
 7namespace Services.EmailRoutingServices;
 8
 9public class EmailRoutingSchedulerSettings
 10{
 11    public int IntervalMinutes { get; init; } = 5;
 12    public int MaxBatchesPerRun { get; init; } = 20;
 13    public bool AllowMultiMatch { get; init; }
 14    public bool RecurringJobEnabled { get; init; } = true;
 15    public int FetchLimit { get; init; } = 20;
 16    public int FetchScanLimit { get; init; } = ImapFetchWindow.DefaultFetchScanLimit;
 17    public int FetchWindowDays { get; init; } = ImapFetchWindow.DefaultFetchWindowDays;
 18}
 19
 20public interface IEmailRoutingSchedulerStore
 21{
 22    EmailRoutingSchedulerSettings GetCurrent();
 23    Task SaveSettingsAsync(EmailRoutingSchedulerSettings settings, CancellationToken cancellationToken = default);
 24    Task DisableAsync(CancellationToken cancellationToken = default);
 25}
 26
 27public class FileEmailRoutingSchedulerStore : IEmailRoutingSchedulerStore
 28{
 29    private readonly IHostEnvironment _environment;
 30    private readonly IConfiguration _configuration;
 31    private readonly IOptionsMonitor<EmailRoutingExecutionOptions> _executionOptions;
 32    private readonly IOptionsMonitor<ImapSettings> _imapOptions;
 33    private readonly ILogger<FileEmailRoutingSchedulerStore> _logger;
 34
 035    public FileEmailRoutingSchedulerStore(
 036        IHostEnvironment environment,
 037        IConfiguration configuration,
 038        IOptionsMonitor<EmailRoutingExecutionOptions> executionOptions,
 039        IOptionsMonitor<ImapSettings> imapOptions,
 040        ILogger<FileEmailRoutingSchedulerStore> logger)
 41    {
 042        _environment = environment;
 043        _configuration = configuration;
 044        _executionOptions = executionOptions;
 045        _imapOptions = imapOptions;
 046        _logger = logger;
 047    }
 48
 49    public EmailRoutingSchedulerSettings GetCurrent()
 50    {
 051        var execution = _executionOptions.CurrentValue;
 052        var imap = _imapOptions.CurrentValue;
 053        return new EmailRoutingSchedulerSettings
 054        {
 055            IntervalMinutes = execution.IntervalMinutes,
 056            MaxBatchesPerRun = execution.MaxBatchesPerRun,
 057            AllowMultiMatch = execution.AllowMultiMatch,
 058            RecurringJobEnabled = execution.RecurringJobEnabled,
 059            FetchLimit = imap.FetchLimit,
 060            FetchScanLimit = imap.FetchScanLimit,
 061            FetchWindowDays = imap.FetchWindowDays
 062        };
 63    }
 64
 65    public async Task SaveSettingsAsync(EmailRoutingSchedulerSettings settings, CancellationToken cancellationToken = de
 66    {
 067        var configPath = AppRuntimeSettingsPaths.ResolvePath(_environment.ContentRootPath, _configuration);
 068        await AppRuntimeSettingsWriter.SaveAsync(
 069            _environment.ContentRootPath,
 070            _configuration,
 071            root =>
 072            {
 073                var emailRouting = root["EmailRouting"] as JObject ?? new JObject();
 074                emailRouting["AllowMultiMatch"] = settings.AllowMultiMatch;
 075                emailRouting["RecurringJobEnabled"] = settings.RecurringJobEnabled;
 076                emailRouting["IntervalMinutes"] = settings.IntervalMinutes;
 077                emailRouting["MaxBatchesPerRun"] = settings.MaxBatchesPerRun;
 078                root["EmailRouting"] = emailRouting;
 079
 080                var imap = root["ImapSettings"] as JObject ?? new JObject();
 081                imap["FetchLimit"] = settings.FetchLimit;
 082                imap["FetchScanLimit"] = settings.FetchScanLimit;
 083                imap["FetchWindowDays"] = settings.FetchWindowDays;
 084                root["ImapSettings"] = imap;
 085            },
 086            cancellationToken);
 87
 088        _logger.LogInformation(
 089            "EmailRouting scheduler settings saved to {ConfigPath}: enabled={Enabled}, interval={IntervalMinutes}m, batc
 090            configPath,
 091            settings.RecurringJobEnabled,
 092            settings.IntervalMinutes,
 093            settings.MaxBatchesPerRun,
 094            settings.FetchLimit);
 095    }
 96
 97    public async Task DisableAsync(CancellationToken cancellationToken = default)
 98    {
 099        var current = GetCurrent();
 0100        current = new EmailRoutingSchedulerSettings
 0101        {
 0102            IntervalMinutes = current.IntervalMinutes,
 0103            MaxBatchesPerRun = current.MaxBatchesPerRun,
 0104            AllowMultiMatch = current.AllowMultiMatch,
 0105            RecurringJobEnabled = false,
 0106            FetchLimit = current.FetchLimit,
 0107            FetchScanLimit = current.FetchScanLimit,
 0108            FetchWindowDays = current.FetchWindowDays
 0109        };
 0110        await SaveSettingsAsync(current, cancellationToken);
 0111    }
 112}