public async Task GetCompoundReturns_NoProfitAndLoss_ReturnsError() { IList <Capital> repositoryCapitalResults = new List <Capital> { new Capital() }; IList <ProfitAndLoss> repositoryPnlResults = new List <ProfitAndLoss>(); var mockRepository = new Mock <IQueryRepository>(); mockRepository.Setup(x => x.GetCapitalsForStrategy(It.IsAny <string>())).Returns(Task.FromResult(repositoryCapitalResults)); mockRepository.Setup(x => x.GetProfitAndLossForStrategy(It.IsAny <string>())).Returns(Task.FromResult(repositoryPnlResults)); var calculator = new CompoundDailyReturnsCalculator(mockRepository.Object); var result = await calculator.GetCompoundReturns("StrategyWithNoPnl"); Assert.IsNull(result.Results); Assert.IsTrue(result.ErrorMessage == "No profit & loss data available for strategy StrategyWithNoPnl"); }
public async Task GetCompoundReturns_OneStrategy_ReturnsCorrectResults() { var strategy1 = new Strategy { Name = "TestStrategy1" }; IList <Capital> repositoryCapitalResults = new List <Capital> { new Capital { Date = new DateTime(2016, 1, 1), Value = 10000, Strategy = strategy1 }, new Capital { Date = new DateTime(2016, 2, 1), Value = 20000, Strategy = strategy1 }, new Capital { Date = new DateTime(2016, 3, 1), Value = 19000, Strategy = strategy1 }, new Capital { Date = new DateTime(2016, 4, 1), Value = 28000, Strategy = strategy1 }, }; IList <ProfitAndLoss> repositoryPnlResults = new List <ProfitAndLoss> { new ProfitAndLoss { Date = new DateTime(2016, 1, 5), Value = 100, Strategy = strategy1 }, new ProfitAndLoss { Date = new DateTime(2016, 2, 21), Value = 200, Strategy = strategy1 }, new ProfitAndLoss { Date = new DateTime(2016, 2, 22), Value = -50, Strategy = strategy1 }, new ProfitAndLoss { Date = new DateTime(2016, 4, 7), Value = 300, Strategy = strategy1 } }; var mockRepository = new Mock <IQueryRepository>(); mockRepository.Setup(x => x.GetCapitalsForStrategy(It.IsAny <string>())).Returns(Task.FromResult(repositoryCapitalResults)); mockRepository.Setup(x => x.GetProfitAndLossForStrategy(It.IsAny <string>())).Returns(Task.FromResult(repositoryPnlResults)); var calculator = new CompoundDailyReturnsCalculator(mockRepository.Object); var result = await calculator.GetCompoundReturns("TestStrategy1"); Assert.IsNull(result.ErrorMessage); Assert.IsNotNull(result.Results); var results = result.Results.ToList(); Assert.IsTrue(results.Select(x => x.Date).ToList().IsDailyTimeSeries()); Assert.IsTrue(results.First().Date == repositoryCapitalResults.First().Date); Assert.IsTrue(results.Last().Date == repositoryPnlResults.Last().Date); var expectedResults = ExpectedResults(); for (var i = 0; i < results.Count; i++) { var expected = expectedResults[i]; var actual = results[i].CompoundReturn; Assert.IsTrue(expected == actual); } }