Exemple #1
0
        public void WeekendIsNotGap()
        {
            // Выходные дни: май 2013, 4,5    9   11,12
            // выходной
            var gap = new DateSpan(new DateTime(2013, 5, 4, 3, 51, 12),
                                   new DateTime(2013, 5, 5, 1, 19, 0));

            var miniHoles = DaysOff.Instance.GetIntersected(gap);
            var gaps      = QuoteCacheManager.SubtractPeriods(gap, miniHoles);

            Assert.AreEqual(gaps.Count, 0);

            // праздник
            gap = new DateSpan(new DateTime(2013, 5, 9, 3, 21, 0),
                               new DateTime(2013, 5, 9, 11, 19, 0));
            miniHoles = DaysOff.Instance.GetIntersected(gap);
            gaps      = QuoteCacheManager.SubtractPeriods(gap, miniHoles);
            Assert.AreEqual(gaps.Count, 0);

            // гэп присутствует
            gap = new DateSpan(new DateTime(2013, 5, 5, 16, 30, 0),
                               new DateTime(2013, 5, 6, 8, 30, 0));
            miniHoles = DaysOff.Instance.GetIntersected(gap);
            Assert.AreNotEqual(miniHoles.Count, 0, "DaysOff.Instance.GetIntersected");
            gaps = QuoteCacheManager.SubtractPeriods(gap, miniHoles);

            Assert.AreNotEqual(gaps.Count, 0, "gaps");
            // закомментировал, т.к. пересекается с другими тестами
            //moq.Verify(lw => lw.GetMetadataByCategory(It.Is<string>(s => s == "DayOff")), Times.Once(),
            //    "выходные дни должны быть зачитаны из базы ровно один раз");
        }
Exemple #2
0
        public void SmallGapIsStillAGap()
        {
            var gapInterval = new DateSpan(new DateTime(2013, 5, 31, 17, 49, 0),
                                           new DateTime(2013, 5, 31, 17, 51, 16));
            var miniHoles = DaysOff.Instance.GetIntersected(gapInterval);
            var gaps      = QuoteCacheManager.SubtractPeriods(gapInterval, miniHoles);

            Assert.AreNotEqual(gaps.Count, 0, "после склейки таки должны оставаться гэпы (SmallGapIsStillAGap)");
            // закомментировал, т.к. пересекается с другими тестами
            //moq.Verify(lw => lw.GetMetadataByCategory(It.Is<string>(s => s == "DayOff")), Times.Once(),
            //    "выходные дни должны быть зачитаны из базы ровно один раз");
        }
Exemple #3
0
        /// <summary>
        /// сообщить о возникшем гэпе - предложить закачать котировки или же
        /// закачать их автоматом
        /// </summary>
        private void ReportOnGapFound(DateTime startOfGap)
        {
            // определить, не пришелся ли "гэп" на выходные
            var gapInterval = new DateSpan(startOfGap, DateTime.Now);
            var miniHoles   = DaysOff.Instance.GetIntersected(gapInterval);
            var gaps        = QuoteCacheManager.SubtractPeriods(gapInterval, miniHoles);

            if (gaps == null || gaps.Count == 0)
            {
                return;
            }
            var sumMinutes = gaps.Sum(g => (g.end - g.start).TotalMinutes);

            if (sumMinutes < MinutesOfGapInQuoteStream)
            {
                return;
            }

            // вывести уведомление
            var msg = gaps.Count == 1
                          ? string.Format("заполнить гэп ({0} минут)", (int)sumMinutes)
                          : string.Format("заполнить гэпы ({0} минут суммарно)", (int)sumMinutes);

            AddUrlToStatusPanelSafe(DateTime.Now, msg, LinkTargetFillGaps);
            var action = UserSettings.Instance.GetAccountEventAction(AccountEventCode.GapFound);

            if (action == AccountEventAction.StatusPanelOnly || action == AccountEventAction.DoNothing)
            {
                return;
            }

            // показать желтое окошко
            var repeatNotification = false;
            var shouldFill         = !UserSettings.Instance.ConfirmGapFilling ||
                                     (NotificationBox.Show(msg + Environment.NewLine + "Заполнить сейчас?", "Обнаружен гэп",
                                                           MessageBoxButtons.YesNo, out repeatNotification) == DialogResult.Yes);

            if (UserSettings.Instance.ConfirmGapFilling != repeatNotification)
            {
                UserSettings.Instance.ConfirmGapFilling = repeatNotification;
                UserSettings.Instance.SaveSettings();
            }
            if (!shouldFill)
            {
                return;
            }
            Invoke(new Action <string>(FillGapAfterReport), LinkTargetFillGaps);
        }