Files
n8n-mcp/tests/utils/DATABASE_UTILITIES_SUMMARY.md
czlonkowski b5210e5963 feat: add comprehensive performance benchmark tracking system
- 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>
2025-07-28 22:45:09 +02:00

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:

  • TestDatabase
  • TestDatabaseOptions
  • DatabaseSnapshot

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

  1. Always cleanup databases after tests
  2. Use in-memory for unit tests
  3. Use snapshots for complex state management
  4. Keep fixtures versioned with your tests
  5. Test both empty and populated database states

Integration with Existing Code

The utilities work seamlessly with:

  • DatabaseAdapter from the main codebase
  • NodeRepository for node operations
  • TemplateRepository for 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