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)); }
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); }
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); }
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"); }
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); }