- Created .gitignore to exclude sensitive files and directories. - Added API documentation in API_DOCUMENTATION.md. - Included deployment instructions in DEPLOYMENT.md. - Established project structure documentation in PROJECT_STRUCTURE.md. - Updated README.md with project status and team information. - Added recommendations and status tracking documents. - Introduced testing guidelines in TESTING.md. - Set up CI workflow in .github/workflows/ci.yml. - Created Dockerfile for backend and frontend setups. - Added various service and utility files for backend functionality. - Implemented frontend components and pages for user interface. - Included mobile app structure and services. - Established scripts for deployment across multiple chains.
4.5 KiB
4.5 KiB
ASLE Testing Guide
Overview
This document outlines the testing strategy and test structure for the ASLE project.
Smart Contract Testing
Foundry Tests
All smart contract tests are written in Solidity using Foundry.
Location: contracts/test/
Running Tests
cd contracts
forge test # Run all tests
forge test -vvv # Verbose output
forge test --match-path test/LiquidityFacet.t.sol # Specific test file
forge test --match-test testCreatePool # Specific test
Test Coverage
Run coverage:
forge coverage
Test Files Structure
Diamond.t.sol- Diamond deployment and facet managementLiquidityFacet.t.sol- PMM pool creation and operationsVaultFacet.t.sol- ERC-4626 and ERC-1155 vault testsComplianceFacet.t.sol- Compliance mode and KYC/AML testsCCIPFacet.t.sol- Cross-chain messaging testsGovernanceFacet.t.sol- Proposal and voting testsSecurityFacet.t.sol- Pause and circuit breaker testsRWAFacet.t.sol- RWA tokenization testsIntegration.t.sol- Multi-facet interaction testsmocks/- Mock contracts for testing
Writing Tests
Example test structure:
contract MyFacetTest is Test {
Diamond public diamond;
MyFacet public facet;
function setUp() public {
// Setup diamond and facets
}
function testMyFunction() public {
// Test implementation
assertEq(result, expected);
}
}
Backend Testing
Unit Tests
Location: backend/src/__tests__/
Run tests:
cd backend
npm test
npm test -- --coverage
Test Structure
services/- Service unit testsapi/- API route testsmiddleware/- Middleware testsutils/- Utility function tests
Example Test
import { ComplianceService } from '../services/compliance';
describe('ComplianceService', () => {
it('should verify KYC', async () => {
const service = new ComplianceService(provider, diamondAddress);
const result = await service.verifyKYC(userAddress);
expect(result.verified).toBe(true);
});
});
Integration Tests
Test API endpoints:
npm run test:integration
Frontend Testing
Component Tests
Location: frontend/__tests__/
Run tests:
cd frontend
npm test
npm test -- --coverage
Testing Stack
- Jest for unit tests
- React Testing Library for component tests
- Playwright for E2E tests
Example Component Test
import { render, screen } from '@testing-library/react';
import { PoolCreator } from '../components/PoolCreator';
describe('PoolCreator', () => {
it('renders form fields', () => {
render(<PoolCreator />);
expect(screen.getByLabelText('Base Token Address')).toBeInTheDocument();
});
});
E2E Tests
Run E2E tests:
npm run test:e2e
E2E tests cover complete user workflows:
- Wallet connection
- Pool creation
- Vault deposit
- Governance voting
Test Data
Mock Data
- Contract mocks in
contracts/test/mocks/ - API mocks in
backend/src/__tests__/mocks/ - Frontend mocks in
frontend/__tests__/mocks/
Fixtures
Test fixtures and sample data are organized by domain:
- Pool fixtures
- Vault fixtures
- Compliance fixtures
- Transaction fixtures
Continuous Integration
All tests run automatically on:
- Pull requests
- Pushes to main/develop branches
- Scheduled daily runs
See .github/workflows/ci.yml for CI configuration.
Test Coverage Goals
- Smart Contracts: >90%
- Backend Services: >80%
- Backend API: >70%
- Frontend Components: >70%
- E2E: Critical paths 100%
Debugging Tests
Foundry
forge test --debug testMyFunction
forge test -vvvv # Maximum verbosity
Backend
npm test -- --verbose
npm test -- --grep "pattern"
Frontend
npm test -- --verbose
npm test -- --watch
Performance Testing
Load testing for API:
cd backend
npm run test:load
Contract gas optimization tests:
cd contracts
forge snapshot
Security Testing
Run security checks:
# Smart contracts
cd contracts
slither . # If installed
# Dependencies
npm audit
Best Practices
- Isolation: Each test should be independent
- Cleanup: Reset state between tests
- Naming: Clear, descriptive test names
- Coverage: Aim for high coverage but focus on critical paths
- Speed: Keep tests fast, use mocks where appropriate
- Maintainability: Keep tests simple and readable