Ejemplo n.º 1
0
        public void TestReturnGoalProgress() //Note this changes every day
        {
            Portfolio test1 = new Portfolio(500.0f);

            test1.AddAsset(new OwnedAsset("Test1", new DateTime(2019, 9, 5), "Term Deposit", 1000, 0.10f, 5, 2, 0, 0));
            test1.AddAsset(new OwnedStock(new Stock {
                CompanyName = "Burger Fuel", CurrentPrice = 42.2f, LastTrade = new DateTime(2019, 09, 09, 0, 0, 0),
                Shares      = 4, Volume = 4
            }, new System.DateTime(2019, 09, 09, 0, 0, 0), 50.0f, 100, 0));

            Portfolio test2 = new Portfolio(1000.0f);

            test2.AddAsset(new OwnedAsset("Test2", new DateTime(2016, 1, 14), "Bond", 1000, 0.04f, 3, 1, 40, 0));

            Portfolio test3 = new Portfolio(10.0f);

            test3.AddAsset(new OwnedAsset("Test3", new DateTime(2018, 4, 19), "Term Deposit", 1000, 0.02f, 3, 1, 0, 0));

            float delta = 0.1f;

            float expectedVal        = 0.0f;
            float returnGoalProgress = test1.ReturnGoalProgress;

            float expectedVal2        = 31.87f;
            float returnGoalProgress2 = test2.ReturnGoalProgress;

            float expectedVal3        = 100.0f;
            float returnGoalProgress3 = test3.ReturnGoalProgress;

            Assert.AreEqual(expectedVal, returnGoalProgress, delta);
            Assert.AreEqual(expectedVal2, returnGoalProgress2, delta);
            Assert.AreEqual(expectedVal3, returnGoalProgress3, delta);
        }
        public void Portfolio_format_when_it_has_multiple_assets()
        {
            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 100));
            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));

            PortfolioFormatter.Format(portfolio).Should().Be("You have 100 MSFT, 10 AAPL shares");
        }
        public void Adding_new_asset_with_zero_amount_should_do_nothing()
        {
            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));
            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 0));

            portfolio.Assets.Should().BeEquivalentTo(new Asset(new Symbol("AAPL"), 10));
        }
        public void Merged_assets_with_zero_amount_should_be_removed()
        {
            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 20));
            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));
            portfolio.AddAsset(new Asset(new Symbol("MSFT"), -20));

            portfolio.Assets.Should().BeEquivalentTo(new Asset(new Symbol("AAPL"), 10));
        }
        public void New_assets_are_not_allowed_to_have_negative_amount()
        {
            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));

            Action action = () => portfolio.AddAsset(new Asset(new Symbol("MSFT"), -20));

            action.Should().Throw <InvalidOperationException>();
        }
        public void Adding_asset_with_negative_amount_is_allowed_if_the_merged_asset_has_positive_amount()
        {
            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 20));
            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));
            portfolio.AddAsset(new Asset(new Symbol("MSFT"), -10));

            portfolio.Assets.Should().BeEquivalentTo(new Asset(new Symbol("MSFT"), 10), new Asset(new Symbol("AAPL"), 10));
        }
        public void Assets_with_same_symbol_should_be_merged()
        {
            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 10));
            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));
            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 20));

            portfolio.Assets.Should().BeEquivalentTo(new Asset(new Symbol("MSFT"), 30), new Asset(new Symbol("AAPL"), 10));
        }
Ejemplo n.º 8
0
        public async Task Calculate_should_skip_assets_that_have_no_corresponding_quotes()
        {
            IEnumerable <Quote> quotes = new[]
            {
                new Quote(new Symbol("MSFT"), 100)
            };
            // ReSharper disable once ConvertToLocalFunction
            QuoteLoaderDelegate quoteLoader = symbols => Task.FromResult(quotes);

            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 10));
            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));

            (await PortfolioValueCalculator.Calculate(portfolio, quoteLoader)).Should().Be(1000);
        }
