MeshMonitor Test Suite β
Overview β
A comprehensive test suite has been implemented for MeshMonitor using Vitest as the testing framework. The suite covers database operations, API endpoints, and frontend components.
Test Structure β
1. Database Tests (src/services/database.test.ts) β
- Node Operations: CRUD operations for node management
- Message Operations: Message storage and retrieval
- Channel Operations: Channel management functionality
- Telemetry Operations: Telemetry data storage
- Traceroute Operations: Network path tracking
- Cleanup Operations: Data purging functionality
- Favorite Operations: Node favorite status management, sync from NodeInfo protobuf
2. Server API Tests (src/server/server.test.ts) β
- Node Endpoints:
/api/nodes,/api/nodes/active - Message Endpoints: Message sending, retrieval, and filtering
- Channel Endpoints: Channel listing and management
- Statistics Endpoints: System metrics and analytics
- Health Endpoints: System status checks
- Import/Export: Data backup and restore
- Cleanup Endpoints: Data maintenance operations
- Telemetry Endpoints: Telemetry data access
- Traceroute Endpoints: Network analysis operations
3. Component Tests (src/components/TelemetryGraphs.test.tsx) β
- UI rendering tests
- Data fetching behavior
- User interaction handling
- Error state management
- Loading state verification
- Data visualization tests
Running Tests β
# Run all tests once
npm run test:run
# Run tests in watch mode
npm run test
# Run tests with UI
npm run test:ui
# Generate coverage report
npm run test:coverageTesting Stack β
- Framework: Vitest
- React Testing: @testing-library/react
- API Testing: Supertest
- Assertions: @testing-library/jest-dom
- User Events: @testing-library/user-event
Coverage Areas β
Database Layer β
β Node CRUD operations β Message storage and retrieval β Channel management β Telemetry data handling β Traceroute tracking β Data cleanup operations β Favorite node management β NodeInfo protobuf favorite sync
API Layer β
β RESTful endpoints β Error handling β Request validation β Response formatting β Authentication checks β Data export/import
Frontend Components β
β Component rendering β State management β User interactions β Data fetching β Error boundaries β Loading states
Mock Strategy β
The test suite uses comprehensive mocking to ensure tests are isolated and predictable:
- Database Mocking: In-memory SQLite for database tests
- API Mocking: Mock Express app with stubbed database calls
- Network Mocking: Mocked fetch API for component tests
- Component Mocking: Mocked chart libraries to avoid rendering issues
Best Practices Implemented β
- Test Isolation: Each test runs independently
- Descriptive Names: Clear test descriptions
- Arrange-Act-Assert: Consistent test structure
- Error Testing: Both success and failure paths tested
- Edge Cases: Boundary conditions and edge cases covered
- Mocking Strategy: Appropriate mocking at each layer
Future Enhancements β
- Integration Tests: End-to-end testing with real database
- Performance Tests: Load testing for API endpoints
- Snapshot Testing: UI component snapshot tests
- Mutation Testing: Test quality verification
- Security Tests: Authentication and authorization testing
- WebSocket Tests: Real-time communication testing
CI/CD Integration β
The test suite is ready for CI/CD integration:
# Example GitHub Actions workflow
- name: Run Tests
run: npm run test:run
- name: Generate Coverage
run: npm run test:coverage
- name: Upload Coverage
uses: codecov/codecov-action@v3Known Issues β
- Some tests may need adjustment for Node.js version compatibility
- jsdom environment required for component tests
- Database mock may need refinement for complex queries
Maintenance β
Regular test maintenance should include:
- Updating tests when features change
- Adding tests for new features
- Reviewing and updating mocks
- Monitoring test execution time
- Maintaining test coverage above 80%