fix: the wait and error screens show a swap's Permit2 allowance amounts (closes #733)
A swap can give another spender an allowance that its Amount figure leaves out, and these two screens did not show it. Both now show each Permit2 allowance amount under the figure, with the Moved from the sender amounts. movedFromSenderHtml() is now movedOrAllowedHtml(), as it shows both. An amount too long for one line now wraps on these screens, rather than losing its last digits at the screen's edge. Model: opus-5-5
This commit was merged in pull request #737.
This commit is contained in:
@@ -412,3 +412,77 @@ describe("a swap with a Moved from the sender line of its own", () => {
|
||||
expectMovedLine("error-tx-token-note");
|
||||
});
|
||||
});
|
||||
|
||||
// https://git.eeqj.de/sneak/AutistMask/issues/733: a PERMIT2_PERMIT that gives
|
||||
// another spender an unlimited USDC allowance, then a V4 swap of 1 ETH. The
|
||||
// Amount line reads 1.0000 ETH and says nothing of the allowance.
|
||||
describe("a swap that gives another spender an allowance", () => {
|
||||
const OTHER_SPENDER = "0x1111111111111111111111111111111111111111";
|
||||
const MAX_UINT160 = (1n << 160n) - 1n;
|
||||
const SEND_FAILS = {
|
||||
error: "The transaction could not be sent.",
|
||||
retryable: false,
|
||||
};
|
||||
const data = routerIface.encodeFunctionData("execute", [
|
||||
"0x0a10",
|
||||
[
|
||||
coder.encode(
|
||||
[
|
||||
"tuple(tuple(address,uint160,uint48,uint48),address,uint256)",
|
||||
"bytes",
|
||||
],
|
||||
[
|
||||
[[USDC, MAX_UINT160, 0, 0], OTHER_SPENDER, 9999999999n],
|
||||
"0x1234",
|
||||
],
|
||||
),
|
||||
coder.encode(
|
||||
["bytes", "bytes[]"],
|
||||
[
|
||||
new Uint8Array([SWAP_EXACT_IN_SINGLE, SETTLE, TAKE]),
|
||||
[
|
||||
coder.encode(
|
||||
[`tuple(${POOL_KEY},bool,uint128,uint128,bytes)`],
|
||||
[[ETH_USDC_POOL, true, ONE_ETH, 990000n, "0x"]],
|
||||
),
|
||||
settleEth,
|
||||
takeUsdc,
|
||||
],
|
||||
],
|
||||
),
|
||||
],
|
||||
9999999999n,
|
||||
]);
|
||||
|
||||
function expectAllowanceLine(id) {
|
||||
const html = node(id).innerHTML;
|
||||
expect(html).toContain("Permit2 allowance");
|
||||
expect(html).toContain("Unlimited");
|
||||
}
|
||||
|
||||
test("the wait screen shows the allowance under the Amount figure", async () => {
|
||||
await approveSwap(data, { txHash: TX_HASH }, ONE_ETH);
|
||||
expect(node("wait-tx-summary").textContent).toBe("1.0000 ETH");
|
||||
expectAllowanceLine("wait-tx-token-note");
|
||||
});
|
||||
|
||||
test("the error screen shows the allowance under the Amount figure", async () => {
|
||||
await approveSwap(data, SEND_FAILS, ONE_ETH);
|
||||
expect(node("error-tx-summary").textContent).toBe("1.0000 ETH");
|
||||
expectAllowanceLine("error-tx-token-note");
|
||||
});
|
||||
|
||||
test("a reopened popup's wait screen still shows it", async () => {
|
||||
await approveSwap(data, { txHash: TX_HASH }, ONE_ETH);
|
||||
node("wait-tx-token-note").innerHTML = "";
|
||||
txStatus.restoreWait();
|
||||
expectAllowanceLine("wait-tx-token-note");
|
||||
});
|
||||
|
||||
test("a reopened popup's error screen still shows it", async () => {
|
||||
await approveSwap(data, SEND_FAILS, ONE_ETH);
|
||||
node("error-tx-token-note").innerHTML = "";
|
||||
txStatus.renderError();
|
||||
expectAllowanceLine("error-tx-token-note");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user