From 41460d8b097a60a7510ea9c12ed2ca1632501805 Mon Sep 17 00:00:00 2001 From: Ricardo Guilherme Schmidt <3esmit@gmail.com> Date: Sat, 18 Jul 2026 07:53:09 -0300 Subject: [PATCH] fix(liquidity): block submit after token resolution failure --- .../components/liquidity/NewPositionForm.qml | 2 ++ apps/amm/tests/qml/tst_NewPositionForm.qml | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/apps/amm/qml/components/liquidity/NewPositionForm.qml b/apps/amm/qml/components/liquidity/NewPositionForm.qml index 3f820e7..1769325 100644 --- a/apps/amm/qml/components/liquidity/NewPositionForm.qml +++ b/apps/amm/qml/components/liquidity/NewPositionForm.qml @@ -114,6 +114,8 @@ AmmActionCard { && !root.quoteStale && !root.submitting && !root.poolCreationPending + && !root.resolvingToken + && root.tokenResolutionError.length === 0 && root.walletCanSubmit && (!root.activePool || root.hasActivePoolDepositInput) diff --git a/apps/amm/tests/qml/tst_NewPositionForm.qml b/apps/amm/tests/qml/tst_NewPositionForm.qml index 5842ef3..1d74299 100644 --- a/apps/amm/tests/qml/tst_NewPositionForm.qml +++ b/apps/amm/tests/qml/tst_NewPositionForm.qml @@ -393,6 +393,37 @@ TestCase { compare(amountBInput.tokenInvalid, true) } + function test_tokenResolutionBlocksStaleQuoteSubmission() { + var form = createForm() + form.flowState = flowState({ + "schema": "new-position.v2", + "status": "ok", + "canSubmit": true, + "tokenAId": tokenLow, + "tokenBId": tokenHigh, + "poolStatus": "active_pool", + "quoteHash": "sha256:stale-quote", + "reserveARaw": "3", + "reserveBRaw": "2000000", + "actualAmountARaw": "3", + "actualAmountBRaw": "2000000" + }) + form.amountA = "1" + form.amountB = "1" + wait(0) + + verify(form.canConfirm) + + form.resolveToken("A", tokenThird) + compare(form.resolvingTokenId, tokenThird) + verify(!form.canConfirm) + + form.failTokenResolution("token_definition_unreadable") + compare(form.selectedTokenAId, tokenLow) + verify(form.tokenResolutionError.length > 0) + verify(!form.canConfirm) + } + function test_staleMissingPoolQuoteDoesNotReplaceDraft() { var quote = { "status": "ok",