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);
        }
Example #3
0
        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();
        }