bootPopup() in tests/support/popupBoot.js mocked the three shared
modules that reach the network, but a boot onto the transaction screen
still asked Blockscout for its transaction, and a boot onto the
confirmation screen looked the recipient up on Etherscan, both through
the real fetch(). tests/persistedFieldContract.test.js boots onto both,
so every run sent those requests and logged their answers after its
tests had finished. bootPopup() now replaces fetch() with the throwing
stub the rest of the suite uses, and cleanupPopup() puts it back.
tests/popupBoot.test.js checks that both requests reach the stub.
Model: opus-5-5
tests/support/popupBoot.js recorded every interval the popup sets but left
timeouts alone, so the two-second timer that clears a flash message could fire
after cleanupPopup() had removed the page, throw "document is not defined",
and fail whichever test file the jest worker had moved on to. Timeouts still
run for real during a popup test; the helper now records each one until it
fires or is cleared, and cleanupPopup() clears the ones still pending. The
fake timers tests/firstWalletRefresh.test.js used to hold that timer are
removed. tests/popupBoot.test.js shows a flash message, cleans up, waits past
the flash duration, and fails if anything throws.
Model: opus-5-5