Пример #1
0
        public FakeNewsServer(Dictionary <int, int[]> channelsByAccount)
        {
            var endDate   = DateTime.Now.AddHours(-1);
            var startDate = endDate.AddDays(-40);

            this.channelsByAccount = channelsByAccount;
            var channels = channelsByAccount.SelectMany(ca => ca.Value).Distinct();

            newsByChannel = channels.ToDictionary(c => c,
                                                  c => NewsMaker.MakeSomeNews(c, startDate, endDate, 1,
                                                                              random.Next(100) < 50
                                                                                  ? random.Next(1, 10)
                                                                                  : random.Next(2, 1440)));
        }
Пример #2
0
        public void TestLoad()
        {
            // очистить локальный кеш
            NewsLocalStorage.ReInstantiate();

            var fakeNewsServer = MakeFakeNewsServer();

            // подготовить тестовые новости
            NewsStorageProxy.fakeChannel = fakeNewsServer;

            // "залогиниться"
            var     firstAccountId = fakeNewsServer.channelsByAccount.Keys.First();
            Account account;

            fakeTradeAccount.GetAccountInfo(firstAccountId, true, out account);
            AccountStatus.Instance.AccountData = account;

            // запустить актуализацию
            NewsCache.Instance.ActualizeAsync();

            // дождаться завершения...
            NewsCache.Instance.syncCompletedEvent.Wait();

            // содержимое кеша должно соответствовать исходному наполнению
            CompareStoredAndServerNews(fakeNewsServer, firstAccountId, "NewsStorageProxy first load: all news are loaded");

            // дополнить сервер несколькими новостями
            fakeNewsServer.AddNews(1,
                                   new List <News>
            {
                NewsMaker.MakeSingleNews(1, DateTime.Now.AddMinutes(-30)),
                NewsMaker.MakeSingleNews(1, DateTime.Now.AddMinutes(-28)),
            });
            fakeNewsServer.AddNews(3,
                                   new List <News> {
                NewsMaker.MakeSingleNews(3, DateTime.Now.AddMinutes(-21))
            });

            // запустить актуализацию
            NewsCache.Instance.ActualizeAsync();

            // дождаться завершения...
            NewsCache.Instance.syncCompletedEvent.Wait();

            // содержимое кеша снова должно соответствовать исходному наполнению
            CompareStoredAndServerNews(fakeNewsServer, firstAccountId, "NewsStorageProxy second load: all news are loaded");
        }
Пример #3
0
        public void TestNewsMap()
        {
            NewsMaker.ClearNewsFolder();
            NewsLocalStorage.ReInstantiate();
            var allNews = MakeSomeNews();

            // проверить карту новостей
            var map = NewsLocalStorage.Instance.MakeNewsMap();

            Assert.AreEqual(allNews.Count, map.channelIds.Length, "TestNewsMap - has all channels");

            // проверить записи на нек. дату
            var chan1News    = allNews[1];
            var someDate     = chan1News[chan1News.Count / 2].Time.Date;
            var newsOnDate   = allNews.Sum(cn => cn.Value.Count(n => n.Time.Date == someDate));
            var recordOnDate = map.records.FirstOrDefault(r => r.date == someDate);

            Assert.AreEqual(newsOnDate, recordOnDate.recordsCount, "TestNewsMap - map is OK on a selected date");
        }
Пример #4
0
        public void Setup()
        {
            NewsMaker.ClearNewsFolder();

            fakeTradeServer  = ProxyBuilder.Instance.GetImplementer <ITradeSharpServerTrade>();
            fakeTradeAccount = ProxyBuilder.Instance.GetImplementer <ITradeSharpAccount>();

            Account ac;
            var     methodName = ProxyBuilder.GetMethodName <ITradeSharpAccount>(a => a.GetAccountInfo(1, false, out ac));

            ((IMockableProxy)fakeTradeAccount).MockMethods.Add(methodName,
                                                               new GetAccountInfoDel((int accountId, bool needEquityInfo, out Account account) =>
            {
                account = accounts.FirstOrDefault(a => a.ID == accountId);
                return(RequestStatus.OK);
            }));

            TradeSharpServerTradeProxy.fakeProxy = fakeTradeServer;
        }