Ejemplo n.º 9
0
        public async Task Calculate_should_return_the_portfolio_value()
        {
            IEnumerable <Quote> quotes = new[]
            {
                new Quote(new Symbol("MSFT"), 100),
                new Quote(new Symbol("AAPL"), 200)
            };
            // ReSharper disable once ConvertToLocalFunction
            QuoteLoaderDelegate quoteLoader = symbols => Task.FromResult(quotes);

            var portfolio = new Portfolio();

            portfolio.AddAsset(new Asset(new Symbol("MSFT"), 10));
            portfolio.AddAsset(new Asset(new Symbol("AAPL"), 10));

            (await PortfolioValueCalculator.Calculate(portfolio, quoteLoader)).Should().Be(3000);
        }
        public async Task Loading_with_saving_in_between_should_return_portfolios_with_different_assets()
        {
            IPortfolioStore portfolioStore = CreatePortfolioStore();
            var             savePortfolio  = new Portfolio();

            savePortfolio.AddAsset(new Asset(new Symbol("MSFT"), 100));
            await portfolioStore.Save(savePortfolio);

            Portfolio loadedPortfolio1 = await portfolioStore.Load();

            savePortfolio.AddAsset(new Asset(new Symbol("AAPL"), 100));
            await portfolioStore.Save(savePortfolio);

            Portfolio loadedPortfolio2 = await portfolioStore.Load();

            loadedPortfolio1.Assets.Should().NotBeEquivalentTo(loadedPortfolio2.Assets);

            await portfolioStore.Save(null);
        }
Ejemplo n.º 11
0
        public void TestAddAssetUpdatedPortfolioTotalValue()
        {
            testPortfolio.AddAsset(testAsset5);
            testPortfolio2.AddAsset(testAsset4);
            testPortfolio3.AddAsset(testAsset);

            float delta = 0.01f;

            float actual   = testPortfolio.CurrentTotal;
            float expected = 6534.77f;

            float actual2   = testPortfolio2.CurrentTotal;
            float expected2 = 1323.39f;

            float actual3   = testPortfolio3.CurrentTotal;
            float expected3 = 6534.77f;

            Assert.AreEqual(expected, actual, delta, "Portfolio total value does not match");
            Assert.AreEqual(expected2, actual2, delta, "Portfolio total value does not match");
            Assert.AreEqual(expected3, actual3, delta, "Portfolio total value does not match");
        }
Ejemplo n.º 12
0
        public PortfolioTest()
        {
            testPortfolio = new Portfolio();

            testPortfolio.AddAsset(new OwnedAsset("Test1", new DateTime(2019, 9, 5), "Term Deposit", 1000, 0.10f, 5, 2, 0, 0));
            testPortfolio.AddAsset(new OwnedAsset("Test2", new DateTime(2016, 1, 14), "Bond", 1000, 0.04f, 3, 1, 40, 0));
            testPortfolio.AddAsset(new OwnedAsset("Air New Zealand", new System.DateTime(2019, 09, 06, 0, 0, 0), "Term Deposit", 12f, 2.4f, 9, 1, 3, 0));
            testPortfolio.AddAsset(new OwnedAsset("Test2", new DateTime(2016, 1, 15), "Bond", 1000, 0.04f, 3, 1, 40, 0));
            testPortfolio.AddAsset(new OwnedStock(new Stock {
                CompanyName = "Burger Fuel", CurrentPrice = 42.2f, LastTrade = new DateTime(2019, 09, 09, 0, 0, 0), Shares = 4, Volume = 4
            }, new System.DateTime(2019, 09, 09, 0, 0, 0), 50.0f, 100, 0));
            testPortfolio.AddAsset(new OwnedStock(new Stock {
                CompanyName = "Spark", CurrentPrice = 3.24f, LastTrade = new DateTime(2019, 09, 09, 0, 0, 0), Shares = 4, Volume = 4, PriceClose = 3.20f
            }, new System.DateTime(2019, 10, 09, 0, 0, 0), 3.00f, 150, 500f));

            //testPortfolio = new Portfolio();
            //testPortfolio.AddAsset(testAsset);
            //testPortfolio.AddAsset(testAsset2);

            //testPortfolio2 = new Portfolio();
            //testPortfolio2.AddAsset(testAsset3);

            //testPortfolio3 = new Portfolio();
            //testPortfolio3.AddAsset(testAsset4);
            //testPortfolio3.AddAsset(testAsset5);
        }
        public async Task Loading_after_saving_should_return_portfolio_with_the_same_assets()
        {
            IPortfolioStore portfolioStore = CreatePortfolioStore();
            var             savedPortfolio = new Portfolio();

            savedPortfolio.AddAsset(new Asset(new Symbol("MSFT"), 100));
            await portfolioStore.Save(savedPortfolio);

            Portfolio loadedPortfolio = await portfolioStore.Load();

            loadedPortfolio.Assets.Should().BeEquivalentTo(savedPortfolio.Assets);

            await portfolioStore.Save(null);
        }