1 Commits
Author SHA1 Message Date
sneak 46cb40c158 fix: a token lookup that answers after the user left AddToken no longer changes the screen (closes #603)
check / check (push) Canceled after 0s
e2e / e2e-chrome (push) Canceled after 0s
e2e / e2e-firefox (push) Canceled after 0s
When the contract lookup on AddToken answered, the popup always went to AddressDetail, even after the user had opened another screen. The token is still added when the network has not changed. The popup now goes to AddressDetail only when AddToken shows and has not been opened again since Add was pressed. It tells this from state.currentView and from a count of AddToken's openings, as Send does. An answer from an earlier opening leaves the status line as it is. Otherwise the status line is cleared once the token is added, so Back onto AddToken no longer shows "Looking up token...".

Model: opus-5-5
2026-10-27 21:54:11 +00:00
2 changed files with 24 additions and 1 deletions
+1
View File
@@ -117,6 +117,7 @@ function init(ctx) {
? detail
: "Could not add the token.",
);
if (addTokenScreenOpenings !== opening) return;
infoEl.textContent = "";
infoEl.style.visibility = "hidden";
}
+23 -1
View File
@@ -75,7 +75,7 @@ test("an answer after the user opened Settings adds the token and Settings stays
expect(boot.storage.read("autistmask").trackedTokens).toEqual([TOKEN]);
});
test("Back onto AddToken after that answer shows no lookup status", async () => {
test("Back from Settings onto AddToken after the lookup answered shows no lookup status", async () => {
const boot = await openAddToken();
const answerLookup = addWithPendingLookup(boot);
expect(boot.text("add-token-info")).toBe("Looking up token...");
@@ -104,6 +104,28 @@ test("an answer after AddToken was opened again adds the token and leaves AddTok
expect(boot.storage.read("autistmask").trackedTokens).toEqual([TOKEN]);
});
test("a lookup that fails after AddToken was opened again leaves the status line as it is", async () => {
const boot = await openAddToken();
const { lookupTokenInfo } = require("../src/shared/balances");
let failFirstLookup;
lookupTokenInfo.mockImplementationOnce(
() =>
new Promise((_, reject) => {
failFirstLookup = reject;
}),
);
const firstAdd = boot.click("btn-add-token-confirm");
await boot.click("btn-add-token-back");
await boot.click("btn-add-token");
boot.node("add-token-address").value = OTHER_TOKEN_ADDRESS;
// The second lookup is never answered.
addWithPendingLookup(boot);
failFirstLookup(new Error("lookup failed"));
await firstAdd;
expect(boot.text("add-token-info")).toBe("Looking up token...");
});
test("an answer while AddToken still shows goes to AddressDetail with the token listed", async () => {
const boot = await openAddToken();
const answerLookup = addWithPendingLookup(boot);