#!/usr/bin/env node /** * TDD Tests for Advanced State Management Recovery */ const { TestRunner } = require('./test_runner.js'); const runner = new TestRunner(); // Test the advanced state management system runner.describe('Advanced State Management with EditState enum', () => { runner.it('should have EditState enum with 4 states', async () => { // Clear any existing definitions to avoid conflicts delete global.EditState; delete require.cache[require.resolve('/home/worsch/markitect_project/markitect/static/editor.js')]; // Load our editor.js to test require('/home/worsch/markitect_project/markitect/static/editor.js'); const hasEditState = global.EditState !== undefined; runner.expect(hasEditState).toBeTruthy(); if (global.EditState) { runner.expect(global.EditState.ORIGINAL).toBe('original'); runner.expect(global.EditState.EDITING).toBe('editing'); runner.expect(global.EditState.MODIFIED).toBe('modified'); runner.expect(global.EditState.SAVED).toBe('saved'); } }); runner.it('should support pending changes in Section class', async () => { // Editor.js already loaded above if (global.Section) { const section = new global.Section('test-id', 'original content'); // Should have pendingMarkdown property runner.expect(section.pendingMarkdown).toBe(null); // Should have proper state management runner.expect(section.state).toBe('original'); } }); runner.it('should implement stopEditing with state preservation', async () => { if (global.Section) { const section = new global.Section('test-id', 'original content'); // Start editing section.startEdit(); section.updateContent('modified content'); // Stop editing should preserve changes const result = section.stopEditing(); runner.expect(section.pendingMarkdown).toBe('modified content'); runner.expect(section.state).toBe('modified'); } }); runner.it('should implement hasChanges detection', async () => { if (global.Section) { const section = new global.Section('test-id', 'original content'); // Initially no changes runner.expect(section.hasChanges()).toBe(false); // After modification should detect changes section.currentMarkdown = 'modified content'; runner.expect(section.hasChanges()).toBe(true); } }); }); // Run the tests if (require.main === module) { console.log('🧪 Running TDD Tests for State Management Recovery'); runner.run().then(() => { console.log('✅ Test run complete - now implement the functionality!'); }); } module.exports = runner;