@savestate/cli 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/__tests__/progress.test.d.ts +5 -0
- package/dist/cli/__tests__/progress.test.d.ts.map +1 -0
- package/dist/cli/__tests__/progress.test.js +212 -0
- package/dist/cli/__tests__/progress.test.js.map +1 -0
- package/dist/cli/__tests__/signal-handler.test.d.ts +5 -0
- package/dist/cli/__tests__/signal-handler.test.d.ts.map +1 -0
- package/dist/cli/__tests__/signal-handler.test.js +99 -0
- package/dist/cli/__tests__/signal-handler.test.js.map +1 -0
- package/dist/cli/__tests__/summary.test.d.ts +5 -0
- package/dist/cli/__tests__/summary.test.d.ts.map +1 -0
- package/dist/cli/__tests__/summary.test.js +242 -0
- package/dist/cli/__tests__/summary.test.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/progress.d.ts +86 -0
- package/dist/cli/progress.d.ts.map +1 -0
- package/dist/cli/progress.js +205 -0
- package/dist/cli/progress.js.map +1 -0
- package/dist/cli/prompts.d.ts +49 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +266 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/cli/signal-handler.d.ts +63 -0
- package/dist/cli/signal-handler.d.ts.map +1 -0
- package/dist/cli/signal-handler.js +165 -0
- package/dist/cli/signal-handler.js.map +1 -0
- package/dist/cli/summary.d.ts +33 -0
- package/dist/cli/summary.d.ts.map +1 -0
- package/dist/cli/summary.js +296 -0
- package/dist/cli/summary.js.map +1 -0
- package/dist/cli.js +7 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/migrate.d.ts +18 -4
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +324 -163
- package/dist/commands/migrate.js.map +1 -1
- package/dist/migrate/__tests__/capabilities.test.d.ts +7 -0
- package/dist/migrate/__tests__/capabilities.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/capabilities.test.js +90 -0
- package/dist/migrate/__tests__/capabilities.test.js.map +1 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.d.ts +7 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.js +889 -0
- package/dist/migrate/__tests__/chatgpt-loader.test.js.map +1 -0
- package/dist/migrate/__tests__/claude-loader.test.d.ts +7 -0
- package/dist/migrate/__tests__/claude-loader.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/claude-loader.test.js +544 -0
- package/dist/migrate/__tests__/claude-loader.test.js.map +1 -0
- package/dist/migrate/__tests__/edge-cases.test.d.ts +7 -0
- package/dist/migrate/__tests__/edge-cases.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/edge-cases.test.js +787 -0
- package/dist/migrate/__tests__/edge-cases.test.js.map +1 -0
- package/dist/migrate/__tests__/error-recovery.test.d.ts +7 -0
- package/dist/migrate/__tests__/error-recovery.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/error-recovery.test.js +461 -0
- package/dist/migrate/__tests__/error-recovery.test.js.map +1 -0
- package/dist/migrate/__tests__/integration.test.d.ts +7 -0
- package/dist/migrate/__tests__/integration.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/integration.test.js +536 -0
- package/dist/migrate/__tests__/integration.test.js.map +1 -0
- package/dist/migrate/__tests__/orchestrator.test.d.ts +8 -0
- package/dist/migrate/__tests__/orchestrator.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/orchestrator.test.js +355 -0
- package/dist/migrate/__tests__/orchestrator.test.js.map +1 -0
- package/dist/migrate/__tests__/performance.test.d.ts +7 -0
- package/dist/migrate/__tests__/performance.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/performance.test.js +478 -0
- package/dist/migrate/__tests__/performance.test.js.map +1 -0
- package/dist/migrate/__tests__/registry.test.d.ts +7 -0
- package/dist/migrate/__tests__/registry.test.d.ts.map +1 -0
- package/dist/migrate/__tests__/registry.test.js +167 -0
- package/dist/migrate/__tests__/registry.test.js.map +1 -0
- package/dist/migrate/compatibility.d.ts +47 -0
- package/dist/migrate/compatibility.d.ts.map +1 -0
- package/dist/migrate/compatibility.js +468 -0
- package/dist/migrate/compatibility.js.map +1 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts +12 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.d.ts.map +1 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.js +522 -0
- package/dist/migrate/extractors/__tests__/chatgpt.test.js.map +1 -0
- package/dist/migrate/extractors/__tests__/claude.test.d.ts +12 -0
- package/dist/migrate/extractors/__tests__/claude.test.d.ts.map +1 -0
- package/dist/migrate/extractors/__tests__/claude.test.js +789 -0
- package/dist/migrate/extractors/__tests__/claude.test.js.map +1 -0
- package/dist/migrate/extractors/chatgpt.d.ts +70 -0
- package/dist/migrate/extractors/chatgpt.d.ts.map +1 -0
- package/dist/migrate/extractors/chatgpt.js +791 -0
- package/dist/migrate/extractors/chatgpt.js.map +1 -0
- package/dist/migrate/extractors/claude.d.ts +69 -0
- package/dist/migrate/extractors/claude.d.ts.map +1 -0
- package/dist/migrate/extractors/claude.js +1136 -0
- package/dist/migrate/extractors/claude.js.map +1 -0
- package/dist/migrate/extractors/registry.js +6 -4
- package/dist/migrate/extractors/registry.js.map +1 -1
- package/dist/migrate/index.d.ts +6 -1
- package/dist/migrate/index.d.ts.map +1 -1
- package/dist/migrate/index.js +12 -1
- package/dist/migrate/index.js.map +1 -1
- package/dist/migrate/loaders/chatgpt.d.ts +72 -0
- package/dist/migrate/loaders/chatgpt.d.ts.map +1 -0
- package/dist/migrate/loaders/chatgpt.js +691 -0
- package/dist/migrate/loaders/chatgpt.js.map +1 -0
- package/dist/migrate/loaders/claude.d.ts +61 -0
- package/dist/migrate/loaders/claude.d.ts.map +1 -0
- package/dist/migrate/loaders/claude.js +433 -0
- package/dist/migrate/loaders/claude.js.map +1 -0
- package/dist/migrate/loaders/registry.js +6 -4
- package/dist/migrate/loaders/registry.js.map +1 -1
- package/dist/migrate/orchestrator.d.ts +75 -1
- package/dist/migrate/orchestrator.d.ts.map +1 -1
- package/dist/migrate/orchestrator.js +215 -19
- package/dist/migrate/orchestrator.js.map +1 -1
- package/dist/migrate/testing/index.d.ts +28 -0
- package/dist/migrate/testing/index.d.ts.map +1 -0
- package/dist/migrate/testing/index.js +55 -0
- package/dist/migrate/testing/index.js.map +1 -0
- package/dist/migrate/testing/mock-extractor.d.ts +30 -0
- package/dist/migrate/testing/mock-extractor.d.ts.map +1 -0
- package/dist/migrate/testing/mock-extractor.js +137 -0
- package/dist/migrate/testing/mock-extractor.js.map +1 -0
- package/dist/migrate/testing/mock-loader.d.ts +36 -0
- package/dist/migrate/testing/mock-loader.d.ts.map +1 -0
- package/dist/migrate/testing/mock-loader.js +81 -0
- package/dist/migrate/testing/mock-loader.js.map +1 -0
- package/dist/migrate/testing/mock-transformer.d.ts +26 -0
- package/dist/migrate/testing/mock-transformer.d.ts.map +1 -0
- package/dist/migrate/testing/mock-transformer.js +185 -0
- package/dist/migrate/testing/mock-transformer.js.map +1 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts +5 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.d.ts.map +1 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js +333 -0
- package/dist/migrate/transformers/__tests__/chatgpt-to-claude.test.js.map +1 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts +5 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.d.ts.map +1 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js +333 -0
- package/dist/migrate/transformers/__tests__/claude-to-chatgpt.test.js.map +1 -0
- package/dist/migrate/transformers/__tests__/rules.test.d.ts +5 -0
- package/dist/migrate/transformers/__tests__/rules.test.d.ts.map +1 -0
- package/dist/migrate/transformers/__tests__/rules.test.js +375 -0
- package/dist/migrate/transformers/__tests__/rules.test.js.map +1 -0
- package/dist/migrate/transformers/chatgpt-to-claude.d.ts +40 -0
- package/dist/migrate/transformers/chatgpt-to-claude.d.ts.map +1 -0
- package/dist/migrate/transformers/chatgpt-to-claude.js +443 -0
- package/dist/migrate/transformers/chatgpt-to-claude.js.map +1 -0
- package/dist/migrate/transformers/claude-to-chatgpt.d.ts +41 -0
- package/dist/migrate/transformers/claude-to-chatgpt.d.ts.map +1 -0
- package/dist/migrate/transformers/claude-to-chatgpt.js +532 -0
- package/dist/migrate/transformers/claude-to-chatgpt.js.map +1 -0
- package/dist/migrate/transformers/registry.js +6 -4
- package/dist/migrate/transformers/registry.js.map +1 -1
- package/dist/migrate/transformers/rules.d.ts +168 -0
- package/dist/migrate/transformers/rules.d.ts.map +1 -0
- package/dist/migrate/transformers/rules.js +487 -0
- package/dist/migrate/transformers/rules.js.map +1 -0
- package/dist/migrate/types.d.ts +2 -0
- package/dist/migrate/types.d.ts.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Migration Orchestrator Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for the three-phase migration architecture:
|
|
5
|
+
* Extract → Transform → Load
|
|
6
|
+
*/
|
|
7
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
8
|
+
import { existsSync } from 'node:fs';
|
|
9
|
+
import { rm, readFile, mkdir } from 'node:fs/promises';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { tmpdir } from 'node:os';
|
|
12
|
+
import { MigrationOrchestrator } from '../orchestrator.js';
|
|
13
|
+
import { registerMockPlugins } from '../testing/index.js';
|
|
14
|
+
describe('MigrationOrchestrator', () => {
|
|
15
|
+
let testWorkDir;
|
|
16
|
+
beforeEach(async () => {
|
|
17
|
+
// Create a unique temp directory for each test
|
|
18
|
+
testWorkDir = join(tmpdir(), `savestate-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
19
|
+
await mkdir(testWorkDir, { recursive: true });
|
|
20
|
+
// Register mock plugins
|
|
21
|
+
registerMockPlugins();
|
|
22
|
+
});
|
|
23
|
+
afterEach(async () => {
|
|
24
|
+
// Clean up test directory
|
|
25
|
+
if (existsSync(testWorkDir)) {
|
|
26
|
+
await rm(testWorkDir, { recursive: true, force: true });
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
describe('Basic Migration Flow', () => {
|
|
30
|
+
it('should complete a full migration between two mock platforms', async () => {
|
|
31
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
32
|
+
workDir: join(testWorkDir, 'migration-1'),
|
|
33
|
+
});
|
|
34
|
+
const result = await orchestrator.run();
|
|
35
|
+
expect(result.success).toBe(true);
|
|
36
|
+
expect(result.loaded.instructions).toBe(true);
|
|
37
|
+
expect(result.loaded.memories).toBeGreaterThan(0);
|
|
38
|
+
const state = orchestrator.getState();
|
|
39
|
+
expect(state.phase).toBe('complete');
|
|
40
|
+
expect(state.completedAt).toBeDefined();
|
|
41
|
+
});
|
|
42
|
+
it('should track progress during migration', async () => {
|
|
43
|
+
// Register mock plugins with delays to generate progress events
|
|
44
|
+
registerMockPlugins({
|
|
45
|
+
extractors: { chatgpt: { delayMs: 100 } },
|
|
46
|
+
transformers: { 'chatgpt->claude': { delayMs: 100 } },
|
|
47
|
+
loaders: { claude: { delayMs: 100 } },
|
|
48
|
+
});
|
|
49
|
+
const progressEvents = [];
|
|
50
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
51
|
+
workDir: join(testWorkDir, 'migration-2'),
|
|
52
|
+
});
|
|
53
|
+
orchestrator.on((event) => {
|
|
54
|
+
if (event.type === 'progress') {
|
|
55
|
+
progressEvents.push(event);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
await orchestrator.run();
|
|
59
|
+
// Should have progress events from all three phases
|
|
60
|
+
expect(progressEvents.length).toBeGreaterThan(0);
|
|
61
|
+
// Progress should increase monotonically
|
|
62
|
+
let lastProgress = 0;
|
|
63
|
+
for (const event of progressEvents) {
|
|
64
|
+
expect(event.progress).toBeGreaterThanOrEqual(lastProgress);
|
|
65
|
+
lastProgress = event.progress ?? 0;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
it('should emit phase events', async () => {
|
|
69
|
+
const phaseEvents = [];
|
|
70
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
71
|
+
workDir: join(testWorkDir, 'migration-3'),
|
|
72
|
+
});
|
|
73
|
+
orchestrator.on((event) => {
|
|
74
|
+
if (event.type.startsWith('phase:')) {
|
|
75
|
+
phaseEvents.push(event);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
await orchestrator.run();
|
|
79
|
+
// Should have start and complete events for each phase
|
|
80
|
+
const phaseStarts = phaseEvents.filter((e) => e.type === 'phase:start');
|
|
81
|
+
const phaseCompletes = phaseEvents.filter((e) => e.type === 'phase:complete');
|
|
82
|
+
expect(phaseStarts).toHaveLength(3); // extract, transform, load
|
|
83
|
+
expect(phaseCompletes).toHaveLength(3);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('Checkpoint/Resume Capability', () => {
|
|
87
|
+
it('should save checkpoints after each phase', async () => {
|
|
88
|
+
const workDir = join(testWorkDir, 'migration-4');
|
|
89
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
90
|
+
await orchestrator.run();
|
|
91
|
+
const state = orchestrator.getState();
|
|
92
|
+
expect(state.checkpoints).toHaveLength(3);
|
|
93
|
+
expect(state.checkpoints[0].phase).toBe('extracting');
|
|
94
|
+
expect(state.checkpoints[1].phase).toBe('transforming');
|
|
95
|
+
expect(state.checkpoints[2].phase).toBe('loading');
|
|
96
|
+
// Verify checkpoint files exist
|
|
97
|
+
for (const checkpoint of state.checkpoints) {
|
|
98
|
+
expect(existsSync(checkpoint.dataPath)).toBe(true);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
it('should persist state to disk', async () => {
|
|
102
|
+
const workDir = join(testWorkDir, 'migration-5');
|
|
103
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
104
|
+
await orchestrator.run();
|
|
105
|
+
// Read state from disk
|
|
106
|
+
const statePath = join(workDir, 'state.json');
|
|
107
|
+
expect(existsSync(statePath)).toBe(true);
|
|
108
|
+
const savedState = JSON.parse(await readFile(statePath, 'utf-8'));
|
|
109
|
+
expect(savedState.phase).toBe('complete');
|
|
110
|
+
expect(savedState.id).toBe(orchestrator.getState().id);
|
|
111
|
+
});
|
|
112
|
+
it('should resume a migration from checkpoint', async () => {
|
|
113
|
+
const workDir = join(testWorkDir, 'migration-6');
|
|
114
|
+
// Create an orchestrator and run only extract phase
|
|
115
|
+
const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
116
|
+
await orchestrator1.extract();
|
|
117
|
+
const migrationId = orchestrator1.getState().id;
|
|
118
|
+
// Resume from the checkpoint
|
|
119
|
+
const orchestrator2 = await MigrationOrchestrator.resume(migrationId, workDir);
|
|
120
|
+
const result = await orchestrator2.continue();
|
|
121
|
+
expect(result.success).toBe(true);
|
|
122
|
+
expect(orchestrator2.getState().phase).toBe('complete');
|
|
123
|
+
});
|
|
124
|
+
it('should verify checkpoint integrity with checksums', async () => {
|
|
125
|
+
const workDir = join(testWorkDir, 'migration-7');
|
|
126
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
127
|
+
await orchestrator.run();
|
|
128
|
+
const state = orchestrator.getState();
|
|
129
|
+
// Each checkpoint should have a checksum
|
|
130
|
+
for (const checkpoint of state.checkpoints) {
|
|
131
|
+
expect(checkpoint.checksum).toBeDefined();
|
|
132
|
+
expect(checkpoint.checksum.length).toBe(64); // SHA-256 hex
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
describe('Dry Run', () => {
|
|
137
|
+
it('should not load data in dry run mode', async () => {
|
|
138
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
139
|
+
workDir: join(testWorkDir, 'migration-8'),
|
|
140
|
+
dryRun: true,
|
|
141
|
+
});
|
|
142
|
+
const result = await orchestrator.run();
|
|
143
|
+
expect(result.success).toBe(true);
|
|
144
|
+
expect(result.warnings).toContain('Dry run - no changes made');
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
describe('Error Handling', () => {
|
|
148
|
+
it('should handle extraction failures', async () => {
|
|
149
|
+
// Register a failing extractor
|
|
150
|
+
registerMockPlugins({
|
|
151
|
+
extractors: {
|
|
152
|
+
chatgpt: { shouldFail: true, failureMessage: 'Auth failed' },
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
156
|
+
workDir: join(testWorkDir, 'migration-9'),
|
|
157
|
+
});
|
|
158
|
+
await expect(orchestrator.run()).rejects.toThrow('Auth failed');
|
|
159
|
+
const state = orchestrator.getState();
|
|
160
|
+
expect(state.phase).toBe('failed');
|
|
161
|
+
expect(state.error).toBe('Auth failed');
|
|
162
|
+
});
|
|
163
|
+
it('should handle transformation failures', async () => {
|
|
164
|
+
registerMockPlugins({
|
|
165
|
+
transformers: {
|
|
166
|
+
'chatgpt->claude': { shouldFail: true, failureMessage: 'Transform error' },
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
170
|
+
workDir: join(testWorkDir, 'migration-10'),
|
|
171
|
+
});
|
|
172
|
+
await expect(orchestrator.run()).rejects.toThrow('Transform error');
|
|
173
|
+
const state = orchestrator.getState();
|
|
174
|
+
expect(state.phase).toBe('failed');
|
|
175
|
+
});
|
|
176
|
+
it('should handle load failures', async () => {
|
|
177
|
+
registerMockPlugins({
|
|
178
|
+
loaders: {
|
|
179
|
+
claude: { shouldFail: true, failureMessage: 'Load error' },
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
183
|
+
workDir: join(testWorkDir, 'migration-11'),
|
|
184
|
+
});
|
|
185
|
+
await expect(orchestrator.run()).rejects.toThrow('Load error');
|
|
186
|
+
const state = orchestrator.getState();
|
|
187
|
+
expect(state.phase).toBe('failed');
|
|
188
|
+
});
|
|
189
|
+
it('should handle extractor auth failure', async () => {
|
|
190
|
+
// Register extractor that fails canExtract()
|
|
191
|
+
registerMockPlugins({
|
|
192
|
+
extractors: {
|
|
193
|
+
chatgpt: { canExtractResult: false },
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
197
|
+
workDir: join(testWorkDir, 'migration-12'),
|
|
198
|
+
});
|
|
199
|
+
await expect(orchestrator.run()).rejects.toThrow(/Cannot extract from chatgpt/);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
describe('Rollback Support', () => {
|
|
203
|
+
it('should create rollback plan after successful load', async () => {
|
|
204
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
205
|
+
workDir: join(testWorkDir, 'migration-13'),
|
|
206
|
+
});
|
|
207
|
+
await orchestrator.run();
|
|
208
|
+
const plan = orchestrator.getRollbackPlan();
|
|
209
|
+
expect(plan).not.toBeNull();
|
|
210
|
+
expect(plan?.migrationId).toBe(orchestrator.getState().id);
|
|
211
|
+
expect(plan?.executed).toBe(false);
|
|
212
|
+
expect(plan?.actions.length).toBeGreaterThan(0);
|
|
213
|
+
});
|
|
214
|
+
it('should persist rollback plan to disk', async () => {
|
|
215
|
+
const workDir = join(testWorkDir, 'migration-14');
|
|
216
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
217
|
+
await orchestrator.run();
|
|
218
|
+
const planPath = join(workDir, 'rollback-plan.json');
|
|
219
|
+
expect(existsSync(planPath)).toBe(true);
|
|
220
|
+
});
|
|
221
|
+
it('should report canRollback correctly', async () => {
|
|
222
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
223
|
+
workDir: join(testWorkDir, 'migration-15'),
|
|
224
|
+
});
|
|
225
|
+
// Before run, no rollback available
|
|
226
|
+
expect(orchestrator.canRollback()).toBe(false);
|
|
227
|
+
await orchestrator.run();
|
|
228
|
+
// After successful run, rollback should be available
|
|
229
|
+
expect(orchestrator.canRollback()).toBe(true);
|
|
230
|
+
});
|
|
231
|
+
it('should execute rollback', async () => {
|
|
232
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
233
|
+
workDir: join(testWorkDir, 'migration-16'),
|
|
234
|
+
});
|
|
235
|
+
await orchestrator.run();
|
|
236
|
+
const rollbackResult = await orchestrator.rollback();
|
|
237
|
+
expect(rollbackResult.success).toBe(true);
|
|
238
|
+
expect(rollbackResult.succeeded.length).toBeGreaterThan(0);
|
|
239
|
+
// Rollback plan should be marked as executed
|
|
240
|
+
const plan = orchestrator.getRollbackPlan();
|
|
241
|
+
expect(plan?.executed).toBe(true);
|
|
242
|
+
expect(plan?.executedAt).toBeDefined();
|
|
243
|
+
});
|
|
244
|
+
it('should prevent double rollback', async () => {
|
|
245
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
246
|
+
workDir: join(testWorkDir, 'migration-17'),
|
|
247
|
+
});
|
|
248
|
+
await orchestrator.run();
|
|
249
|
+
await orchestrator.rollback();
|
|
250
|
+
// Second rollback should fail
|
|
251
|
+
await expect(orchestrator.rollback()).rejects.toThrow('already been executed');
|
|
252
|
+
});
|
|
253
|
+
it('should load rollback plan when resuming', async () => {
|
|
254
|
+
const workDir = join(testWorkDir, 'migration-18');
|
|
255
|
+
const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
256
|
+
await orchestrator1.run();
|
|
257
|
+
const migrationId = orchestrator1.getState().id;
|
|
258
|
+
// Resume and check rollback plan is loaded
|
|
259
|
+
const orchestrator2 = await MigrationOrchestrator.resume(migrationId, workDir);
|
|
260
|
+
expect(orchestrator2.canRollback()).toBe(true);
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
describe('Analysis', () => {
|
|
264
|
+
it('should generate compatibility report without full migration', async () => {
|
|
265
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
266
|
+
workDir: join(testWorkDir, 'migration-19'),
|
|
267
|
+
});
|
|
268
|
+
const report = await orchestrator.analyze();
|
|
269
|
+
expect(report.source).toBe('chatgpt');
|
|
270
|
+
expect(report.target).toBe('claude');
|
|
271
|
+
expect(report.summary).toBeDefined();
|
|
272
|
+
expect(report.items.length).toBeGreaterThan(0);
|
|
273
|
+
expect(report.feasibility).toBeDefined();
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
describe('Bundle Management', () => {
|
|
277
|
+
it('should save bundle to disk', async () => {
|
|
278
|
+
const workDir = join(testWorkDir, 'migration-20');
|
|
279
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
280
|
+
await orchestrator.run();
|
|
281
|
+
const bundlePath = join(workDir, 'bundle.json');
|
|
282
|
+
expect(existsSync(bundlePath)).toBe(true);
|
|
283
|
+
const bundle = JSON.parse(await readFile(bundlePath, 'utf-8'));
|
|
284
|
+
expect(bundle.version).toBe('1.0');
|
|
285
|
+
expect(bundle.source.platform).toBe('chatgpt');
|
|
286
|
+
expect(bundle.target?.platform).toBe('claude');
|
|
287
|
+
});
|
|
288
|
+
it('should provide access to bundle via getBundle()', async () => {
|
|
289
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
290
|
+
workDir: join(testWorkDir, 'migration-21'),
|
|
291
|
+
});
|
|
292
|
+
// Before extract, bundle should be null
|
|
293
|
+
expect(orchestrator.getBundle()).toBeNull();
|
|
294
|
+
await orchestrator.run();
|
|
295
|
+
const bundle = orchestrator.getBundle();
|
|
296
|
+
expect(bundle).not.toBeNull();
|
|
297
|
+
expect(bundle?.contents.instructions).toBeDefined();
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
describe('Event Handlers', () => {
|
|
301
|
+
it('should allow unsubscribing from events', async () => {
|
|
302
|
+
const events = [];
|
|
303
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
304
|
+
workDir: join(testWorkDir, 'migration-22'),
|
|
305
|
+
});
|
|
306
|
+
const unsubscribe = orchestrator.on((event) => {
|
|
307
|
+
events.push(event);
|
|
308
|
+
});
|
|
309
|
+
// Unsubscribe
|
|
310
|
+
unsubscribe();
|
|
311
|
+
await orchestrator.run();
|
|
312
|
+
// Should not have received any events
|
|
313
|
+
expect(events).toHaveLength(0);
|
|
314
|
+
});
|
|
315
|
+
it('should not break on handler errors', async () => {
|
|
316
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
317
|
+
workDir: join(testWorkDir, 'migration-23'),
|
|
318
|
+
});
|
|
319
|
+
orchestrator.on(() => {
|
|
320
|
+
throw new Error('Handler error');
|
|
321
|
+
});
|
|
322
|
+
// Should complete despite handler error
|
|
323
|
+
const result = await orchestrator.run();
|
|
324
|
+
expect(result.success).toBe(true);
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
describe('Cleanup', () => {
|
|
328
|
+
it('should clean up migration artifacts', async () => {
|
|
329
|
+
const workDir = join(testWorkDir, 'migration-24');
|
|
330
|
+
const orchestrator = new MigrationOrchestrator('chatgpt', 'claude', { workDir });
|
|
331
|
+
await orchestrator.run();
|
|
332
|
+
expect(existsSync(workDir)).toBe(true);
|
|
333
|
+
await orchestrator.cleanup();
|
|
334
|
+
expect(existsSync(workDir)).toBe(false);
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
describe('List Migrations', () => {
|
|
338
|
+
it('should list all migrations in the work directory', async () => {
|
|
339
|
+
// Create multiple migrations
|
|
340
|
+
const orchestrator1 = new MigrationOrchestrator('chatgpt', 'claude', {
|
|
341
|
+
workDir: join(testWorkDir, 'mig_test1'),
|
|
342
|
+
});
|
|
343
|
+
await orchestrator1.run();
|
|
344
|
+
const orchestrator2 = new MigrationOrchestrator('claude', 'chatgpt', {
|
|
345
|
+
workDir: join(testWorkDir, 'mig_test2'),
|
|
346
|
+
});
|
|
347
|
+
await orchestrator2.run();
|
|
348
|
+
const migrations = await MigrationOrchestrator.listMigrations(testWorkDir);
|
|
349
|
+
expect(migrations).toHaveLength(2);
|
|
350
|
+
expect(migrations[0].phase).toBe('complete');
|
|
351
|
+
expect(migrations[1].phase).toBe('complete');
|
|
352
|
+
});
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
//# sourceMappingURL=orchestrator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.test.js","sourceRoot":"","sources":["../../../src/migrate/__tests__/orchestrator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance.test.d.ts","sourceRoot":"","sources":["../../../src/migrate/__tests__/performance.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|