public bool SendHttpUnitTestBanner(Guid accountId, Guid unitTestId, bool hasBanner)
        {
            var accountDbContext = Context.GetAccountDbContext(accountId);

            lock (BannerLock)
            {
                var repository   = accountDbContext.GetUnitTestRepository();
                var unitTest     = repository.GetById(unitTestId);
                var limitChecker = AccountLimitsCheckerManager.GetCheckerForAccount(accountId);

                var hasBannerChanged = (unitTest.HttpRequestUnitTest.LastBannerCheck == null) || (unitTest.HttpRequestUnitTest.HasBanner != hasBanner);
                if (hasBannerChanged)
                {
                    unitTest.HttpRequestUnitTest.HasBanner = hasBanner;
                }

                // В любом случае баннер проверяется не чаще 1 раза в день
                unitTest.HttpRequestUnitTest.LastBannerCheck = DateTime.Now;
                accountDbContext.SaveChanges();

                if (hasBannerChanged)
                {
                    limitChecker.RefreshHttpChecksNoBannerCount();
                }

                // Если баннера нет, то надо проверить лимит
                if (!hasBanner)
                {
                    var checkResult = limitChecker.CheckMaxHttpChecksNoBanner(accountDbContext);
                    if (!checkResult.Success)
                    {
                        var disableData = new SetUnitTestDisableRequestData()
                        {
                            UnitTestId = unitTestId,
                            Comment    = "Проверка выключена из-за отсутствия бесплатного баннера",
                            ToDate     = null
                        };
                        Disable(accountId, disableData);
                        accountDbContext.SaveChanges();
                        limitChecker.RefreshHttpChecksNoBannerCount();
                    }
                    return(checkResult.Success);
                }

                return(true);
            }
        }
        public IBulbCacheReadObject Disable(Guid accountId, SetUnitTestDisableRequestData requestData)
        {
            var unitTestId = requestData.UnitTestId;
            var cache      = new AccountCache(accountId);
            IUnitTestCacheReadObject unitTestRead = null;

            // изменим юнит-тест
            using (var unitTest = cache.UnitTests.Write(unitTestId.Value))
            {
                unitTestRead            = unitTest;
                unitTest.Enable         = false;
                unitTest.DisableToDate  = requestData.ToDate;
                unitTest.DisableComment = requestData.Comment;
                unitTest.BeginSave();
            }

            // обновим колбаски
            return(UpdateEnableOrDisableStatusData(unitTestRead));
        }