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 When_valid_request_and_price_less_than_threshold_Then_buy_and_raise_orderPlaced_event() { // Arrange validatorMock.Setup(i => i.IsValid(It.IsAny <string>(), It.IsAny <decimal>())).Returns(true); var price = 5m; var wasOrderPlacedEventRaised = false; OrderPlacedEventArgs eventArgs = null; _sut.OrderPlaced += data => { wasOrderPlacedEventRaised = true; eventArgs = data; }; // Act _sut.ReceiveTick("some equity code", price); // Assert orderServiceMock.Verify(o => o.Buy("some equity code", 1, 5m), Times.Once); Assert.True(wasOrderPlacedEventRaised); Assert.NotNull(eventArgs); Assert.Equal("some equity code", eventArgs.EquityCode); Assert.Equal(price, eventArgs.Price); }
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); }
private void BangaloreExchange_OrderPlaced(object sender, OrderPlacedEventArgs e) { var order = e.OrderDetail; string[] arr = new string[3]; arr[0] = order.TimeStamp.ToLongTimeString(); arr[1] = order.Quantity.ToString(); arr[2] = order.Price.ToString("0.##"); ListViewItem item = new ListViewItem(arr); if (order.Transaction == TransactionType.Buy) { AddListViewItem(listViewBids, item); //listViewBids.Items.Add(item); } else { AddListViewItem(listViewAsks, item); //listViewAsks.Items.Add(item); } }
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); }
public void ConsumeEvent(object sender, OrderPlacedEventArgs ea) { LastNotifications.TryRemove(ea.Order.AccountId, out var tmp); }
public void ConsumeEvent(object sender, OrderPlacedEventArgs ea) { NotifyAccountStatsChanged(ea.Order.ClientId, ea.Order.AccountId); }