Пример #5
0
        private Dictionary <int, List <News> > MakeSomeNews()
        {
            // генерировать новости
            var startDate = DateTime.Now.Date.AddDays(-30);
            var endDate   = DateTime.Now.AddHours(-6);
            var allNews   = new Dictionary <int, List <News> >
            {
                { 1, NewsMaker.MakeSomeNews(1, startDate, endDate, 1, 5) },
                { 3, NewsMaker.MakeSomeNews(3, startDate.AddDays(5), endDate, 1, 1440) },
                { 4, NewsMaker.MakeSomeNews(4, startDate, endDate, 1440, 1440) }
            };

            // запихнуть в хранилище
            foreach (var pair in allNews)
            {
                NewsLocalStorage.Instance.UpdateNews(pair.Key, pair.Value);
            }

            return(allNews);
        }
 public NewsServiceImpl(NewsRepository newsRepository, NewsMaker newsMaker, IHostingEnvironment hostingEnvironment)
 {
     _newsRepository     = newsRepository;
     _newsMaker          = newsMaker;
     _hostingEnvironment = hostingEnvironment;
 }
Пример #7
0
        public void TestSaveLoad()
        {
            // перечитать
            NewsLocalStorage.ReInstantiate();

            var newsEmpty = NewsLocalStorage.Instance.GetNews(1);

            Assert.IsNull(newsEmpty, "no cache - no news");

            var startDate = DateTime.Now.Date.AddDays(-30);
            var endDate   = DateTime.Now.AddHours(-6);
            var allNews   = new Dictionary <int, List <News> >
            {
                { 1, NewsMaker.MakeSomeNews(1, startDate, endDate, 1, 1440) },
                { 3, NewsMaker.MakeSomeNews(3, startDate.AddDays(5), endDate, 1, 1440) },
                { 4, NewsMaker.MakeSomeNews(4, startDate, endDate, 1440, 1440) }
            };

            // запись новостей в пустое хранилище
            const int chanId = 1;

            NewsLocalStorage.Instance.UpdateNews(chanId, allNews[chanId]);
            var newsChan1 = NewsLocalStorage.Instance.GetNews(chanId);

            Assert.IsNotNull(newsChan1, "simple update & get: not null");
            Assert.AreEqual(allNews[chanId].Count, newsChan1.Count, "simple update & get: same count");
            var indexSpeciman = newsChan1.Count / 2;
            var newsOrig      = allNews[chanId][indexSpeciman];
            var newsNew       = newsChan1[indexSpeciman];

            Assert.IsTrue(newsOrig.ChannelId == newsNew.ChannelId &&
                          newsOrig.Body == newsNew.Body && newsOrig.Time == newsNew.Time &&
                          newsOrig.Title == newsNew.Title, "simple update & get: same news item");

            // добавить все новости
            NewsLocalStorage.Instance.UpdateNews(allNews[1]);
            NewsLocalStorage.Instance.UpdateNews(allNews[3]);
            NewsLocalStorage.Instance.UpdateNews(allNews[4]);

            // проверить количество новостей
            foreach (var pair in allNews)
            {
                Assert.AreEqual(pair.Value.Count, NewsLocalStorage.Instance.GetNews(pair.Key).Count, "updated news: got all");
            }

            // сохранить новости
            try
            {
                NewsLocalStorage.Instance.SaveNewsInFiles();
            }
            catch (Exception ex)
            {
                Assert.Fail("NewsLocalStorage.Instance.SaveNewsInFiles(): " + ex);
            }

            // перечитать
            NewsLocalStorage.ReInstantiate();

            // перечитать сохраненные новости
            foreach (var pair in allNews)
            {
                Assert.AreEqual(pair.Value.Count, NewsLocalStorage.Instance.GetNews(pair.Key).Count, "reloaded news: got all");
            }
        }
Пример #8
0
 public void Setup()
 {
     NewsMaker.ClearNewsFolder();
 }