public void Consolidate_UnitTest()
        {
            var assetPortfolio = new AssetPortfolio(mockExchangeRates.Object);

            assetPortfolio.Consolidate();
            Assert.AreEqual(assetPortfolio.ConsolidatedPortfolio.Count, 0);

            assetPortfolio.Portfolio = new List <IAsset>()
            {
                new Stock("ABC", "USD", 3, 2),
                new Stock("ABC", "USD", 5, 1),
                new Stock("ABC", "EUR", 10, 2),
                new Currency("EUR", 100),
                new Currency("EUR", 100),
                new Currency("USD", 300),
            };


            assetPortfolio.Consolidate();
            Assert.AreEqual(assetPortfolio.ConsolidatedPortfolio.Count, 4);
            Assert.IsTrue(assetPortfolio.ConsolidatedPortfolio["ABCUSD"].Shares == 8 && ((Stock)assetPortfolio.ConsolidatedPortfolio["ABCUSD"]).Price == 1.375);
            Assert.IsTrue(assetPortfolio.ConsolidatedPortfolio["ABCEUR"].Shares == 10 && ((Stock)assetPortfolio.ConsolidatedPortfolio["ABCEUR"]).Price == 2);
            Assert.AreEqual(assetPortfolio.ConsolidatedPortfolio["CashEUR"].Shares, 200);
            Assert.AreEqual(assetPortfolio.ConsolidatedPortfolio["CashUSD"].Shares, 300);
        }
Beispiel #2
0
        public void TestValuationPortfolio(List <Asset> assets, IExchangeRates rates, string name, decimal expected, string currency)
        {
            AssetPortfolio portfolio = new AssetPortfolio(rates, name, assets);

            TestValuationPortfolio(portfolio, expected, currency);
            Console.WriteLine(portfolio.ToString());
        }
Beispiel #3
0
        public void Should_amount_is_1200_When_euro_consolidate()
        {
            var assetPortfolio = new AssetPortfolio(null);

            assetPortfolio.Add(new Cash(1000, Currency.EUR));
            assetPortfolio.Add(new Cash(200, Currency.EUR));

            var result = assetPortfolio.Consolidate();

            Assert.AreEqual(1, result.Portfolio.Count);
            Assert.AreEqual(Currency.EUR, (result.Portfolio[0] as Cash).Currency);
            Assert.AreEqual(1200, (result.Portfolio[0] as Cash).GetValue());
        }
Beispiel #4
0
        public void Should_price_is_3_and_shares_is_300_When_abc_stock_consolidate()
        {
            var assetPortfolio = new AssetPortfolio(null);

            assetPortfolio.Add(new Stock("ABC", 100, 2, Currency.USD));
            assetPortfolio.Add(new Stock("ABC", 200, 3.5, Currency.USD));

            var result = assetPortfolio.Consolidate();

            Assert.AreEqual(1, result.Portfolio.Count);
            Assert.AreEqual(3, (result.Portfolio[0] as Stock).Price);
            Assert.AreEqual(300, (result.Portfolio[0] as Stock).Shares);
        }
Beispiel #5
0
        public void TestAddAssetsSameSymbol()
        {
            Assert.DoesNotThrow(delegate
            {
                var portfolio = new AssetPortfolio(_flatrates, "Test Asset Portfolio");
                portfolio.Add(new FXCurrencyAsset("ABC", EUR, 20));
                portfolio.Add(new Stock("ABC", EUR, 10, 20));
                portfolio.Add(new DomesticStock("ABC", 10, 20));
                var consolidated = portfolio.Consolidate();

                Assert.AreEqual(portfolio.NoAssets, portfolio.NoDistinctAssets, 3);
                Assert.AreEqual(consolidated.NoAssets, consolidated.NoDistinctAssets, 3);
            });
        }
Beispiel #6
0
        public async Task Should_3940_When_call_value_for_cash_and_stocks()
        {
            Mock <IExchangeRateService> mockExchangeRateService = new Mock <IExchangeRateService>();

            mockExchangeRateService.Setup(x => x.GetRateAsync(It.IsAny <Currency>(), It.IsAny <Currency>())).Returns(Task.FromResult(2.0));

            var assetPortfolio = new AssetPortfolio(mockExchangeRateService.Object);

            assetPortfolio.Add(new Stock("ABC", 100, 5, Currency.USD));
            assetPortfolio.Add(new Stock("ABC", 200, 2, Currency.USD));
            assetPortfolio.Add(new Cash(1000, Currency.EUR));
            assetPortfolio.Add(new Cash(70, Currency.EUR));

            var result = await assetPortfolio.ValueAsync(Currency.AUD);

            Assert.AreEqual(3940, result);
        }
