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))); }
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"); }
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"); }
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; }
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; }
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"); } }
public void Setup() { NewsMaker.ClearNewsFolder(); }