Files
metamask-integration/docs/TESTING_GUIDE.md
2026-03-02 12:14:14 -08:00

5.5 KiB

Smart Accounts Testing Guide

Date: 2026-01-26
Network: ChainID 138 (SMOM-DBIS-138)


Overview

This guide explains how to test Smart Accounts Kit integration on ChainID 138.


Test Structure

Unit Tests (Foundry)

Located in test/smart-accounts/:

test/smart-accounts/
├── AccountWalletRegistryExtendedTest.t.sol  # Extended registry tests
└── (Additional test files to be created)

Integration Tests (TypeScript/JavaScript)

Located in test/:

test/
└── smart-accounts-integration.test.ts  # Integration tests

Running Tests

Unit Tests (Foundry)

# Run all Smart Accounts tests
forge test --match-path test/smart-accounts/** -vv

# Run specific test file
forge test --match-path test/smart-accounts/AccountWalletRegistryExtendedTest.t.sol -vv

# Run with gas reporting
forge test --match-path test/smart-accounts/** --gas-report

# Run with coverage
forge coverage --match-path test/smart-accounts/**

Integration Tests

# Install dependencies
npm install

# Run integration tests
npm test

# Run with coverage
npm test -- --coverage

Test Categories

1. Unit Tests

AccountWalletRegistryExtended:

  • Link smart account
  • Check if smart account
  • Support both EOA and smart accounts
  • Role-based access control
  • Factory and EntryPoint configuration

Run:

forge test --match-contract AccountWalletRegistryExtendedTest -vv

2. Integration Tests

Smart Account Creation:

  • Create smart account
  • Create with salt
  • Verify address format

Delegation:

  • Request delegation
  • Check delegation status
  • Revoke delegation
  • Test expiry

Advanced Permissions:

  • Request permission
  • Check permission
  • Revoke permission

User Operations:

  • Batch operations
  • Execute batch
  • Gas estimation

Run:

npm test -- smart-accounts-integration

3. End-to-End Tests

Complete Flows:

  • Create smart account → Link to fiat account → Use for payment rails
  • Create smart account → Grant delegation → dApp executes transactions
  • Create smart account → Grant permissions → Execute functions

Run:

npm test -- e2e

Writing Tests

Foundry Test Example

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import {Test} from "forge-std/Test.sol";
import {AccountWalletRegistryExtended} from "../../contracts/smart-accounts/AccountWalletRegistryExtended.sol";

contract MyTest is Test {
    AccountWalletRegistryExtended public registry;
    
    function setUp() public {
        // Setup test environment
        registry = new AccountWalletRegistryExtended(...);
    }
    
    function test_myFunction() public {
        // Arrange
        // Act
        // Assert
    }
}

Integration Test Example

import { SmartAccountsKit } from '@metamask/smart-accounts-kit';

describe('My Feature', () => {
  it('should work correctly', async () => {
    const kit = new SmartAccountsKit({ ... });
    const result = await kit.someFunction();
    expect(result).toBeDefined();
  });
});

Test Data

Test Addresses

const TEST_ADDRESSES = {
  admin: '0x...',
  accountManager: '0x...',
  smartAccountFactory: '0x...',
  entryPoint: '0x...',
  testUser: '0x...',
  testSmartAccount: '0x...',
};

Test Configuration

const TEST_CONFIG = {
  chainId: 138,
  rpcUrl: process.env.RPC_URL_138 || 'http://192.168.11.211:8545',
  entryPointAddress: process.env.ENTRY_POINT || '0x...',
  accountFactoryAddress: process.env.ACCOUNT_FACTORY || '0x...',
};

Test Coverage Goals

Unit Tests

  • AccountWalletRegistryExtended: 100%
  • Smart Account creation: 90%+
  • Delegation framework: 90%+
  • Advanced Permissions: 90%+

Integration Tests

  • Smart Account creation: 100%
  • Delegation flows: 100%
  • Permission flows: 100%
  • User operations: 100%

End-to-End Tests

  • Complete payment rail flow: 100%
  • Complete dApp interaction flow: 100%
  • Hybrid EOA + smart account flow: 100%

Continuous Integration

GitHub Actions Example

name: Smart Accounts Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: foundry-actions/setup-foundry@v1
      - run: forge test --match-path test/smart-accounts/**
      - run: npm test

Debugging Tests

Foundry Debugging

# Run with maximum verbosity
forge test --match-path test/smart-accounts/** -vvvv

# Run specific test
forge test --match-test test_linkSmartAccount -vvvv

# Use debugger
forge test --debug test_linkSmartAccount

Integration Test Debugging

# Run with debug output
DEBUG=* npm test

# Run single test
npm test -- --testNamePattern="should create smart account"

Best Practices

1. Test Isolation

  • Each test should be independent
  • Use setUp() for common setup
  • Clean up after tests

2. Test Coverage

  • Aim for 90%+ coverage
  • Test happy paths
  • Test error cases
  • Test edge cases

3. Test Naming

  • Use descriptive names
  • Follow pattern: test_<functionality>
  • Group related tests

4. Assertions

  • Use specific assertions
  • Check return values
  • Verify events emitted
  • Check state changes

Resources


Last Updated: 2026-01-26