Beispiel #7
0
        public void Should_price_is_3_and_shares_is_300_amount_is_1200_x_When_euro_and_abc_stock_consolidate()
        {
            var assetPortfolio = new AssetPortfolio(null);

            assetPortfolio.Add(new Stock("ABC", 100, 2, Currency.USD));
            assetPortfolio.Add(new Stock("ABC", 200, 3.5, Currency.USD));
            assetPortfolio.Add(new Cash(1000, Currency.EUR));
            assetPortfolio.Add(new Cash(200, Currency.EUR));

            var result = assetPortfolio.Consolidate();

            Assert.AreEqual(2, result.Portfolio.Count);
            Assert.AreEqual(3, (result.Portfolio[0] as Stock).Price);
            Assert.AreEqual(300, (result.Portfolio[0] as Stock).Shares);
            Assert.AreEqual(Currency.EUR, (result.Portfolio[1] as Cash).Currency);
            Assert.AreEqual(1200, (result.Portfolio[1] as Cash).GetValue());
        }
Beispiel #8
0
        public void TestConsolidationPortfolio()
        {
            List <Asset> assets = new List <Asset>
            {
                new Stock("ABCGBP", "GBP", 200, 4),
                new Stock("ABCGBP", "GBP", 200, 4),

                new Stock("ABCUSD", "USD", 200, 4),

                new DomesticStock("ABC", 200, 4),
                new DomesticStock("ABC", 100, 8),
                new DomesticStock("ABC", 400, 8),

                new FXCurrencyAsset("GBP", "GBP", 100),
                new FXCurrencyAsset("GBP", "GBP", 200),
                new FXCurrencyAsset("GBP", "GBP", 300),

                new FXCurrencyAsset("USD", "USD", 100),
                new FXCurrencyAsset("USD", "USD", 200),
                new FXCurrencyAsset("USD", "USD", 300)
            };

            var portfolio = new AssetPortfolio(_flatrates, "Original Portfolio", assets);


            TestValuationPortfolio(portfolio, 8400, EUR);

            //there are 12 assets
            Assert.AreEqual(portfolio.NoAssets, 12);

            //there are 5 distinct assets
            Assert.AreEqual(portfolio.NoDistinctAssets, 5);

            //Consolidating Portfolio
            AssetPortfolio portfolioConsolidated = portfolio.Consolidate();

            TestValuationPortfolio(portfolioConsolidated, 8400, EUR);

            //consolidated into 5 assets
            Assert.AreEqual(portfolioConsolidated.NoDistinctAssets, 5);
            Assert.AreEqual(portfolioConsolidated.NoAssets, 5);

            Console.WriteLine(portfolio);
            Console.WriteLine(portfolioConsolidated);
        }
        public void Consolidate_UnitTest_GivenExample()
        {
            var assetPortfolio = new AssetPortfolio(mockExchangeRates.Object)
            {
                Portfolio = new List <IAsset>()
                {
                    new Stock("ABC", "USD", 100, 2),
                    new Stock("ABC", "USD", 200, 3.5),
                    new Currency("EUR", 1000),
                    new Currency("EUR", 200),
                }
            };

            assetPortfolio.Consolidate();
            Assert.IsTrue(assetPortfolio.ConsolidatedPortfolio.Count == 2);
            Assert.IsTrue(assetPortfolio.ConsolidatedPortfolio["ABCUSD"].Shares == 300 && ((Stock)assetPortfolio.ConsolidatedPortfolio["ABCUSD"]).Price == 3);
            Assert.IsTrue(assetPortfolio.ConsolidatedPortfolio["CashEUR"].Shares == 1200);
        }
        public void Value_UnitTest()
        {
            mockExchangeRates.Setup(m => m.ConvertValue(It.IsAny <double>(), It.IsAny <string>(), It.IsAny <string>())).Returns(3);
            var assetPortfolio = new AssetPortfolio(mockExchangeRates.Object);
            var value          = assetPortfolio.Value("USD");

            Assert.AreEqual(value, 0);

            assetPortfolio.Portfolio = new List <IAsset>()
            {
                new Stock("ABC", "USD", 3, 2),
                new Stock("XYZ", "USD", 5, 1),
                new Currency("EUR", 100),
                new Currency("USD", 100),
            };

            value = assetPortfolio.Value("USD");

            Assert.AreEqual(value, 12);
        }
        [TestMethod, TestCategory("LiveTest")] //this is a live test because it hits the service directly
        public void Value_LiveTest()
        {
            var assetPortfolio = new AssetPortfolio(new ExchangeRates(new ServiceWrapper()))
            {
                Portfolio = new List <IAsset>()
                {
                    new Stock("ABC", "USD", 3, 2), //6 USD or 5ish GBP
                    new Stock("XYZ", "USD", 5, 1), //5 USD or 4ish GBP
                    new Currency("EUR", 100),      //112 ish USD or 90ish GBP
                    new Currency("USD", 100),      // 100 USD or 80ish GBP
                }
            };
            var value = assetPortfolio.Value("USD"); // should be 223 ish

            Assert.IsFalse(value == 0);
            Assert.IsFalse(value == (6 + 5 + 100 + 100));

            value = assetPortfolio.Value("GBP"); //should be 179ish GBP

            Assert.IsFalse(value == 0);
            Assert.IsFalse(value == (6 + 5 + 100 + 100));
        }
Beispiel #12
0
        public void TestValuationPortfolio(AssetPortfolio portfolio, decimal expected, string currency)
        {
            decimal actual = portfolio.Value(currency);

            Assert.AreEqual(expected, actual);
        }