public void AddingMultipleSymbols_ShouldBeSuccessful(string symbols) { // arrange var symbolList = symbols.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); var marketDataStream = new Subject <MarketData>(); symbolList.ForEach(symbol => _marketDataService .Setup(x => x.StartSubscriptionAsync(symbol)) .Returns(Task.FromResult <IObservable <MarketData> >(marketDataStream))); var vm = new StockPricesViewModel(_marketDataService.Object, Scheduler.Immediate); // act symbolList.ForEach(async symbol => await vm.AddSymbolAsync(symbol)); // assert -- collection should contain the empty market data vm.MarketDataCollection.ShouldNotBeEmpty(); vm.MarketDataCollection.Count.ShouldBe(symbolList.Count()); vm.MarketDataCollection.ShouldContain(x => symbolList.Contains(x.Symbol)); // act var marketData = symbolList.Select(GenerateMarketData).ToList(); marketData.ForEach(m => marketDataStream.OnNext(m)); // assert -- collection should contain updated values var expectedUpdatedMarketData = marketData.Select(m => new MarketDataViewModel(m)); vm.MarketDataCollection.ShouldBe(expectedUpdatedMarketData); }
public async Task AddingSymbol_ShouldBeSuccessful(string symbol) { // arrange var marketDataStream = new Subject <MarketData>(); _marketDataService .Setup(x => x.StartSubscriptionAsync(symbol)) .Returns(Task.FromResult <IObservable <MarketData> >(marketDataStream)); var vm = new StockPricesViewModel(_marketDataService.Object, Scheduler.Immediate); // act await vm.AddSymbolAsync(symbol); // assert vm.MarketDataCollection.ShouldNotBeEmpty(); vm.MarketDataCollection.ShouldContain(x => x.Symbol == symbol && x.LastPrice == 0 && x.ClosingPrice == 0); // act var marketData = GenerateMarketData(symbol); marketDataStream.OnNext(marketData); // assert vm.MarketDataCollection.ShouldContain(x => x.Symbol == symbol && x.LastPrice == marketData.LastPrice && x.ClosingPrice == marketData.ClosingPrice); }
public ShellViewModel( StockPricesViewModel stockPricesViewModel, AddSymbolViewModel addSymbolViewModel) { StockPricesViewModel = stockPricesViewModel; AddSymbolViewModel = addSymbolViewModel; AddSymbolViewModel.StockSymbolService = StockPricesViewModel; }
public void Disposing_ShouldBeSuccessful() { // arrange // act var vm = new StockPricesViewModel(_marketDataService.Object, Scheduler.Immediate); vm.Dispose(); // assert vm.MarketDataCollection.ShouldBeEmpty(); }