diff --git a/apps/amm/qml/components/swap/SwapCard.qml b/apps/amm/qml/components/swap/SwapCard.qml index 933e5e7..1b19f1e 100644 --- a/apps/amm/qml/components/swap/SwapCard.qml +++ b/apps/amm/qml/components/swap/SwapCard.qml @@ -86,7 +86,7 @@ Rectangle { readonly property bool tokensSelected: sellToken !== null && buyToken !== null readonly property bool sameTokenSelected: isSameToken(sellToken, buyToken) readonly property bool insufficientBalance: hasAmount && sellToken !== null && sellBalanceRequirement > (sellToken.balance || 0) - readonly property bool insufficientLiquidity: hasAmount && buyToken !== null && parsedBuyAmount > (buyToken.reserve || 0) + readonly property bool insufficientLiquidity: hasAmount && buyToken !== null && parsedBuyAmount >= (buyToken.reserve || 0) readonly property bool canSubmit: tokensSelected && !sameTokenSelected && hasAmount && parsedSellAmount > 0 && parsedBuyAmount > 0 && !insufficientBalance && !insufficientLiquidity readonly property string submitButtonText: { diff --git a/apps/amm/tests/qml/tst_SwapPage.qml b/apps/amm/tests/qml/tst_SwapPage.qml index d0e9a10..7602f62 100644 --- a/apps/amm/tests/qml/tst_SwapPage.qml +++ b/apps/amm/tests/qml/tst_SwapPage.qml @@ -127,6 +127,23 @@ Item { compare(card.submitButtonText, "Insufficient balance") } + function test_exactOutputCannotConsumeEntireReserve() { + const page = createTemporaryObject(pageComponent, root) + verify(page) + + const card = findChild(page, "swapCard") + verify(card) + card.setToken("sell", page.tokens[0]) + card.setToken("buy", page.tokens[1]) + card.buyInput = String(card.buyToken.reserve) + card.editingSide = "buy" + + compare(card.parsedBuyAmount, card.buyToken.reserve) + verify(card.insufficientLiquidity) + verify(!card.canSubmit) + compare(card.submitButtonText, "Insufficient liquidity") + } + function test_reselectingOppositeTokenSwapsPair() { const page = createTemporaryObject(pageComponent, root) verify(page)