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); }
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); }
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); }
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(); }
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); }
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); }
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); }
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); }