public async Task GetSet_Gets_IfWasSet()
        {
            const string key = nameof(GetSet_Gets_IfWasSet);

            await _cacheStorage.SetAsync(key, 1);

            Assert.Equal(1, await _cacheStorage.GetAsync <int>(key));
        }
        public async Task <MonthlyBudgetReport> HandleAsync(MonthlyBudgetReportQuery request, CancellationToken cancellationToken)
        {
            var reportCacheKey = GetCacheKey(request.When);
            var cachedReport   = await _cacheStorage.GetAsync <MonthlyBudgetReport>(reportCacheKey, cancellationToken);

            if (cachedReport.HasValue)
            {
                return(cachedReport);
            }

            var categories = await FetchAsync(new CategoriesQuery(), cancellationToken);

            var expenseLog = await FetchAsync(new MonthLogQuery(BudgetLogType.Expenses, request.When), cancellationToken);

            var incomeLog = await FetchAsync(new MonthLogQuery(BudgetLogType.Incomes, request.When), cancellationToken);

            var report = new MonthlyBudgetReport(request.When, _moneyCalculator, categories, incomeLog, expenseLog);

            await _cacheStorage.SetAsync(reportCacheKey, report, cancellationToken);

            return(report);
        }