Example #1
0
        public void AddTwoStocksSuccess()
        {
            var request0 = new BaseStockModel()
            {
                Price    = 1,
                Quantity = 1,
                Type     = StockType.Equity
            };
            var request1 = new BaseStockModel()
            {
                Price    = 1,
                Quantity = 1,
                Type     = StockType.Bond
            };

            _fundService.AddStock(request0);
            _fundService.AddStock(request1);

            var allStocks = _fundService.AllStocks().ToArray();

            AssertEvents(2);

            AssertStocksLength(allStocks, 2);
            Assert.That(allStocks.Count(s => s.Type == request0.Type && s.Quantity == request0.Quantity && s.Price == request0.Price), Is.EqualTo(1));
            Assert.That(allStocks.Count(s => s.Type == request1.Type && s.Quantity == request1.Quantity && s.Price == request1.Price), Is.EqualTo(1));
            AssertTotalMarketValueInStock(allStocks[0], new[] { request0, request1 });
        }
Example #2
0
        private void UpdateFund(BaseStockModel baseStockModel)
        {
            if (baseStockModel == null)
            {
                return;
            }

            // Creating new stock
            var stock = new StockModel(baseStockModel);

            // Adding it to collection
            _stocks.Add(stock);

            // increasinfg number of specific stocks
            switch (stock.Type)
            {
            case (StockType.Equity):
                _numberEquities++;
                _numberCurrent       = _numberEquities;
                _marketValueEquities = _marketValueEquities + stock.Price * stock.Quantity;
                break;

            case (StockType.Bond):
                _numberBonds++;
                _numberCurrent    = _numberBonds;
                _marketValueBonds = _marketValueBonds + stock.Price * stock.Quantity;
                break;

            default:
                throw new InvalidOperationException($"Not supported Stock Type {stock.Type}.");
            }

            _numberTotal         = _numberEquities + _numberBonds;
            _marketValueTotal    = _marketValueEquities + _marketValueBonds;
            _stockWeightEquities = _marketValueEquities * 100 / _marketValueTotal;
            _stockWeightBonds    = _marketValueBonds * 100 / _marketValueTotal;

            // Updating stocks
            foreach (var stockModel in _stocks)
            {
                if (stockModel.Type == stock.Type)
                {
                    stockModel.Name = stock.Type.ToString() + _numberCurrent;
                }
                stockModel.TotalMarketValue = _marketValueTotal;
            }

            // Updating totals
            foreach (var totalStocksModel in _totals)
            {
                var totalNew = GetTotal(totalStocksModel.Type);
                totalStocksModel.MarketValue = totalNew.MarketValue;
                totalStocksModel.Number      = totalNew.Number;
                totalStocksModel.StockWeight = totalNew.StockWeight;
            }

            EventAggregator.GetEvent <FundChangedEvent>().Publish();
        }
Example #3
0
        public void AddThreeStocksCheckTotalsNumberSuccess()
        {
            var request0 = new BaseStockModel()
            {
                Price    = 1,
                Quantity = 1,
                Type     = StockType.Equity
            };
            var request1 = new BaseStockModel()
            {
                Price    = 1,
                Quantity = 1,
                Type     = StockType.Bond
            };

            var request2 = new BaseStockModel()
            {
                Price    = 1,
                Quantity = 1,
                Type     = StockType.Bond
            };

            _fundService.AddStock(request0);
            _fundService.AddStock(request1);
            _fundService.AddStock(request2);

            var allStocks = _fundService.AllStocks().ToArray();

            AssertEvents(3);

            AssertStocksLength(allStocks, 3);
            AssertTotalMarketValueInStock(allStocks[0], new[] { request0, request1, request2 });

            var allTotals = _fundService.AllTotals().ToArray();

            Assert.That(allTotals.Length, Is.EqualTo(3));
            Assert.That(allTotals.Count(t => t.Type == null), Is.EqualTo(1));
            Assert.That(allTotals.Count(t => t.Type == StockType.Bond), Is.EqualTo(1));
            Assert.That(allTotals.Count(t => t.Type == StockType.Equity), Is.EqualTo(1));
        }
Example #4
0
        public void AddFirstEquityStockSuccess()
        {
            var request = new BaseStockModel()
            {
                Price    = 1,
                Quantity = 1,
                Type     = StockType.Equity
            };

            _fundService.AddStock(request);

            var allStocks = _fundService.AllStocks().ToArray();

            _eventAggregatorMock.VerifyGetEvent();
            _fundChangedEventMock.VerifyPublishEvent();

            Assert.That(allStocks.Count(), Is.EqualTo(1));
            Assert.That(allStocks[0].Type, Is.EqualTo(request.Type));
            Assert.That(allStocks[0].Price, Is.EqualTo(request.Price));
            Assert.That(allStocks[0].Quantity, Is.EqualTo(request.Quantity));
            Assert.That(allStocks[0].TotalMarketValue, Is.EqualTo(request.Price * request.Quantity));
        }
Example #5
0
        public void AddThreeStocksCheckTotalsSuccess()
        {
            var request0 = new BaseStockModel()
            {
                Price    = 1,
                Quantity = 100,
                Type     = StockType.Equity
            };
            var request1 = new BaseStockModel()
            {
                Price    = 10,
                Quantity = 10,
                Type     = StockType.Bond
            };

            var request2 = new BaseStockModel()
            {
                Price    = 1000,
                Quantity = 1,
                Type     = StockType.Bond
            };

            _fundService.AddStock(request0);
            _fundService.AddStock(request1);
            _fundService.AddStock(request2);

            var allStocks = _fundService.AllStocks().ToArray();

            AssertEvents(3);

            AssertStocksLength(allStocks, 3);
            AssertTotalMarketValueInStock(allStocks[0], new[] { request0, request1, request2 });

            var allTotals = _fundService.AllTotals().ToArray();

            AssertTotalsNumber(allTotals);
        }
Example #6
0
 public void AddStock(BaseStockModel baseStock)
 {
     UpdateFund(baseStock);
 }