Files
VaryaandGitHub d6d949b537 fix(e2e): Argos Visual Regression tests (#8488)
* chore: reduce repetitive tests; remove tests for unreachable pages

* chore: merge all tests for Settings tabs into one file to avoid setup repetition

* feat: add a test for the collapsed sidebar

* feat: fix earn, stake, bridge, swap tests

* fix: Welcome page tests

* fix: NFTs and Positions tests

* fix: spaces tests setup with a real space instead of mocks

* feat: spaces dashboard tests

* feat: new visual tests for Spaces Settings, Secutiry Hub and Activity Log

* chore: removed unused mock files

* feat: add tests for Spaces AB, Members and Safe Accounts in Spaces

* chore: update `COVERAGE.md` for visual regression tests
2026-08-12 10:41:46 +02:00

15 KiB

Visual Test Coverage Report

Maintenance: This file is manually maintained. Update it when adding, removing, or changing visual test files in e2e/visual/. Cross-reference with .storybook/COVERAGE.md for component-level gaps.

53 tests across 31 test files — each test captures an Argos screenshot automatically.

Screenshots are captured via a global afterEach hook in cypress/support/e2e.js.

Covered pages

Page Test file Tests Mocked? Wallet?
/welcome/accounts welcome.cy.js 1 No No
/welcome/spaces (signed-out) welcome.cy.js 1 No No
/home dashboard.cy.js 1 Yes No
/balances balances.cy.js 2 No No
/balances/nfts nfts.cy.js 1 Yes No
/balances/positions positions.cy.js 1 No No
/address-book address_book.cy.js 2 No No
/transactions/queue tx_queue.cy.js 2 Yes No
/transactions/history tx_history.cy.js 1 Yes No
/transactions/tx tx_details.cy.js 1 No No
/transactions/msg msg_details.cy.js 1 Yes No
/settings/setup settings.cy.js 1 No No
/settings/appearance settings.cy.js 1 No No
/settings/modules settings.cy.js 1 No No
/settings/notifications settings.cy.js 1 No No
/settings/data settings.cy.js 1 No No
/settings/security settings.cy.js 1 No No
/settings/cookies settings.cy.js 1 No No
/settings/safe-apps settings.cy.js 1 No No
/settings/environment-variables settings.cy.js 1 No No
/apps safe_apps.cy.js 2 No No
/apps/custom apps_custom.cy.js 1 No No
/new-safe/create new_safe.cy.js 1 No No
/new-safe/load new_safe.cy.js 1 No No
/swap swap.cy.js 1 No No
/bridge bridge.cy.js 1 No No
/stake stake.cy.js 1 No No
/earn earn.cy.js 1 No No
/403 error_pages.cy.js 1 No No
/404 error_pages.cy.js 1 No No
/spaces (dashboard) spaces_dashboard.cy.js 2 No Yes
/spaces/settings/general spaces_settings.cy.js 1 No Yes
/spaces/settings/account spaces_settings.cy.js 1 No Yes
/spaces/settings/about spaces_settings.cy.js 1 No Yes
/spaces/members spaces_members.cy.js 2 No Yes
/spaces/safe-accounts spaces_safe_accounts.cy.js 1 No Yes
/spaces/address-book spaces_address_book.cy.js 1 No Yes
/spaces/activity spaces_activity.cy.js 1 No Yes
/spaces/security spaces_security.cy.js 1 No Yes
Send tx form (modal) create_tx_flow.cy.js 1 No Yes
Add signer form (modal) owner_management.cy.js 1 No Yes
Replace signer dialog (modal) owner_management.cy.js 1 No Yes
Spending limit form (modal) spending_limits.cy.js 3 No Yes
Batch tx modal batch_tx.cy.js 1 No Yes
Sidebar collapsed state sidebar.cy.js 1 No No

Spaces tests sign in with a real wallet (SIWE) against the live backend via support/spaces-login.js — no auth/API mocks. spaces_dashboard.cy.js also covers the send-from modal, and spaces_members.cy.js the pending-invites tab. spaces_address_book.cy.js has 2 additional skipped tests (local + pending contacts tabs).

Gaps — interactive states not yet covered

Cross-referenced from .storybook/COVERAGE.md (823 components). Our page-level screenshots capture the default view of every route, but many components only appear after user interaction (clicks, wallet connection, specific safe states). These are the known gaps, grouped by priority.

P0 — Address book dialogs (3 components)

Currently we screenshot the address book page, but never open any dialogs.

Component How to trigger Wallet? Mocked?
EntryDialog Click "Create entry" button No No
ImportDialog Click "Import" button No No
RemoveDialog Click delete icon on an entry No No

P0 — NFT preview modal (1 component)

We show the NFT grid but never click into one.

Component How to trigger Wallet? Mocked?
NftPreviewModal Click an NFT card No Yes

P0 — Notification center (4 components)

Bell icon in the header — never opened in any test.

Component How to trigger Wallet? Mocked?
NotificationCenter Click bell icon in header No Yes
NotificationCenterList (visible inside panel) No Yes
NotificationCenterItem (visible inside panel) No Yes
NotificationRenewal (visible if renewal needed) No Yes

P1 — Spaces dialogs (3 components)

We cover all spaces pages and the dashboard send-from modal, but never open these creation/management dialogs.

Component How to trigger Wallet? Mocked?
SpaceCreationModal Click "Create space" on dashboard Yes No
AddMemberModal Click "Invite" on members page Yes No
SpaceInfoModal Click space info icon Yes No

P1 — Sidebar states (14 families, 17 components)

Our tests include the sidebar in every screenshot, but only in its default collapsed state.

Component How to trigger Wallet? Mocked?
QR code modal Click QR button in sidebar header No No
SafeListContextMenu Right-click / click "..." on a safe in list No No
NestedSafesPopover Click nested safes button (needs nested safe) No No
SafeListRemoveDialog Click remove in context menu No No

P1 — Dashboard interactive widgets (3 components)

Dashboard page is screenshotted but some widgets have expandable/interactive states.

Component How to trigger Wallet? Mocked?
AddFundsBanner Only visible with zero-balance safe No No
PendingTxs list Visible when safe has queued transactions No Yes
FirstSteps Visible on newly created safes No No

P2 — Transaction flow modals (57 families, 116 components)

The largest component group. We cover send token (3 states), add/replace owner, and spending limits. The remaining flows are uncovered.

Component How to trigger Wallet? Mocked?
ChangeThreshold Settings → click change threshold Yes No
RemoveOwner Settings → click remove on an owner Yes No
NftTransfer NFTs page → click send on an NFT Yes Yes
RejectTx Queue → click reject on a pending tx Yes Yes
ConfirmTx Queue → click confirm on a pending tx Yes Yes
ExecuteBatch Queue → select multiple txs → execute batch Yes Yes
ConfirmBatch Batch modal → click confirm Yes No
RemoveModule Modules page → click remove on a module Yes No
RemoveGuard Modules page → click remove guard Yes No
RemoveSpendingLimit Settings → click remove on a spending limit Yes No
SignMessage Triggered by dApp via Safe Apps SDK Yes Yes
SignMessageOnChain Triggered by dApp via Safe Apps SDK Yes Yes
SafeAppsTx Triggered by dApp via Safe Apps SDK Yes Yes
UpdateSafe Settings → update safe prompt Yes No
MigrateSafeL2 Settings → migrate to L2 prompt Yes No
SuccessScreen After any tx is signed/executed Yes No
NewTx (chooser) Click "New transaction" button Yes No
CreateNestedSafe Sidebar → create nested safe flow Yes No

P2 — Recovery flows (21 families, 25 components)

Entire recovery feature — requires specific safe configuration with recovery module enabled.

Component How to trigger Wallet? Mocked?
UpsertRecovery Settings → enable recovery module (5 step flow) Yes No
RemoveRecovery Settings → remove recovery module Yes No
RecoverAccount Recovery flow after guardian initiates Yes Yes
RecoveryAttempt Queue → recovery attempt notification Yes Yes
CancelRecovery Queue → cancel ongoing recovery Yes Yes

P2 — Counterfactual / undeployed safes (10 families, 10 components)

Only visible for safes that haven't been deployed on-chain yet.

Component How to trigger Wallet? Mocked?
ActivateAccountFlow Click "Activate" on undeployed safe Yes No
CounterfactualForm Part of activation flow Yes No
CounterfactualSuccessScreen After activation completes Yes No
PayNowPayLater Choice during activation Yes No
FirstTxFlow First transaction on undeployed safe Yes No

P3 — Safe messages signing (13 families, 14 components)

We screenshot the messages list and detail, but not the actual signing flow.

Component How to trigger Wallet? Mocked?
MsgSigners Visible in message detail (partially covered) No Yes
SignMsgOnChainForm dApp triggers on-chain message signing Yes Yes

P3 — WalletConnect (13 families, 17 components)

Requires active WC pairing session — hard to mock in E2E.

Component How to trigger Wallet? Mocked?
WcSessionManager Open WC session manager Yes Yes
WcProposalForm Incoming WC session proposal Yes Yes
WcConnectionForm WC pairing input Yes No

P3 — Hypernative / Safe Shield (18 + 11 families)

Security monitoring features — requires Hypernative integration enabled.

Component How to trigger Wallet? Mocked?
HnSignupFlow Click "Enable" on Hypernative banner (6 comps) Yes Yes
HnDashboardBanner Visible on dashboard if HN not enabled No Yes
HnPendingBanner Visible if HN analysis pending No Yes

P3 — Proposers (1 family, 4 components)

Proposer management — only relevant for safes with proposer role configured.

Component How to trigger Wallet? Mocked?
ProposersList Settings → proposers tab Yes No
AddProposerDialog Click add proposer Yes No
RemoveProposerDialog Click remove on a proposer Yes No

Excluded pages (not testable)

Page Reason
/apps/bookmarked Redirects to /apps
/apps/open Hosts 3rd-party Safe App in iframe
/wc WalletConnect — requires active pairing session
/share/safe-app Redirect/deep link
/addOwner Redirect/deep link
/hypernative/oauth-callback OAuth callback, no visible UI
/index, /transactions/index, /settings/index Redirects