fix: Home's list drops the previous network's rows after a network switch (closes #718)
A network switch left the previous network's rows or failure message in Home's list until the new network's answer landed. Home now replaces them with "Loading..." when it first draws on a new network. A redraw on the same network keeps its rows. Home, AddressDetail and AddressToken compared the page's network before reading storage. A switch made in Settings could change the page during that read, and the answer was still drawn. They now compare after the read, for an answer and for a failure. Model: opus-5-5
This commit was merged in pull request #738.
This commit is contained in:
@@ -137,6 +137,60 @@ test.each([
|
||||
expect(page.text("total-value")).toBe("0.0000 SepoliaETH");
|
||||
});
|
||||
|
||||
// A request on Ethereum Mainnet fails, so Home's list holds the failure message.
|
||||
// The list shows it neither before nor after Sepolia's answer lands.
|
||||
test.each([
|
||||
{
|
||||
how: "saved by the background",
|
||||
switchToSepolia: (page) => backgroundSwitch(page, "sepolia"),
|
||||
},
|
||||
{
|
||||
how: "made in Settings",
|
||||
switchToSepolia: async (page) => {
|
||||
await page.click("btn-settings");
|
||||
const select = page.node("settings-network");
|
||||
select.value = "sepolia";
|
||||
for (const fn of select.listeners.change) await fn();
|
||||
await page.settle();
|
||||
await page.click("btn-settings-back");
|
||||
},
|
||||
},
|
||||
])(
|
||||
"Home's list drops the previous network's message after a switch $how",
|
||||
async ({ switchToSepolia }) => {
|
||||
const page = await bootPopup(
|
||||
unversionedValidProfile({ useBlockscout: true }),
|
||||
);
|
||||
const {
|
||||
fetchRecentTransactions,
|
||||
} = require("../src/shared/transactions");
|
||||
fetchRecentTransactions.mockRejectedValueOnce(
|
||||
new Error("Blockscout is down"),
|
||||
);
|
||||
await page.tick();
|
||||
expect(page.node("home-tx-list").innerHTML).toContain(
|
||||
"Failed to load transactions.",
|
||||
);
|
||||
|
||||
let land;
|
||||
fetchRecentTransactions.mockImplementationOnce(
|
||||
() =>
|
||||
new Promise((resolve) => {
|
||||
land = () => resolve([]);
|
||||
}),
|
||||
);
|
||||
await switchToSepolia(page);
|
||||
expect(page.visibleViews()).toEqual(["main"]);
|
||||
expect(page.node("home-tx-list").innerHTML).toContain("Loading...");
|
||||
|
||||
land();
|
||||
await page.settle();
|
||||
expect(page.node("home-tx-list").innerHTML).toContain(
|
||||
"No transactions found.",
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
// The report of the switch's own save names the network the page already has.
|
||||
test("a switch in Settings is not taken a second time when its save is reported", async () => {
|
||||
const page = await bootOnAddress();
|
||||
|
||||
Reference in New Issue
Block a user