diff --git a/matching-engine/matching-engine-core/src/main/kotlin/co/nilin/opex/matching/engine/core/engine/SimpleOrderBook.kt b/matching-engine/matching-engine-core/src/main/kotlin/co/nilin/opex/matching/engine/core/engine/SimpleOrderBook.kt index 5475734ee..c8ffe0622 100644 --- a/matching-engine/matching-engine-core/src/main/kotlin/co/nilin/opex/matching/engine/core/engine/SimpleOrderBook.kt +++ b/matching-engine/matching-engine-core/src/main/kotlin/co/nilin/opex/matching/engine/core/engine/SimpleOrderBook.kt @@ -250,7 +250,7 @@ class SimpleOrderBook(val pair: Pair, var replayMode: Boolean) : OrderBook { order.matchConstraint, order.orderType, order.direction, - order.filledQuantity, + 0, null, null, null @@ -613,4 +613,4 @@ class SimpleOrderBook(val pair: Pair, var replayMode: Boolean) : OrderBook { """.trimIndent() ) } -} \ No newline at end of file +} diff --git a/matching-engine/matching-engine-core/src/test/kotlin/co/nilin/opex/matching/engine/core/SimpleOrderBookUnitTest.kt b/matching-engine/matching-engine-core/src/test/kotlin/co/nilin/opex/matching/engine/core/SimpleOrderBookUnitTest.kt index 8b67edf10..b204f431e 100644 --- a/matching-engine/matching-engine-core/src/test/kotlin/co/nilin/opex/matching/engine/core/SimpleOrderBookUnitTest.kt +++ b/matching-engine/matching-engine-core/src/test/kotlin/co/nilin/opex/matching/engine/core/SimpleOrderBookUnitTest.kt @@ -564,6 +564,64 @@ class SimpleOrderBookUnitTest { Assertions.assertNull(orderBook.bestAskOrder) } + @Test + fun givenPartiallyFilledOrder_whenEditQuantity_thenRequestedQuantityRests() { + val orderBook = SimpleOrderBook(pair, false) + val ask = orderBook.handleNewOrderCommand( + OrderCreateCommand( + UUID.randomUUID().toString(), + uuid, + pair, + 100, + 10, + OrderDirection.ASK, + MatchConstraint.GTC, + OrderType.LIMIT_ORDER + ) + )!! + orderBook.handleNewOrderCommand( + OrderCreateCommand( + UUID.randomUUID().toString(), + uuid, + pair, + 100, + 4, + OrderDirection.BID, + MatchConstraint.GTC, + OrderType.LIMIT_ORDER + ) + ) + + val edited = orderBook.handleEditCommand( + OrderEditCommand( + UUID.randomUUID().toString(), + uuid, + ask.id()!!, + pair, + 101, + 6 + ) + ) as SimpleOrder + + Assertions.assertEquals(0, edited.filledQuantity) + Assertions.assertEquals(6, edited.remainedQuantity()) + Assertions.assertEquals(6, orderBook.askOrders[101]?.totalQuantity) + + val aggressor = orderBook.handleNewOrderCommand( + OrderCreateCommand( + UUID.randomUUID().toString(), + uuid, + pair, + 101, + 6, + OrderDirection.BID, + MatchConstraint.IOC, + OrderType.LIMIT_ORDER + ) + ) as SimpleOrder + Assertions.assertEquals(6, aggressor.filledQuantity) + } + @Test fun givenEmptyOrderBook_whenGtcBidMarketOrderCreated_thenRejected() { //given @@ -849,4 +907,4 @@ class SimpleOrderBookUnitTest { Assertions.assertNotNull(orderBook.bestBidOrder) Assertions.assertNotNull(orderBook.bestAskOrder) } -} \ No newline at end of file +}