public void When_SecurityQuoter_Cannot_Find_Quote_Then_Report_Generation_Error_Message_Is_Written_To_String() { // setup var portfolio = TestDataGenerator.GenerateDefaultPortfolio(); _quoterMock.Setup(m => m.GetQuotes(It.IsAny <IEnumerable <Security> >())).Returns(new Dictionary <Security, decimal> { { new Security { Symbol = "goog" }, new decimal(18.25) }, { new Security { Symbol = "msft" }, new decimal(15) }, }); // execute StringValueReporter reporter = new StringValueReporter(_quoterMock.Object); var result = reporter.GetReport(portfolio); // validate Assert.That(result, Is.Not.Null); Assert.That(result, Is.Not.Empty); const string expected = @"po' boy total = 3325.00 mandingo total = 1825.00 goog: 100 x 18.25 = 1825.00 aapl: 200 x quote not found = unknown took total = 1500 msft: 100 x 15 = 1500 "; Assert.That(result, Is.EqualTo(expected)); }
public void When_StringValueReporter_Given_Valid_Portfolio_Then_Report_Is_Written_To_String() { // setup var portfolio = TestDataGenerator.GenerateDefaultPortfolio(); _quoterMock.Setup(m => m.GetQuotes(It.IsAny <IEnumerable <Security> >())).Returns(new Dictionary <Security, decimal> { { new Security { Symbol = "goog" }, 18.25M }, { new Security { Symbol = "msft" }, 15M }, { new Security { Symbol = "aapl" }, 9.36M }, }); // execute var reporter = new StringValueReporter(_quoterMock.Object); var result = reporter.GetReport(portfolio); // validate Assert.That(result, Is.Not.Null); Assert.That(result, Is.Not.Empty); const string expected = @"po' boy total = 5197.00 mandingo total = 3697.00 goog: 100 x 18.25 = 1825.00 aapl: 200 x 9.36 = 1872.00 took total = 1500 msft: 100 x 15 = 1500 "; Assert.That(result, Is.EqualTo(expected)); }
public void When_Updating_Account_With_Transaction_That_Already_Happened_Then_New_Transaction_Is_Ignored() { var portfolio = TestDataGenerator.GenerateDefaultPortfolio(); var mandingo = portfolio.Accounts.Single(a => a.Name.Equals("mandingo", StringComparison.InvariantCultureIgnoreCase)); Security yvr = new Security { Symbol = "yvr" }; var transactions = new List <Transaction>(); transactions.AddRange(mandingo.Transactions); transactions.Add(new Transaction { Account = mandingo, Date = DateTime.UtcNow, Price = 10M, Security = yvr, Shares = 50M, Type = TransactionType.Buy }); var portfolioService = new PortfolioService(portfolio); portfolioService.UpdateWith(transactions); Assert.That(mandingo.Transactions.Count, Is.EqualTo(3)); var googPosition = mandingo.Positions.Single(p => p.Security.Symbol.Equals("goog", StringComparison.InvariantCultureIgnoreCase)); Assert.That(googPosition.Shares, Is.EqualTo(100M)); var aaplPosition = mandingo.Positions.Single(p => p.Security.Symbol.Equals("aapl", StringComparison.InvariantCultureIgnoreCase)); Assert.That(aaplPosition.Shares, Is.EqualTo(200M)); var yvrPosition = mandingo.Positions.Single(p => p.Security.Symbol.Equals("yvr", StringComparison.InvariantCultureIgnoreCase)); Assert.That(yvrPosition.Shares, Is.EqualTo(50M)); }
public void When_Updating_Account_Then_Update_Is_Atomic() { var portfolio = TestDataGenerator.GenerateDefaultPortfolio(); var mandingo = portfolio.Accounts.Single(a => a.Name.Equals("mandingo", StringComparison.InvariantCultureIgnoreCase)); Security yvr = new Security { Symbol = "yvr" }; Security goog = new Security { Symbol = "goog" }; var transactions = new List <Transaction>(2) { new Transaction { Account = mandingo, Date = DateTime.UtcNow, Price = 10M, Security = yvr, Shares = 100M, Type = TransactionType.Buy }, new Transaction { Account = mandingo, Date = DateTime.UtcNow, Price = 10M, Security = goog, Shares = 10M, Type = TransactionType.Sell }, new Transaction { Account = mandingo, Date = DateTime.UtcNow, Price = 10M, Security = new Security { Symbol = "not_owned" }, Shares = 100M, Type = TransactionType.Sell } }; var portfolioService = new PortfolioService(portfolio); Assert.Throws <Exception>(() => portfolioService.UpdateWith(transactions)); Assert.That(mandingo.Positions.Count, Is.EqualTo(2)); var googPosition = mandingo.Positions.Single(p => p.Security.Symbol.Equals(goog.Symbol, StringComparison.InvariantCultureIgnoreCase)); Assert.That(googPosition.Shares, Is.EqualTo(100M)); var aaplPosition = mandingo.Positions.Single(p => p.Security.Symbol.Equals("aapl", StringComparison.InvariantCultureIgnoreCase)); Assert.That(aaplPosition.Shares, Is.EqualTo(200M)); var took = portfolio.Accounts.Single(a => a.Name.Equals("took", StringComparison.InvariantCultureIgnoreCase)); var msftPosition = took.Positions.Single(p => p.Security.Symbol.Equals("msft", StringComparison.InvariantCultureIgnoreCase)); Assert.That(msftPosition.Shares, Is.EqualTo(100M)); }