The three suites were skipped since the table rework. What changed under them:
- An account or contact spans three rows (main, total balance, details),
marked from isFirst; the helpers paired rows by two and filtered on a
row class the rows no longer carry. A collapsed details row is hidden,
so rows are read including hidden ones.
- Accounts render one table per account group; the page object reads the
rows of every group table in order, and the sorting fixture keeps its
three accounts in one group, since sorting applies within a group.
- The expand toggle is the row's expand column, not a row-toggle element.
- useAccountInfo reads ownership from the keyring context, which the test
page did not provide, so saving a name did nothing; the page now renders
the real KeyringCtxRoot. The mock api gains consts.system.ss58Prefix.
- Badge popups (react-tooltip v6) render only while hovered; the specs
hover the badge first. The multisig badge needs the isMultisig flag.
- Addresses are shown in full and shortened by css; the fixtures with
shortened addresses are gone.
- The total balance, transferable and locked cards are always shown, as
placeholders without accounts; the specs check that instead of their
absence.
- Checks that needed matchers the runner lacks (not.toHaveLength,
toHaveProperty, toThrow with a contained message) are written against
the DOM directly.
The account, address, sidebar and bounties specs replaced hooks with
jest.mock, which the node:test runner does not have, so all five failed
to load and were excluded from yarn test. They now register mocks with
mock.module from node:test and import the page under test afterwards,
since Node only swaps a module that has not been loaded yet.
- test-support/mocks: mockPageHooks() replaces the hooks a Page reads.
An ES module mock replaces every export, so each mock lists them all
(useBestNumber's useBestNumberRelay included). The real useAccountInfo
is wrapped, typed now, with the fixture identity merged in a typed
helper.
- The page-specific mocks live with their page: useMultisigApprovals in
page-accounts/test, useAddresses in page-addresses/test.
- jest-dom matchers were never registered for this runner; specs and
page elements use assertHasClass, assertTextContent and assertVisible
from test-support, with the same meaning.
- Page's mock api gains apiIdentity, which useAccountInfo reads.
- The bounties voting tooltip renders hidden and fades in, so the spec
waits for it to become visible.
- jest/expect-expect counts the assert* helpers as assertions; the
disable comments that only existed for that are removed.
Create and Bounties run green. Accounts, Addresses and Sidebar load and
stay skipped as upstream left them (their FIXMEs are about the reworked
tables). Needs @pezkuwi/dev 0.86.6 for the module mocks flag and the
fuller browser env.
- yarn.lock refreshed within existing ranges for the open advisories.
- copy-webpack-plugin 11 -> 14 (serialize-javascript 7) and
terser-webpack-plugin 5.6: build:www output is identical except four
chunks where terser now emits `a ?? b` for `null == a ? b : a`.
- testcontainers (page-addresses, test-support) and devtron were never
imported: removed (undici, @fastify/busboy, highlight.js went with
them).
- The crypto-browserify webpack fallback was dead: build:www is
byte-identical without it, so the fallback and the dependency are gone
and a future `crypto` import fails the build instead of shipping a
polyfill.
- braces resolves to @pezkuwi/braces 3.0.4, which limits nesting depth
(CVE-2026-93687; no upstream release).
- dev ^0.86.4 at the root and in packages/apps; directives renamed by
pezkuwi-dev-migrate-eslint10.
- eslint --fix with the 0.86.4 config; one fix broke syntax
(typescript-eslint prefer-optional-chain turned
`(isStarted && onStart) && onStart()` into `(isStarted && onStart?.();`
in TxButton) and is corrected by hand.
- The remaining findings fixed rather than disabled: optional chains
(each suggestion reviewed), `cause` on rethrown errors, `if` instead of
`a && promise` in effects, parallel instead of sequential awaits in
Promise.all, Error rejections, no `delete` on arrays (the storage query
cache is a Map; an upload's file list no longer keeps a hole), no
`[object Object]` stringification (TFunction's second argument is text
or options), dead code removed (referenda's never-shown expand button,
react-query's unused CoreDescriptor).