public void GetSecurityPrices_WhenAllTickersExistButInvalidTradeDateProvided_FailureResultWithInvalidTradeDateError() { // Arrange var tickers = new List <string>() { "MSFT", "INTC" }; var tradeDateRepository = new Mock <ITradeDateRepository>(MockBehavior.Strict); tradeDateRepository.Setup(r => r.GetTradeDate(DATE_DEC_31_2016)) .Returns(Maybe.Create <TradeDate>(null)); var securityRepository = new Mock <ISecurityRepository>(MockBehavior.Strict); var securityPriceRepository = new Mock <ISecurityPriceRepository>(MockBehavior.Strict); // Act SecurityPriceService service = new SecurityPriceService(tradeDateRepository.Object, securityRepository.Object, securityPriceRepository.Object); var result = service.GetSecurityPrices(DATE_DEC_31_2016, tickers); // Assert result.IsSuccess.Should().BeFalse(); result.Error.Should().BeOfType <InvalidTradeDateError>(); result.Error.As <InvalidTradeDateError>().Date.Should().Be(DATE_DEC_31_2016); result.Value.Should().BeNull(); tradeDateRepository.Verify(r => r.GetLatestTradeDate(), Times.Never); tradeDateRepository.Verify(r => r.GetTradeDate(DATE_DEC_31_2016), Times.Once); tradeDateRepository.Verify(r => r.GetTradeDates(), Times.Never); }
public void GetSecurityPrices_WhenValidDateProvidedButNoPricingData_FailureResultReturnedWithApplicationError() { var tradeDateRepository = new Mock <ITradeDateRepository>(MockBehavior.Strict); tradeDateRepository.Setup(r => r.GetTradeDate(DATE_DEC_29_2016)) .Returns(Maybe.Create <TradeDate>(TRADE_DATE_DEC_29_2016)); var securityRepository = new Mock <ISecurityRepository>(MockBehavior.Strict); var securityPriceRepository = new Mock <ISecurityPriceRepository>(MockBehavior.Strict); securityPriceRepository.Setup(r => r.GetSecurityPrices(TRADE_DATE_DEC_29_2016)) .Returns(new List <SecurityPrice>()); // Empty list of prices = no pricing data // Act SecurityPriceService service = new SecurityPriceService(tradeDateRepository.Object, securityRepository.Object, securityPriceRepository.Object); var result = service.GetSecurityPrices(DATE_DEC_29_2016); // Assert result.IsSuccess.Should().BeFalse(); result.Error.Should().BeOfType <ApplicationError>(); result.Value.Should().BeNull(); tradeDateRepository.Verify(r => r.GetTradeDate(DATE_DEC_29_2016), Times.Once); tradeDateRepository.Verify(r => r.GetLatestTradeDate(), Times.Never); tradeDateRepository.Verify(r => r.GetTradeDates(), Times.Never); securityPriceRepository.Verify(r => r.GetSecurityPrices(TRADE_DATE_DEC_29_2016), Times.Once); }
public void GetSecurityPrices_WhenDateProvided_PricesForThatPricingDateAreReturned() { var tradeDateRepository = new Mock <ITradeDateRepository>(MockBehavior.Strict); tradeDateRepository.Setup(r => r.GetTradeDate(DATE_DEC_29_2016)) .Returns(Maybe.Create <TradeDate>(TRADE_DATE_DEC_29_2016)); var securityRepository = new Mock <ISecurityRepository>(MockBehavior.Strict); var securityPriceRepository = new Mock <ISecurityPriceRepository>(MockBehavior.Strict); securityPriceRepository.Setup(r => r.GetSecurityPrices(TRADE_DATE_DEC_29_2016)) .Returns(new List <SecurityPrice>() { PRICE_MSFT_DEC_29, PRICE_INTC_DEC_29, PRICE_JPM_DEC_29 }); // Act SecurityPriceService service = new SecurityPriceService(tradeDateRepository.Object, securityRepository.Object, securityPriceRepository.Object); var result = service.GetSecurityPrices(DATE_DEC_29_2016); // Assert result.IsSuccess.Should().BeTrue(); result.Value.Count.Should().Be(3); result.Value.Any(s => s.Ticker == "MSFT" && s.TradeDate == DATE_DEC_29_2016).Should().BeTrue(); result.Value.Any(s => s.Ticker == "INTC" && s.TradeDate == DATE_DEC_29_2016).Should().BeTrue(); result.Value.Any(s => s.Ticker == "JPM" && s.TradeDate == DATE_DEC_29_2016).Should().BeTrue(); tradeDateRepository.Verify(r => r.GetTradeDate(DATE_DEC_29_2016), Times.Once); tradeDateRepository.Verify(r => r.GetLatestTradeDate(), Times.Never); tradeDateRepository.Verify(r => r.GetTradeDates(), Times.Never); securityPriceRepository.Verify(r => r.GetSecurityPrices(TRADE_DATE_DEC_29_2016), Times.Once); }
public void GetSecurityPrices_WhenAllTickersExistAndValidTradeDateProvided_SuccessResultWithPricesForProvidedDate() { // Arrange var tickers = new List <string>() { "MSFT", "INTC" }; var tradeDateRepository = new Mock <ITradeDateRepository>(MockBehavior.Strict); tradeDateRepository.Setup(r => r.GetTradeDate(DATE_DEC_29_2016)) .Returns(Maybe.Create <TradeDate>(TRADE_DATE_DEC_29_2016)); var securityRepository = new Mock <ISecurityRepository>(MockBehavior.Strict); securityRepository.Setup(r => r.GetSecurities(tickers)) .Returns(new List <Security>() { SECURITY_MSFT, SECURITY_INTC }); var securityPriceRepository = new Mock <ISecurityPriceRepository>(MockBehavior.Strict); securityPriceRepository.Setup(r => r.GetSecurityPrices(TRADE_DATE_DEC_29_2016, tickers)) .Returns(new List <SecurityPrice>() { PRICE_MSFT_DEC_29, PRICE_INTC_DEC_29 }); // Act SecurityPriceService service = new SecurityPriceService(tradeDateRepository.Object, securityRepository.Object, securityPriceRepository.Object); var result = service.GetSecurityPrices(DATE_DEC_29_2016, tickers); // Assert result.IsSuccess.Should().BeTrue(); result.Value.Count.Should().Be(2); result.Value.Any(s => s.Ticker == "MSFT" && s.TradeDate == DATE_DEC_29_2016).Should().BeTrue(); result.Value.Any(s => s.Ticker == "INTC" && s.TradeDate == DATE_DEC_29_2016).Should().BeTrue(); tradeDateRepository.Verify(r => r.GetLatestTradeDate(), Times.Never); tradeDateRepository.Verify(r => r.GetTradeDate(DATE_DEC_29_2016), Times.Once); tradeDateRepository.Verify(r => r.GetTradeDates(), Times.Never); securityRepository.Verify(r => r.GetSecurities(tickers), Times.Once); securityRepository.Verify(r => r.GetSecurities(), Times.Never); securityRepository.Verify(r => r.GetSecurity(It.IsAny <string>()), Times.Never); securityPriceRepository.Verify(r => r.GetSecurityPrices(TRADE_DATE_DEC_29_2016, tickers), Times.Once); securityPriceRepository.Verify(r => r.GetSecurityPrices(TRADE_DATE_DEC_29_2016), Times.Never); }
public void GetSecurityPrices_WhenOneTickerDoesNotExistAndValidTradeDateProvided_FailureResultWithTickerNotFoundError() { // Arrange var tickers = new List <string>() { "MSFT", "INTC", "PS" }; var tradeDateRepository = new Mock <ITradeDateRepository>(MockBehavior.Strict); tradeDateRepository.Setup(r => r.GetTradeDate(DATE_MAY_16_2018)) .Returns(Maybe.Create <TradeDate>(TRADE_DATE_MAY_16_2018)); var securityRepository = new Mock <ISecurityRepository>(MockBehavior.Strict); securityRepository.Setup(r => r.GetSecurities(tickers)) .Returns(new List <Security>() { SECURITY_MSFT, SECURITY_INTC, SECURITY_PS }); var securityPriceRepository = new Mock <ISecurityPriceRepository>(MockBehavior.Strict); // Act SecurityPriceService service = new SecurityPriceService(tradeDateRepository.Object, securityRepository.Object, securityPriceRepository.Object); var result = service.GetSecurityPrices(DATE_MAY_16_2018, tickers); // Assert result.IsSuccess.Should().BeFalse(); result.Error.Should().BeOfType <InvalidDateForTickerError>(); result.Error.As <InvalidDateForTickerError>().TradeDate.Should().Be(TRADE_DATE_MAY_16_2018); result.Error.As <InvalidDateForTickerError>().Securities.Any(s => s.Ticker == "PS").Should().BeTrue(); result.Value.Should().BeNull(); tradeDateRepository.Verify(r => r.GetLatestTradeDate(), Times.Never); tradeDateRepository.Verify(r => r.GetTradeDate(DATE_MAY_16_2018), Times.Once); tradeDateRepository.Verify(r => r.GetTradeDates(), Times.Never); securityRepository.Verify(r => r.GetSecurities(tickers), Times.Once); securityRepository.Verify(r => r.GetSecurities(), Times.Never); securityRepository.Verify(r => r.GetSecurity(It.IsAny <string>()), Times.Never); }
public void GetSecurityPrices_WhenDateProvidedIsNotTradeDate_FailureResultReturnedWithInvalidTradeDateError() { var tradeDateRepository = new Mock <ITradeDateRepository>(MockBehavior.Strict); tradeDateRepository.Setup(r => r.GetTradeDate(DATE_DEC_31_2016)) .Returns(Maybe.Create <TradeDate>(null)); var securityRepository = new Mock <ISecurityRepository>(MockBehavior.Strict); var securityPriceRepository = new Mock <ISecurityPriceRepository>(MockBehavior.Strict); // Act SecurityPriceService service = new SecurityPriceService(tradeDateRepository.Object, securityRepository.Object, securityPriceRepository.Object); var result = service.GetSecurityPrices(DATE_DEC_31_2016); // Assert result.IsSuccess.Should().BeFalse(); result.Error.Should().BeOfType <InvalidTradeDateError>(); result.Error.As <InvalidTradeDateError>().Date.Should().Be(DATE_DEC_31_2016); tradeDateRepository.Verify(r => r.GetTradeDate(DATE_DEC_31_2016), Times.Once); tradeDateRepository.Verify(r => r.GetLatestTradeDate(), Times.Never); tradeDateRepository.Verify(r => r.GetTradeDates(), Times.Never); securityPriceRepository.Verify(r => r.GetSecurityPrices(It.IsAny <TradeDate>()), Times.Never); }