Skip to content

feat(storybook): ProviderResult visual testing with Storybook screenshots - #172

Merged
Gaubee merged 10 commits into
mainfrom
feat/provider-compare-storybook
Jan 6, 2026
Merged

Gaubee merged 10 commits into
mainfrom
feat/provider-compare-storybook

Conversation

@Gaubee

@Gaubee Gaubee commented Jan 6, 2026

Copy link
Copy Markdown
Contributor

Summary

实现 ProviderResult 类型系统的 Storybook 视觉测试,覆盖四条链的资产和交易列表场景。

Changes

新增功能

  • Storybook Visual Testing: 14 个截图测试用例
    • 4 链 × (Assets + Transactions) = 8 个正常数据场景
    • 4 链 × Fallback Warning = 4 个警告场景
    • 2 个混合场景(Partial Fallback, Empty But Supported)

Mock 数据

基于真实 API 响应创建的交易数据:

  • Bitcoin: mempool.space 格式
  • Ethereum: Etherscan 格式
  • Tron: TronGrid 格式
  • Binance: BSCScan 格式

配置更新

  • playwright.storybook.config.ts: Mobile-Chrome (393x851)
  • 截图目录: storybook-e2e/__screenshots__/Mobile-Chrome/

文档

  • 新增: docs/white-book/08-测试篇/03-Playwright配置/storybook-visual-testing.md

Testing

# Storybook 交互测试
pnpm test:storybook

# Storybook 截图测试
pnpm build-storybook
npx playwright test --config=playwright.storybook.config.ts

Screenshots

截图位于 storybook-e2e/__screenshots__/Mobile-Chrome/:

  • *-normal-assets.png - 资产列表
  • *-normal-transactions.png - 交易列表
  • *-fallback-warning.png - Provider 降级警告

Gaubee added 10 commits January 6, 2026 16:46
…-only configs

- Add getNativeBalance() method to EtherscanProvider
- Use Blockscout/Etherscan API balance endpoint (?module=account&action=balance)
- Fix ethereum-blockscout-only panel showing no assets in Storybook comparison
- Add test to verify blockscout-v1 provider balance support
- Cache balance queries for 30s with proper invalidation tags
…nguish fallback from empty data

BREAKING CHANGE: ChainProvider query methods now return ProviderResult<T> instead of raw data

- Add ProviderResult<T> type with { supported, data, reason? } structure
- ChainProvider.getNativeBalance/getTokenBalances/getTransactionHistory now return ProviderResult
- isSupported() type guard to check if query succeeded
- ProviderFallbackWarning component shows yellow warning when all providers fail
- UI components display fallback warning when supported: false

Files changed:
- src/types/provider-result.ts (new)
- src/components/common/provider-fallback-warning.tsx (new)
- src/services/chain-adapter/providers/chain-provider.ts
- src/services/chain-adapter/providers/types.ts
- src/components/wallet/wallet-address-portfolio-*.tsx
- src/queries/use-address-*.ts
- src/hooks/use-send.web3.ts
- src/stores/wallet.ts
- src/services/transaction/web.ts
- src/pages/address-transactions/index.tsx
- All related tests updated
Screenshots captured via Playwright E2E:
- 01-default-normal-data.png: Normal state with tokens/transactions
- 02-fallback-warning-tokens-tab.png: Yellow warning when providers fail (tokens)
- 03-fallback-warning-transactions-tab.png: Yellow warning (transactions tab)
- 04-empty-no-warning.png: Empty data WITHOUT warning (providers ok)
- 05-loading-state.png: Skeleton loading state
- 06-compare-providers-full.png: Real provider comparison across chains
- Add script to collect real provider data from Storybook addresses
- Create provider-fallback-warning.mock.spec.ts with fixtures-based tests
- Generate screenshots to e2e/__screenshots__/ per best practices
- Remove manually created screenshots/ directory

Fixtures collected from:
- Ethereum: Vitalik address (23.68 ETH)
- Bitcoin: Satoshi address (54.46 BTC)
- Tron: 163,377 TRX
- Binance: BSC address
- Configure playwright.storybook.config.ts for Mobile-Chrome (393x851)
- Add screenshots to storybook-e2e/__screenshots__/Mobile-Chrome/
- Create Storybook visual testing best practices doc
- Add provider-fallback-warning.spec.ts with 10 test cases
- Update white-book test chapter index
- Remove e2e/provider-fallback-warning.mock.spec.ts (migrated to storybook-e2e)
- Update collect-provider-fixtures.mjs with Etherscan V2 API
- Add mock transaction data based on real API responses:
  - Bitcoin (mempool.space): 4 transactions with real txids
  - Ethereum: 3 transactions (send/receive ETH/USDC)
  - Tron (TronGrid): 3 transactions with real format
  - Binance: 2 transactions
- Update stories to use new mock transaction arrays
- Expand storybook-e2e tests from 10 to 14 cases:
  - 4 chains x 2 (Assets + Transactions) for normal data
  - 4 chains x Fallback Warning
  - 2 mixed scenarios (Partial Fallback, Empty But Supported)
- Rename screenshots: *-normal-data.png -> *-normal-assets.png
@Gaubee
Gaubee merged commit c1a6050 into main Jan 6, 2026
5 checks passed
@Gaubee
Gaubee deleted the feat/provider-compare-storybook branch January 6, 2026 10:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant