public void SettingNewPriceWhileOrderActiveResultsInMarketOrderCancelAndCreatesNewOrder() { const decimal totalQ = 25; const decimal clipQ = 10; const string orderID = "OrderID"; var expected = DefaultFakeOrderRecord(quantity: totalQ); var newPrice = expected.Price + 10; var mockServer = new Mock<IServerFacade>(); mockServer.Setup(s => s.CreateOrder(It.IsAny<OrderRecord>())).Returns(true); var updatedOrders = new UpdatedOrders(); mockServer.Setup(s => s.UpdateOrder(It.IsAny<OrderRecord>(), It.IsAny<OrderRecord>())) .Returns(true) .Callback<OrderRecord, OrderRecord>(updatedOrders.AddUpdate); const decimal priceDelta = 0; var iceberg = new IcebergOrder(mockServer.Object, expected.Symbol, expected.ClOrdID, expected.Side, expected.Quantity, clipQ, expected.Price, priceDelta); iceberg.Activate(); iceberg.ActivatedMarketOrderAccepted(orderID); iceberg.SetNewOrderPrice(newPrice); mockServer.Verify(s => s.CreateOrder(It.IsAny<OrderRecord>()), Times.Once()); mockServer.Verify(s => s.UpdateOrder(It.IsAny<OrderRecord>(), It.IsAny<OrderRecord>()), Times.Once()); Assert.AreEqual(1, updatedOrders.OldRecords.Count, "Incorrect number of old orders in update callback"); var old = updatedOrders.OldRecords[0]; Assert.AreEqual(expected.ClOrdID, old.ClOrdID, "Incorrect ClOrdID for old record when updating"); Assert.AreEqual(1, updatedOrders.NewRecords.Count, "Incorrect number of new orders in update callback"); var update = updatedOrders.NewRecords[0]; Assert.AreEqual(newPrice, update.Price, "Updated order price incorrect"); }
public void SettingNewPriceWhileWaitingForMarketOrderAcceptanceThrows() { const decimal totalQ = 25; const decimal clipQ = 10; var expected = DefaultFakeOrderRecord(quantity: totalQ); var mockServer = new Mock<IServerFacade>(); mockServer.Setup(s => s.CreateOrder(It.IsAny<OrderRecord>())).Returns(true); const decimal priceDelta = 0; var iceberg = new IcebergOrder(mockServer.Object, expected.Symbol, expected.ClOrdID, expected.Side, expected.Quantity, clipQ, expected.Price, priceDelta); iceberg.Activate(); Assert.Throws<ApplicationException>(() => iceberg.SetNewOrderPrice(100)); }
public void SettingNewPriceBeforeActivatingShouldNotNeedToUpdateServerOrder() { const decimal totalQ = 25; const decimal clipQ = 10; var expected = DefaultFakeOrderRecord(quantity: totalQ); var mockServer = new Mock<IServerFacade>(); const decimal priceDelta = 0; var iceberg = new IcebergOrder(mockServer.Object, expected.Symbol, expected.ClOrdID, expected.Side, expected.Quantity, clipQ, expected.Price, priceDelta); var newPrice = expected.Price + 10; iceberg.SetNewOrderPrice(newPrice); Assert.AreEqual(newPrice, iceberg.CurrentPrice, "Price not updated correctly"); mockServer.Verify(s => s.CreateOrder(It.IsAny<OrderRecord>()), Times.Never()); }