public async Task GetSingleQuoteData_ShouldReturnEmptyDataSet_WhenNotInDBOrCache() { _stockDataRepository.Setup(s => s.GetSingleQuoteData(It.IsAny <int>())).Returns(Task.FromResult <SingleQuoteData>(null)); StockSingleQuoteDataDTO data = await _service.GetSingleQuoteData(1); Assert.Null(data.Data); Assert.Null(data.LastUpdated); }
public async Task GetSingleQuoteData_ShouldGetValueFromCache() { var query = new SingleQuoteQuery(1); var queryResult = new SingleQuoteQueryResult("MSFT", _singleQuoteData); _cache.Upsert(query.SymbolId, queryResult); StockSingleQuoteDataDTO data = await _service.GetSingleQuoteData(query.SymbolId); Assert.Equal(queryResult.Data, data.Data); _stockDataRepository.Verify(s => s.GetSingleQuoteData(It.IsAny <int>()), Times.Never); }
private void AssertSingleQuote(StockSingleQuoteDataDTO dataDto, int expectedSymbolId) { Assert.Equal(expectedSymbolId, dataDto.SymbolId); Assert.NotNull(dataDto.Data); Assert.True(dataDto.Data.Low >= 0); Assert.True(dataDto.Data.High >= 0); Assert.True(dataDto.Data.Open >= 0); Assert.True(dataDto.Data.Volume >= 0); Assert.True(dataDto.Data.Price >= 0); Assert.True(dataDto.Data.PreviousClose >= 0); Assert.True(dataDto.Data.LastUpdated > new DateTime()); Assert.True(dataDto.Data.LastTradingDay > new DateTime()); }
public async Task GetSingleQuoteData_ShouldGetValueFromDBAndSaveToCache_WhenNotInCache() { var query = new SingleQuoteQuery(1); var queryResult = new SingleQuoteQueryResult("MSFT", _singleQuoteData); _stockDataRepository.Setup(s => s.GetSingleQuoteData(It.IsAny <int>())).Returns(Task.FromResult(_singleQuoteData)); StockSingleQuoteDataDTO data = await _service.GetSingleQuoteData(query.SymbolId); Assert.Equal(queryResult.Data, data.Data); _stockDataRepository.Verify(s => s.GetSingleQuoteData(It.IsAny <int>()), Times.Once); _cache.TryGet(query.SymbolId, out SingleQuoteQueryResult cachedResult); Assert.Equal(queryResult.Data, cachedResult.Data); }
public async Task <ActionResult <IEnumerable <StockSingleQuoteDataDTO> > > GetSingleQuoteData([FromQuery] int[] sids) { List <StockSingleQuoteDataDTO> dataset = new List <StockSingleQuoteDataDTO>(); foreach (int id in sids) { // Fetching one stock at a time since values are cached. StockSingleQuoteDataDTO quote = await _stockDataService.GetSingleQuoteData(id); dataset.Add(quote); _stockDataService.AddSubscriberToSingleQuote(id); } return(Ok(dataset)); }
/// <summary> /// Gets the single quote stock data for a ticker. /// Retrieves from the cache <see cref="SingleQuoteCache"/> if it exists, /// otherwise it will fetch from the database. /// /// If does not exist in the database it will return no data. /// Returns empty /// </summary> /// <param name="ticker"></param> /// <returns>The <see cref="StockSingleQuoteDataDTO"/></returns> public async Task <StockSingleQuoteDataDTO> GetSingleQuoteData(int symbolId) { SingleQuoteQueryResult queryResult; SingleQuoteData data; if (_singleQuoteCache.TryGet(symbolId, out queryResult)) { return(new StockSingleQuoteDataDTO(symbolId, queryResult.Data)); } data = await _stockDataRepository.GetSingleQuoteData(symbolId); if (data != null) { _singleQuoteCache.Add(symbolId, new SingleQuoteQueryResult(data.Ticker, data)); return(new StockSingleQuoteDataDTO(symbolId, data)); } return(StockSingleQuoteDataDTO.CreateNoDataExists(symbolId)); }