- Create benchmark test suites for critical operations: - Node loading performance - Database query performance - Search operations performance - Validation performance - MCP tool execution performance - Add GitHub Actions workflow for benchmark tracking: - Runs on push to main and PRs - Uses github-action-benchmark for historical tracking - Comments on PRs with performance results - Alerts on >10% performance regressions - Stores results in GitHub Pages - Create benchmark infrastructure: - Custom Vitest benchmark configuration - JSON reporter for CI results - Result formatter for github-action-benchmark - Performance threshold documentation - Add supporting utilities: - SQLiteStorageService for benchmark database setup - MCPEngine wrapper for testing MCP tools - Test factories for generating benchmark data - Enhanced NodeRepository with benchmark methods - Document benchmark system: - Comprehensive benchmark guide in docs/BENCHMARKS.md - Performance thresholds in .github/BENCHMARK_THRESHOLDS.md - README for benchmarks directory - Integration with existing test suite The benchmark system will help monitor performance over time and catch regressions before they reach production. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
4.0 KiB
4.0 KiB
Database Testing Utilities Summary
Overview
We've created comprehensive database testing utilities for the n8n-mcp project that provide a complete toolkit for database-related testing scenarios.
Created Files
1. /tests/utils/database-utils.ts
The main utilities file containing:
- createTestDatabase() - Creates test databases (in-memory or file-based)
- seedTestNodes() - Seeds test node data
- seedTestTemplates() - Seeds test template data
- createTestNode() - Factory for creating test nodes
- createTestTemplate() - Factory for creating test templates
- resetDatabase() - Clears and reinitializes database
- createDatabaseSnapshot() - Creates database state snapshots
- restoreDatabaseSnapshot() - Restores from snapshots
- loadFixtures() - Loads data from JSON fixtures
- dbHelpers - Collection of common database operations
- createMockDatabaseAdapter() - Creates mock adapter for unit tests
- withTransaction() - Transaction testing helper
- measureDatabaseOperation() - Performance measurement helper
2. /tests/unit/utils/database-utils.test.ts
Comprehensive unit tests covering all utility functions with 22 test cases.
3. /tests/fixtures/database/test-nodes.json
Example fixture file showing the correct format for nodes and templates.
4. /tests/examples/using-database-utils.test.ts
Practical examples showing how to use the utilities in real test scenarios.
5. /tests/integration/database-integration.test.ts
Integration test examples demonstrating complex database operations.
6. /tests/utils/README.md
Documentation explaining how to use the database utilities.
Key Features
1. Flexible Database Creation
// In-memory for unit tests (fast, isolated)
const testDb = await createTestDatabase();
// File-based for integration tests
const testDb = await createTestDatabase({
inMemory: false,
dbPath: './test.db'
});
2. Easy Data Seeding
// Seed with defaults
await seedTestNodes(testDb.nodeRepository);
// Seed with custom data
await seedTestNodes(testDb.nodeRepository, [
{ nodeType: 'custom.node', displayName: 'Custom' }
]);
3. State Management
// Create snapshot
const snapshot = await createDatabaseSnapshot(testDb.adapter);
// Do risky operations...
// Restore if needed
await restoreDatabaseSnapshot(testDb.adapter, snapshot);
4. Fixture Support
// Load complex scenarios from JSON
await loadFixtures(testDb.adapter, './fixtures/scenario.json');
5. Helper Functions
// Common operations
dbHelpers.countRows(adapter, 'nodes');
dbHelpers.nodeExists(adapter, 'node-type');
dbHelpers.getAllNodeTypes(adapter);
dbHelpers.clearTable(adapter, 'templates');
TypeScript Support
All utilities are fully typed with proper interfaces:
TestDatabaseTestDatabaseOptionsDatabaseSnapshot
Performance Considerations
- In-memory databases for unit tests (milliseconds)
- File-based databases for integration tests
- Transaction support for atomic operations
- Performance measurement utilities included
Best Practices
- Always cleanup databases after tests
- Use in-memory for unit tests
- Use snapshots for complex state management
- Keep fixtures versioned with your tests
- Test both empty and populated database states
Integration with Existing Code
The utilities work seamlessly with:
DatabaseAdapterfrom the main codebaseNodeRepositoryfor node operationsTemplateRepositoryfor template operations- All existing database schemas
Testing Coverage
- ✅ All utilities have comprehensive unit tests
- ✅ Integration test examples provided
- ✅ Performance testing included
- ✅ Transaction testing supported
- ✅ Mock adapter for isolated unit tests
Usage in CI/CD
The utilities support:
- Parallel test execution (isolated databases)
- Consistent test data across runs
- Fast execution with in-memory databases
- No external dependencies required