コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }