7.5 KiB
7.5 KiB
Testing Guide - DBIS Core Lite
Overview
This document describes the comprehensive test suite for the DBIS Core Lite payment processing system. The test suite ensures functionality, compliance, and security requirements are met.
Test Structure
tests/
├── unit/ # Unit tests for individual components
│ ├── repositories/ # Repository layer tests
│ ├── services/ # Service layer tests
│ └── ...
├── integration/ # Integration tests for API endpoints
├── compliance/ # Compliance and regulatory tests
│ ├── screening/ # Sanctions/PEP screening
│ └── dual-control/ # Maker/Checker enforcement
├── security/ # Security tests
│ ├── authentication/ # Auth and JWT tests
│ └── rbac/ # Role-based access control
├── validation/ # Input validation tests
├── e2e/ # End-to-end workflow tests
└── utils/ # Test utilities and helpers
Test Categories
1. Unit Tests
Repositories (tests/unit/repositories/)
- PaymentRepository - CRUD operations, idempotency, status updates
- MessageRepository - ISO message storage and retrieval
- OperatorRepository - Operator management
- SettlementRepository - Settlement tracking
Services (tests/unit/services/)
- MessageService - ISO 20022 message generation and validation
- TransportService - TLS message transmission
- LedgerService - Account posting and fund reservation
- ScreeningService - Compliance screening
2. Compliance Tests (tests/compliance/)
Screening Tests
- Sanctions list checking
- PEP (Politically Exposed Person) screening
- BIC sanctions validation
- Screening result storage and retrieval
Dual Control Tests
- Maker/Checker separation enforcement
- Role-based approval permissions
- Payment status validation
- Same-operator prevention
3. Security Tests (tests/security/)
Authentication Tests
- Credential verification
- JWT token generation and validation
- Password hashing
- Token expiration handling
RBAC Tests
- Role-based endpoint access
- MAKER role restrictions
- CHECKER role restrictions
- ADMIN role privileges
- Dual control enforcement
4. Validation Tests (tests/validation/)
Payment Validation
- Required field validation
- Amount validation (positive, precision)
- Currency validation
- BIC format validation (BIC8/BIC11)
- Account format validation
- Optional field handling
5. Integration Tests (tests/integration/)
API Endpoint Tests
- Authentication endpoints
- Payment workflow endpoints
- Operator management endpoints
- Error handling
- Request validation
6. E2E Tests (tests/e2e/)
Payment Flow Tests
- Complete payment lifecycle
- Maker initiation → Checker approval → Processing
- Compliance screening → Ledger posting → Message generation
- Transmission → ACK → Settlement
Running Tests
Run All Tests
npm test
Run Specific Test Suite
npm test -- tests/unit/repositories
npm test -- tests/compliance
npm test -- tests/security
Run with Coverage
npm run test:coverage
Run in Watch Mode
npm run test:watch
Run Single Test File
npm test -- payment-repository.test.ts
Test Environment Setup
Prerequisites
- PostgreSQL test database
- Test database URL:
TEST_DATABASE_URLenvironment variable - Default:
postgresql://postgres:postgres@localhost:5432/dbis_core_test
Test Database Setup
# Create test database
createdb dbis_core_test
# Run migrations on test database
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dbis_core_test npm run migrate
Environment Variables
NODE_ENV=test
JWT_SECRET=test-secret-key-for-testing-only
TEST_DATABASE_URL=postgresql://postgres:postgres@localhost:5432/dbis_core_test
Test Utilities
TestHelpers Class
Located in tests/utils/test-helpers.ts:
getTestDb()- Get test database connectioncleanDatabase()- Truncate test tablescreateTestOperator()- Create test operator with specified rolegenerateTestToken()- Generate JWT token for testingcreateTestPaymentRequest()- Create valid payment request objectsleep()- Utility for async test delays
Test Coverage Goals
Current Coverage Targets
- Unit Tests: >80% coverage
- Integration Tests: >70% coverage
- Critical Paths: 100% coverage
- Payment workflow
- Compliance screening
- Authentication/Authorization
- Message generation
- Ledger operations
Critical Components Requiring 100% Coverage
- Payment workflow orchestration
- Compliance screening engine
- Authentication and authorization
- Dual control enforcement
- ISO 20022 message generation
- Audit logging
Compliance Testing Requirements
Regulatory Compliance
- Sanctions Screening: Must test OFAC, EU, UK sanctions lists
- PEP Screening: Must test PEP database queries
- Dual Control: Must enforce Maker/Checker separation
- Audit Trail: Must log all payment events
- Data Integrity: Must validate all payment data
Banking Standards
- ISO 20022 Compliance: Message format validation
- BIC Validation: Format and checksum validation
- Transaction Limits: Amount and frequency limits
- Settlement Finality: Credit confirmation tracking
Security Testing Requirements
Authentication
- ✅ Password hashing (bcrypt)
- ✅ JWT token generation and validation
- ✅ Token expiration
- ✅ Credential verification
Authorization
- ✅ RBAC enforcement
- ✅ Role-based endpoint access
- ✅ Dual control separation
- ✅ Permission validation
Input Validation
- ✅ SQL injection prevention
- ✅ XSS prevention
- ✅ Input sanitization
- ✅ Schema validation
Continuous Integration
CI/CD Integration
Tests should run automatically on:
- Pull requests
- Commits to main/master
- Pre-deployment checks
Test Execution in CI
# Example GitHub Actions
- name: Run Tests
run: |
npm test
npm run test:coverage
Test Data Management
Test Data Isolation
- Each test suite cleans up after itself
- Tests use unique identifiers to avoid conflicts
- Database truncation between test runs
Test Operators
- Created with predictable IDs for consistency
- Roles: MAKER, CHECKER, ADMIN
- Password: Standard test password (configurable)
Best Practices
- Test Isolation: Each test should be independent
- Clean State: Clean database before/after tests
- Mocking: Mock external services (ledger, TLS)
- Assertions: Use descriptive assertions
- Test Names: Clear, descriptive test names
- Coverage: Aim for high coverage but focus on critical paths
Troubleshooting
Common Issues
-
Database Connection Errors
- Verify TEST_DATABASE_URL is set
- Check PostgreSQL is running
- Verify database exists
-
Test Timeouts
- Increase Jest timeout for slow tests
- Check for hanging database connections
-
Fixture Data Issues
- Ensure database is cleaned between tests
- Use unique identifiers for test data
Next Steps
- Add service layer unit tests
- Enhance E2E tests with real workflow scenarios
- Add performance/load tests
- Add contract tests for external integrations
- Add chaos engineering tests for resilience
Last Updated: 2025-12-28 Test Framework: Jest Coverage Tool: Jest Coverage