public void StocksEmptyResultTotalNumberZeroTotalMarketValueZeroTotalStockWeightZero()
        {
            var scheduler  = new TestScheduler();
            var stocks     = new SourceCache <Stock, long>(t => t.Id);
            var fundStocks = new SourceCache <Stock, string>(t => t.Type.ToString() + t.Id);

            var target = new BaseSummaryService <long, string>(stocks, fundStocks, scheduler);

            Assert.AreEqual(0, target.TotalMarketValue);
            Assert.AreEqual(0, target.TotalNumber);
            Assert.AreEqual(0, target.TotalStockWeight);
        }
        public void StocksGeneratedResultTotalNumberNotZeroTotalMarketValueNotZeroTotalStockWeightNotZero()
        {
            var scheduler = new TestScheduler();

            var xs = scheduler.CreateColdObservable(
                OnNext(10, new Stock {
                Id = 1, Type = StockType.Equity, Price = 100, Quantity = 5
            }),
                OnNext(20, new Stock {
                Id = 2, Type = StockType.Equity, Price = 100, Quantity = 5
            }),
                OnNext(30, new Stock {
                Id = 1, Type = StockType.Bond, Price = 200, Quantity = 5
            }),
                OnCompleted <Stock>(40)
                );

            var stocks     = new SourceCache <Stock, long>(t => t.Id);
            var fundStocks = new SourceCache <Stock, string>(t => t.Type.ToString() + t.Id);

            scheduler.Schedule(TimeSpan.FromTicks(0),
                               () => xs.Subscribe(s =>
            {
                fundStocks.AddOrUpdate(s);
                if (s.Type == StockType.Equity)
                {
                    stocks.AddOrUpdate(s);
                }
            }));

            var target = new BaseSummaryService <long, string>(stocks, fundStocks, scheduler);

            var observerTotalNumber = scheduler.CreateObserver <long>();

            target.WhenValueChanged(x => x.TotalNumber).Subscribe(observerTotalNumber);

            var observerTotalMarketValue = scheduler.CreateObserver <decimal>();

            target.WhenValueChanged(x => x.TotalMarketValue).Subscribe(observerTotalMarketValue);

            var observerTotalStockWeight = scheduler.CreateObserver <float>();

            target.WhenValueChanged(x => x.TotalStockWeight).Subscribe(observerTotalStockWeight);

            scheduler.Start();

            observerTotalNumber.Messages.AssertEqual(
                OnNext <long>(0, 0),
                OnNext <long>(12, 1),
                OnNext <long>(22, 2));

            observerTotalMarketValue.Messages.AssertEqual(
                OnNext <decimal>(0, 0),
                OnNext <decimal>(12, 500),
                OnNext <decimal>(22, 1000));

            Assert.IsTrue(observerTotalStockWeight.Messages.Any(w => w.Value.Value == 0));
            Assert.IsTrue(observerTotalStockWeight.Messages.Any(w => w.Value.Value == 1));
            Assert.IsTrue(observerTotalStockWeight.Messages.Any(w => w.Value.Value == .5));
            Assert.IsFalse(observerTotalStockWeight.Messages.Any(w => w.Value.Value != .5 && w.Value.Value != 1 && w.Value.Value != 0));
        }
 public void ConstructorNullResultException()
 {
     var target = new BaseSummaryService <long, string>(null, null, null);
 }