Files
metamask-integration/docs/INTEGRATION_AND_TESTING.md

143 lines
4.3 KiB
Markdown
Raw Permalink Normal View History

# Integration and Testing
How to build, integrate, and test the MetaMask dual-chain provider, explorer config, token-aggregation API, and Chain 138 Snap. **Default package manager: pnpm.**
---
## Run all (pnpm)
From the repo root or `metamask-integration/`:
```bash
cd metamask-integration
pnpm run run-all
```
Runs: (1) full integration script (provider test + config validation), (2) token-aggregation `pnpm install` + `pnpm run build`, (3) explorer frontend `pnpm install` + `pnpm run build`, (4) Chain 138 Snap install + build (Snap template uses yarn internally).
---
## 1. Provider (Node) integration test
From the repo root (or `metamask-integration/`):
```bash
cd metamask-integration/provider
pnpm exec node test-integration.mjs
# or: node test-integration.mjs
```
Tests chains, tokens, wallet exports, and oracles without `window.ethereum`. Expect: **4 passed, 0 failed**.
---
## 2. Full integration script
Runs provider test + validates explorer config JSONs + optional Explorer API and token-aggregation API:
```bash
cd metamask-integration
pnpm run test:integration
# or: ./scripts/integration-test-all.sh
```
**Optional env (for live API checks):**
- `EXPLORER_API_URL` e.g. `http://localhost:8080` (explorer backend)
- `TOKEN_AGGREGATION_URL` e.g. `http://localhost:3000` (token-aggregation service)
Config files validated from repo: `docs/04-configuration/metamask/DUAL_CHAIN_NETWORKS.json`, `DUAL_CHAIN_TOKEN_LIST.tokenlist.json`.
---
## 3. Explorer API (config endpoints)
Explorer backend serves:
- `GET /api/config/networks` Chain 138 + Ethereum Mainnet + ALL Mainnet params
- `GET /api/config/token-list` Uniswap token list format
To test against a running explorer:
```bash
export EXPLORER_API_URL=http://localhost:8080
./scripts/integration-test-all.sh
```
Explorer backend requires DB; see `explorer-monorepo/backend/` for build/run.
---
## 4. Token-aggregation API
Token-aggregation service (Chain 138 + ALL Mainnet) exposes:
**Note:** The service may have existing TypeScript build issues in `canonical-tokens.ts`; the REST API is documented and can be tested when the service is run (e.g. via Docker or with DB).
- `GET /api/v1/chains` supported chains
- `GET /api/v1/tokens?chainId=138` tokens and market data
- See `smom-dbis-138/services/token-aggregation/docs/REST_API_REFERENCE.md`
To test when the service is running (with DB):
```bash
export TOKEN_AGGREGATION_URL=http://localhost:3000
./scripts/integration-test-all.sh
```
---
## 5. Provider E2E (manual, browser)
Open `metamask-integration/examples/provider-e2e.html` **via a local server** (e.g. `npx serve metamask-integration/examples` or your app) with MetaMask installed.
- **Add chains** adds Chain 138, Ethereum Mainnet, ALL Mainnet
- **Switch chain** 138 / 1 / 651940
- **List tokens** tokens from provider for current chain
- **ETH/USD price** oracle price (requires ethers; loads from esm.sh if needed)
---
## 6. Chain 138 Snap
Snap provides:
- `get_chain138_config` Chain 138 params for `wallet_addEthereumChain`
- `get_chain138_market_chains` fetches `GET {apiBaseUrl}/api/v1/chains` (pass token-aggregation base URL)
- `hello` demo dialog
**Build and run (from repo root):**
```bash
cd metamask-integration/chain138-snap
yarn install
yarn build
yarn start
```
Then install the Snap in MetaMask Flask using the provided site (e.g. `http://localhost:8000`). Invoke from a dapp:
```js
await ethereum.request({
method: 'wallet_invokeSnap',
params: {
snapId: 'YOUR_SNAP_ID',
request: { method: 'get_chain138_config' },
},
});
```
---
## Summary
| Item | Command / location (pnpm default) |
|------|------------------------------------|
| **Run all** | `cd metamask-integration && pnpm run run-all` |
| Provider test | `cd provider && pnpm exec node test-integration.mjs` |
| Full integration | `pnpm run test:integration` or `./scripts/integration-test-all.sh` |
| Explorer config | Validated by script; optional `EXPLORER_API_URL` |
| Token-aggregation | `cd smom-dbis-138/services/token-aggregation && pnpm install && pnpm run build`; optional `TOKEN_AGGREGATION_URL` in script |
| Provider E2E | Serve `examples/provider-e2e.html`, use MetaMask |
| Snap | `chain138-snap`: pnpm install, pnpm run build, pnpm run start (template uses yarn internally); install in Flask |