public void When_exception_occurs_Then_raise_OrderErrored_event()
        {
            //  Arrange
            validatorMock.Setup(i => i.IsValid(It.IsAny <string>(), It.IsAny <decimal>())).Throws(new Exception("some exception occurred"));
            var price = 5m;
            OrderErroredEventArgs eventArgs = null;
            var wasOrderErroredEventRaised  = false;

            _sut.OrderErrored += data => {
                wasOrderErroredEventRaised = true;
                eventArgs = data;
            };

            //  Act
            _sut.ReceiveTick("some equity code", price);

            //  Assert
            orderServiceMock.Verify(o => o.Buy("some equity code", 1, 5m), Times.Never);
            Assert.True(wasOrderErroredEventRaised);

            //  Assert event arguments properties
            Assert.NotNull(eventArgs);
            Assert.Equal("some equity code", eventArgs.EquityCode);
            Assert.Equal(price, eventArgs.Price);
            Assert.NotNull(eventArgs.GetException());
            Assert.Equal("some exception occurred", eventArgs.GetException().Message);
        }
        public void When_invalid_request_and_price_less_than_threshold_Then_raise_OrderErrored_event()
        {
            //  Arrange
            validatorMock.Setup(i => i.IsValid(It.IsAny <string>(), It.IsAny <decimal>())).Returns(false);
            var price = 5.00m;
            OrderErroredEventArgs eventArgs = null;
            var wasOrderErroredEventRaised  = false;

            _sut.OrderErrored += data => { wasOrderErroredEventRaised = true;
                                           eventArgs = data; };

            //  Act
            _sut.ReceiveTick("some equity code", price);

            //  Assert
            orderServiceMock.Verify(o => o.Buy("some equity code", 1, 5m), Times.Never);
            Assert.True(wasOrderErroredEventRaised);

            //  Assert event arguments properties
            Assert.NotNull(eventArgs);
            Assert.Equal("some equity code", eventArgs.EquityCode);
            Assert.Equal(price, eventArgs.Price);
            Assert.NotNull(eventArgs.GetException());
            Assert.Equal("Equity code or price invalid; EquityCode: some equity code, Price: 5.00", eventArgs.GetException().Message);
        }
Пример #3
0
        public void GivenMultipleDifferentPrices_WhenReceiveTickCalled_ThenBuyCorrectStockPriceOnlyOnce()
        {
            // Arrange
            var     equityCode       = "AMZN";
            decimal firstStockPrice  = 3.00M;
            decimal secondStockPrice = 4.00M;
            decimal thirdStockPrice  = 4.50M;

            _equityOrder.OrderPlaced  += orderPlacedArgs => _orderPlacedEventArgs = orderPlacedArgs;
            _equityOrder.OrderErrored += orderErroredArgs => _orderErroredEventArgs = orderErroredArgs;

            _orderService.Setup(x => x.Buy(equityCode, _orderParameters.Quantity, firstStockPrice));

            // Act
            _equityOrder.ReceiveTick(equityCode, firstStockPrice);
            _equityOrder.ReceiveTick(equityCode, secondStockPrice);
            _equityOrder.ReceiveTick(equityCode, thirdStockPrice);

            // Assert
            _orderPlacedEventArgs.Should().NotBeNull();
            _orderPlacedEventArgs.EquityCode.Should().Be(equityCode);
            _orderPlacedEventArgs.Price.Should().Be(firstStockPrice);

            _orderErroredEventArgs.Should().BeNull();

            _orderService.Verify(x => x.Buy(equityCode, _orderParameters.Quantity, firstStockPrice), Times.Once);
        }
Пример #4
0
 public void Setup()
 {
     _orderService          = new Mock <IOrderService>(MockBehavior.Strict);
     _orderPlacedEventArgs  = null;
     _orderErroredEventArgs = null;
     _orderParameters       = new OrderParameters {
         PriceThreshold = priceThreshold, Quantity = quantity
     };
     _equityOrder = new EquityOrder(_orderService.Object, _orderParameters);
 }
Пример #5
0
        public void GivenPriceAbovePriceThreshold_WhenReceiveTickCalled_ThenNotBuyOrSell()
        {
            // Arrange
            var     equityCode = "AMZN";
            decimal stockPrice = 6.00M;

            _equityOrder.OrderPlaced  += orderPlacedArgs => _orderPlacedEventArgs = orderPlacedArgs;
            _equityOrder.OrderErrored += orderErroredArgs => _orderErroredEventArgs = orderErroredArgs;

            // Act
            _equityOrder.ReceiveTick(equityCode, stockPrice);

            // Assert
            _orderPlacedEventArgs.Should().BeNull();
            _orderErroredEventArgs.Should().BeNull();
        }
