# Mock System Documentation ## Overview The `move-cross-tag.test.js` file has been refactored to use a focused, maintainable mock system that addresses the brittleness and complexity of the original implementation. ## Key Improvements ### 1. **Focused Mocking** - **Before**: Mocked 20+ modules, many irrelevant to cross-tag functionality - **After**: Only mocks 5 core modules actually used in cross-tag moves ### 2. **Configuration-Driven Mocking** ```javascript const mockConfig = { core: { moveTasksBetweenTags: true, generateTaskFiles: true, readJSON: true, initTaskMaster: true, findProjectRoot: true } }; ``` ### 3. **Reusable Mock Factory** ```javascript function createMockFactory(config = mockConfig) { const mocks = {}; if (config.core?.moveTasksBetweenTags) { mocks.moveTasksBetweenTags = createMock('moveTasksBetweenTags'); } // ... other mocks return mocks; } ``` ## Mock Configuration ### Core Mocks (Required for Cross-Tag Functionality) - `moveTasksBetweenTags`: Core move functionality - `generateTaskFiles`: File generation after moves - `readJSON`: Reading task data - `initTaskMaster`: TaskMaster initialization - `findProjectRoot`: Project path resolution ### Optional Mocks - Console methods: `error`, `log`, `exit` - TaskMaster instance methods: `getCurrentTag`, `getTasksPath`, `getProjectRoot` ## Usage Examples ### Default Configuration ```javascript const mocks = setupMocks(); // Uses default mockConfig ``` ### Minimal Configuration ```javascript const minimalConfig = { core: { moveTasksBetweenTags: true, generateTaskFiles: true, readJSON: true } }; const mocks = setupMocks(minimalConfig); ``` ### Selective Mocking ```javascript const selectiveConfig = { core: { moveTasksBetweenTags: true, generateTaskFiles: false, // Disabled readJSON: true } }; const mocks = setupMocks(selectiveConfig); ``` ## Benefits 1. **Reduced Complexity**: From 150+ lines of mock setup to 50 lines 2. **Better Maintainability**: Clear configuration object shows dependencies 3. **Focused Testing**: Only mocks what's actually used 4. **Flexible Configuration**: Easy to enable/disable specific mocks 5. **Consistent Naming**: All mocks use `createMock()` with descriptive names ## Migration Guide ### For Other Test Files 1. Identify actual module dependencies 2. Create configuration object for required mocks 3. Use `createMockFactory()` and `setupMocks()` 4. Remove unnecessary mocks ### Example Migration ```javascript // Before: 20+ jest.mock() calls jest.mock('module1', () => ({ ... })); jest.mock('module2', () => ({ ... })); // ... many more // After: Configuration-driven const mockConfig = { core: { requiredFunction1: true, requiredFunction2: true } }; const mocks = setupMocks(mockConfig); ``` ## Testing the Mock System The test suite includes validation tests: - `should work with minimal mock configuration` - `should allow disabling specific mocks` These ensure the mock factory works correctly and can be configured flexibly.