fix: a network switch in Settings updates the testnet banner at once (closes #511) #619
@@ -418,6 +418,10 @@ Each group of these assertions records a coverage key and a final case demands
|
|||||||
the exact set, so a section that silently stopped running reddens the suite
|
the exact set, so a section that silently stopped running reddens the suite
|
||||||
instead of quietly shrinking it.
|
instead of quietly shrinking it.
|
||||||
|
|
||||||
|
It also covers the red banner on the Settings screen: switching the network
|
||||||
|
there to Sepolia must put up the `[TESTNET]` banner, and switching back to
|
||||||
|
mainnet must take it down, both while Settings is still on screen.
|
||||||
|
|
||||||
It also covers the confirmation screen, for both a native ETH send and an ERC-20
|
It also covers the confirmation screen, for both a native ETH send and an ERC-20
|
||||||
send: Send disabled while the fee estimate is in flight, enabled once it lands,
|
send: Send disabled while the fee estimate is in flight, enabled once it lands,
|
||||||
the fee block quoting the expected cost and the reserve separately, the distinct
|
the fee block quoting the expected cost and the reserve separately, the distinct
|
||||||
|
|||||||
@@ -128,7 +128,8 @@ function showView(name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create or update the debug/insecure warning banner.
|
// Create or update the debug/insecure warning banner.
|
||||||
// Called on every view switch and after the settings debug toggle changes.
|
// Called on every view switch, after the settings debug toggle changes, and
|
||||||
|
// after a network switch in Settings.
|
||||||
// The banner is shown when the compile-time DEBUG constant is true OR when
|
// The banner is shown when the compile-time DEBUG constant is true OR when
|
||||||
// the user has enabled runtime debug mode via the settings easter egg, OR
|
// the user has enabled runtime debug mode via the settings easter egg, OR
|
||||||
// when the active network is a testnet.
|
// when the active network is a testnet.
|
||||||
|
|||||||
@@ -343,11 +343,13 @@ function init(ctx) {
|
|||||||
// switch request.
|
// switch request.
|
||||||
notify({ type: "AUTISTMASK_NETWORK_CHANGED", chainId: net.chainId });
|
notify({ type: "AUTISTMASK_NETWORK_CHANGED", chainId: net.chainId });
|
||||||
resetRenderedViews();
|
resetRenderedViews();
|
||||||
// Settings itself is brought up to date for the new network here.
|
// Settings itself, and the testnet banner above it, are brought up
|
||||||
|
// to date for the new network here.
|
||||||
markViewRendered("settings");
|
markViewRendered("settings");
|
||||||
$("settings-rpc").value = state.rpcUrl;
|
$("settings-rpc").value = state.rpcUrl;
|
||||||
$("settings-blockscout").value = state.blockscoutUrl;
|
$("settings-blockscout").value = state.blockscoutUrl;
|
||||||
renderTrackedTokens();
|
renderTrackedTokens();
|
||||||
|
updateDebugBanner(state.currentView);
|
||||||
showFlash("Switched to " + net.name + ".");
|
showFlash("Switched to " + net.name + ".");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1824,6 +1824,65 @@ test("the Settings assertions above all ran (#229)", async (env) => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ------------------------------------------------ testnet banner (#511)
|
||||||
|
|
||||||
|
// This suite runs a release build, so the red banner at the top reads
|
||||||
|
// "[TESTNET]" on Sepolia and is absent on mainnet. A network switch in
|
||||||
|
// Settings must change it while Settings is still on screen; it used to
|
||||||
|
// change only when the next screen came up
|
||||||
|
// (https://git.eeqj.de/sneak/AutistMask/issues/511).
|
||||||
|
|
||||||
|
// The banner's text, or null when there is none, once the switch to `net`
|
||||||
|
// has finished. The switch's flash is the last thing its handler does, and
|
||||||
|
// showView() clears the flash, so the banner read while that flash is up is
|
||||||
|
// the one the switch left on the screen it was made from.
|
||||||
|
async function bannerAfterSwitch(page, net) {
|
||||||
|
await page.waitForFunction(
|
||||||
|
(text) => document.getElementById("flash-msg").textContent === text,
|
||||||
|
"Switched to " + net.name + ".",
|
||||||
|
);
|
||||||
|
return page.evaluate(() => {
|
||||||
|
const banner = document.getElementById("debug-banner");
|
||||||
|
return {
|
||||||
|
text: banner === null ? null : banner.textContent,
|
||||||
|
onSettings: !document
|
||||||
|
.getElementById("view-settings")
|
||||||
|
.classList.contains("hidden"),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
test("a network switch in Settings shows and removes the testnet banner at once (#511)", async (env) => {
|
||||||
|
const { mainnet, sepolia } = NETWORKS;
|
||||||
|
await openSettings(env.page);
|
||||||
|
assert(
|
||||||
|
(await env.page.locator("#debug-banner").count()) === 0,
|
||||||
|
"a banner is up on mainnet before the switch",
|
||||||
|
);
|
||||||
|
|
||||||
|
await env.page.selectOption("#settings-network", "sepolia");
|
||||||
|
let after = await bannerAfterSwitch(env.page, sepolia);
|
||||||
|
assert(after.onSettings, "Settings left the screen on the switch");
|
||||||
|
assert(
|
||||||
|
after.text === "[TESTNET]",
|
||||||
|
"after the switch to Sepolia, Settings shows the banner " +
|
||||||
|
JSON.stringify(after.text) +
|
||||||
|
', expected "[TESTNET]"',
|
||||||
|
);
|
||||||
|
|
||||||
|
await env.page.selectOption("#settings-network", "mainnet");
|
||||||
|
after = await bannerAfterSwitch(env.page, mainnet);
|
||||||
|
assert(after.onSettings, "Settings left the screen on the switch back");
|
||||||
|
assert(
|
||||||
|
after.text === null,
|
||||||
|
"after the switch back to mainnet, Settings still shows the banner " +
|
||||||
|
JSON.stringify(after.text),
|
||||||
|
);
|
||||||
|
|
||||||
|
await env.page.click("#btn-settings-back");
|
||||||
|
await visible(env.page, "#view-main");
|
||||||
|
});
|
||||||
|
|
||||||
// ------------------------------------------------ dust threshold (#233)
|
// ------------------------------------------------ dust threshold (#233)
|
||||||
|
|
||||||
// The popup size README documents the UI as designed for. Pages in this
|
// The popup size README documents the UI as designed for. Pages in this
|
||||||
|
|||||||
Reference in New Issue
Block a user