Пример #6
0
        public void TickAboveOrSameTreshhold_BuyIsNotExecuted()
        {
            // arrange
            OrderPlacedEventArgs  args      = null;
            OrderErroredEventArgs errorArgs = null;

            _sut.OrderPlaced  += evtArgs => { args = evtArgs; };
            _sut.OrderErrored += evtArgs => { errorArgs = evtArgs; };

            // act
            _sut.ReceiveTick(EQUITY_CODE, TRESHOLD);
            _sut.ReceiveTick(EQUITY_CODE, TRESHOLD + 1);

            // assert
            Assert.IsNull(args);
            Assert.IsNull(errorArgs);
            Assert.IsFalse(_sut.Completed);
            _orderServiceMock.Verify(x => x.Buy(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <decimal>()), Times.Never);
            _orderServiceMock.Verify(x => x.Sell(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <decimal>()),
                                     Times.Never);
        }
Пример #7
0
        public void TickBelowTreshhold_SuccessEventReceived()
        {
            // arrange
            OrderPlacedEventArgs  args      = null;
            OrderErroredEventArgs errorArgs = null;

            _sut.OrderPlaced  += evtArgs => { args = evtArgs; };
            _sut.OrderErrored += evtArgs => { errorArgs = evtArgs; };

            // act
            _sut.ReceiveTick(EQUITY_CODE, TRESHOLD - 1);

            // assert
            Assert.IsNull(errorArgs);
            Assert.IsTrue(_sut.Completed);
            Assert.AreSame(EQUITY_CODE, args.EquityCode);
            Assert.AreEqual(TRESHOLD - 1, args.Price);
            _orderServiceMock.Verify(x => x.Buy(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <decimal>()), Times.Once);
            _orderServiceMock.Verify(x => x.Sell(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <decimal>()),
                                     Times.Never);
        }
Пример #8
0
        public void GivenPriceBelowPriceThreshold_WhenReceiveTickCalled_ThenBuysOnlyOnce()
        {
            // Arrange
            var     equityCode = "AMZN";
            decimal stockPrice = 3.00M;

            _equityOrder.OrderPlaced  += orderPlacedArgs => _orderPlacedEventArgs = orderPlacedArgs;
            _equityOrder.OrderErrored += orderErroredArgs => _orderErroredEventArgs = orderErroredArgs;

            _orderService.Setup(x => x.Buy(equityCode, _orderParameters.Quantity, stockPrice));

            // Act
            _equityOrder.ReceiveTick(equityCode, stockPrice);
            _equityOrder.ReceiveTick(equityCode, stockPrice);

            // Assert
            _orderPlacedEventArgs.Should().NotBeNull();
            _orderPlacedEventArgs.EquityCode.Should().Be(equityCode);
            _orderPlacedEventArgs.Price.Should().Be(stockPrice);

            _orderErroredEventArgs.Should().BeNull();

            _orderService.Verify(x => x.Buy(equityCode, _orderParameters.Quantity, stockPrice), Times.Once);
        }
Пример #9
0
        public void GivenPriceBelowPriceThreshold_WhenReceiveTickCalled_ThenReturnsError()
        {
            // Arrange
            var     equityCode        = "AMZN";
            decimal stockPrice        = 4.00M;
            var     argumentException = new ArgumentException("Something is wrong with the argument.");

            _equityOrder.OrderPlaced  += orderPlacedArgs => _orderPlacedEventArgs = orderPlacedArgs;
            _equityOrder.OrderErrored += orderErroredArgs => _orderErroredEventArgs = orderErroredArgs;

            _orderService.Setup(x => x.Buy(equityCode, _orderParameters.Quantity, stockPrice)).Throws(argumentException);

            // Act
            _equityOrder.ReceiveTick(equityCode, stockPrice);

            // Assert
            _orderPlacedEventArgs.Should().BeNull();

            _orderErroredEventArgs.Should().NotBeNull();
            _orderErroredEventArgs.GetException().Should().Be(argumentException);

            _orderErroredEventArgs.EquityCode.Should().Be(equityCode);
            _orderErroredEventArgs.Price.Should().Be(stockPrice);
        }