public void ChangeDividendRules()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var id = Guid.NewGuid();

            var stock = new Stock(id);

            stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest);

            var stockCache = new EntityCache <Stock>();

            stockCache.Add(stock);
            var stockQuery      = new StockQuery(stockCache);
            var stockRepository = mockRepository.Create <IRepository <Stock> >();

            stockRepository.Setup(x => x.Update(stock)).Verifiable();
            var stockPriceHistoryCache      = mockRepository.Create <IEntityCache <StockPriceHistory> >();
            var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >();

            var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object);

            var result = service.ChangeDividendRules(id, new Date(2000, 01, 01), 0.50m, RoundingRule.Round, true, DrpMethod.Round);

            using (new AssertionScope())
            {
                result.Should().HaveOkStatus();
                var dividendRules = stock.DividendRules[new Date(2000, 01, 01)];
                dividendRules.Should().BeEquivalentTo(new { CompanyTaxRate = 0.50m, DividendRoundingRule = RoundingRule.Round, DrpActive = true, DrpMethod = DrpMethod.Round });
            }

            mockRepository.Verify();
        }
        public void ChangeDividendRulesStockNotActive()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var id = Guid.NewGuid();

            var stock = new Stock(id);

            stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest);
            stock.DeList(new Date(1999, 06, 30));

            var stockCache = new EntityCache <Stock>();

            stockCache.Add(stock);
            var stockQuery                  = new StockQuery(stockCache);
            var stockRepository             = mockRepository.Create <IRepository <Stock> >();
            var stockPriceHistoryCache      = mockRepository.Create <IEntityCache <StockPriceHistory> >();
            var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >();

            var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object);

            var result = service.ChangeDividendRules(id, new Date(2000, 01, 01), 0.30m, RoundingRule.Round, true, DrpMethod.Round);

            result.Should().HaveErrorStatus().WithError("Stock is not active at 1/1/2000");

            mockRepository.Verify();
        }
        public void ChangeDividendRulesTaxRateGreaterThan100Percent()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var id = Guid.NewGuid();

            var stock = new Stock(id);

            stock.List("XYZ", "Existing Stock", new Date(1990, 01, 01), true, AssetCategory.AustralianFixedInterest);

            var stockCache = new EntityCache <Stock>();

            stockCache.Add(stock);
            var stockQuery                  = new StockQuery(stockCache);
            var stockRepository             = mockRepository.Create <IRepository <Stock> >();
            var stockPriceHistoryCache      = mockRepository.Create <IEntityCache <StockPriceHistory> >();
            var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >();

            var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object);

            var result = service.ChangeDividendRules(id, new Date(2000, 01, 01), 1.30m, RoundingRule.Round, true, DrpMethod.Round);

            result.Should().HaveErrorStatus().WithError("Company tax rate must be between 0 and 1");

            mockRepository.Verify();
        }
        public void ChangeDividendRulesInvalidId()
        {
            var mockRepository = new MockRepository(MockBehavior.Strict);

            var id = Guid.NewGuid();

            var stockCache                  = new EntityCache <Stock>();
            var stockQuery                  = new StockQuery(stockCache);
            var stockRepository             = mockRepository.Create <IRepository <Stock> >();
            var stockPriceHistoryCache      = mockRepository.Create <IEntityCache <StockPriceHistory> >();
            var stockPriceHistoryRepository = mockRepository.Create <IRepository <StockPriceHistory> >();

            var service = new StockService(stockQuery, stockCache, stockRepository.Object, stockPriceHistoryCache.Object, stockPriceHistoryRepository.Object);

            var result = service.ChangeDividendRules(id, new Date(2000, 01, 01), 0.30m, RoundingRule.Round, true, DrpMethod.Round);

            result.Should().HaveNotFoundStatus();

            mockRepository.Verify();
        }