@skillsmith/mcp-server 0.3.6 → 0.3.8
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/.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/src/tools/install.conflict-helpers.test.d.ts +0 -15
- package/dist/src/tools/install.conflict-helpers.test.d.ts.map +0 -1
- package/dist/src/tools/install.conflict-helpers.test.js +0 -243
- package/dist/src/tools/install.conflict-helpers.test.js.map +0 -1
- package/dist/src/tools/install.conflict.test.d.ts +0 -15
- package/dist/src/tools/install.conflict.test.d.ts.map +0 -1
- package/dist/src/tools/install.conflict.test.js +0 -354
- package/dist/src/tools/install.conflict.test.js.map +0 -1
- package/dist/src/tools/merge.test.d.ts +0 -11
- package/dist/src/tools/merge.test.d.ts.map +0 -1
- package/dist/src/tools/merge.test.js +0 -224
- package/dist/src/tools/merge.test.js.map +0 -1
- package/dist/tests/integration/install-conflict.integration.test.d.ts +0 -8
- package/dist/tests/integration/install-conflict.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/install-conflict.integration.test.js +0 -384
- package/dist/tests/integration/install-conflict.integration.test.js.map +0 -1
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +0 -13
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/install-trust-parsing.integration.test.js +0 -290
- package/dist/tests/integration/install-trust-parsing.integration.test.js.map +0 -1
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit Tests for Conflict Detection and Resolution
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/install.conflict.test
|
|
4
|
-
* @see SMI-1868, SMI-1879
|
|
5
|
-
*
|
|
6
|
-
* Tests cover:
|
|
7
|
-
* - checkForConflicts: Detect local modifications before update
|
|
8
|
-
* - handleMergeAction: Three-way merge with conflict resolution
|
|
9
|
-
*
|
|
10
|
-
* Related test files:
|
|
11
|
-
* - install.conflict-helpers.test.ts: hashContent, detectModifications, backups
|
|
12
|
-
* - merge.test.ts: computeDiff, threeWayMerge
|
|
13
|
-
*/
|
|
14
|
-
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
15
|
-
import * as fs from 'fs/promises';
|
|
16
|
-
// Import functions under test
|
|
17
|
-
import { hashContent } from './install.conflict-helpers.js';
|
|
18
|
-
import { checkForConflicts, handleMergeAction } from './install.conflict.js';
|
|
19
|
-
// Mock fs module
|
|
20
|
-
vi.mock('fs/promises');
|
|
21
|
-
const mockedFs = vi.mocked(fs);
|
|
22
|
-
// Import the mocked helpers for configuration in tests
|
|
23
|
-
import * as helpersModule from './install.helpers.js';
|
|
24
|
-
// Mock install.helpers for updateManifestSafely
|
|
25
|
-
vi.mock('./install.helpers.js', async (importOriginal) => {
|
|
26
|
-
const actual = await importOriginal();
|
|
27
|
-
return {
|
|
28
|
-
...actual,
|
|
29
|
-
detectModifications: vi.fn(),
|
|
30
|
-
createSkillBackup: vi.fn().mockResolvedValue('/backup/path'),
|
|
31
|
-
storeOriginal: vi.fn().mockResolvedValue(undefined),
|
|
32
|
-
loadOriginal: vi.fn(),
|
|
33
|
-
cleanupOldBackups: vi.fn().mockResolvedValue(undefined),
|
|
34
|
-
updateManifestSafely: vi.fn().mockResolvedValue(undefined),
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
const mockedHelpers = vi.mocked(helpersModule);
|
|
38
|
-
// ============================================================================
|
|
39
|
-
// Tests for checkForConflicts
|
|
40
|
-
// ============================================================================
|
|
41
|
-
describe('checkForConflicts', () => {
|
|
42
|
-
beforeEach(() => {
|
|
43
|
-
vi.clearAllMocks();
|
|
44
|
-
});
|
|
45
|
-
it('should proceed when skill has no originalContentHash', async () => {
|
|
46
|
-
const manifest = {
|
|
47
|
-
version: '1.0.0',
|
|
48
|
-
installedSkills: {
|
|
49
|
-
'test-skill': {
|
|
50
|
-
id: 'owner/test-skill',
|
|
51
|
-
name: 'test-skill',
|
|
52
|
-
version: '1.0.0',
|
|
53
|
-
source: 'github:owner/test-skill',
|
|
54
|
-
installPath: '/path/to/skill',
|
|
55
|
-
installedAt: '2025-01-01',
|
|
56
|
-
lastUpdated: '2025-01-01',
|
|
57
|
-
// No originalContentHash
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
const result = await checkForConflicts('test-skill', '/path/to/skill', manifest, undefined, 'owner/test-skill');
|
|
62
|
-
expect(result.shouldProceed).toBe(true);
|
|
63
|
-
});
|
|
64
|
-
it('should proceed when skill is not modified', async () => {
|
|
65
|
-
const content = 'Original content';
|
|
66
|
-
const originalHash = hashContent(content);
|
|
67
|
-
const manifest = {
|
|
68
|
-
version: '1.0.0',
|
|
69
|
-
installedSkills: {
|
|
70
|
-
'test-skill': {
|
|
71
|
-
id: 'owner/test-skill',
|
|
72
|
-
name: 'test-skill',
|
|
73
|
-
version: '1.0.0',
|
|
74
|
-
source: 'github:owner/test-skill',
|
|
75
|
-
installPath: '/path/to/skill',
|
|
76
|
-
installedAt: '2025-01-01',
|
|
77
|
-
lastUpdated: '2025-01-01',
|
|
78
|
-
originalContentHash: originalHash,
|
|
79
|
-
},
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
// Configure mock to return no modification
|
|
83
|
-
mockedHelpers.detectModifications.mockResolvedValue({
|
|
84
|
-
modified: false,
|
|
85
|
-
currentHash: originalHash,
|
|
86
|
-
originalHash: originalHash,
|
|
87
|
-
});
|
|
88
|
-
const result = await checkForConflicts('test-skill', '/path/to/skill', manifest, undefined, 'owner/test-skill');
|
|
89
|
-
expect(result.shouldProceed).toBe(true);
|
|
90
|
-
});
|
|
91
|
-
it('should return conflict info when modified and no action specified', async () => {
|
|
92
|
-
const originalContent = 'Original content';
|
|
93
|
-
const modifiedContent = 'Modified content';
|
|
94
|
-
const originalHash = hashContent(originalContent);
|
|
95
|
-
const modifiedHash = hashContent(modifiedContent);
|
|
96
|
-
const manifest = {
|
|
97
|
-
version: '1.0.0',
|
|
98
|
-
installedSkills: {
|
|
99
|
-
'test-skill': {
|
|
100
|
-
id: 'owner/test-skill',
|
|
101
|
-
name: 'test-skill',
|
|
102
|
-
version: '1.0.0',
|
|
103
|
-
source: 'github:owner/test-skill',
|
|
104
|
-
installPath: '/path/to/skill',
|
|
105
|
-
installedAt: '2025-01-01',
|
|
106
|
-
lastUpdated: '2025-01-01',
|
|
107
|
-
originalContentHash: originalHash,
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
// Configure mock to return modified
|
|
112
|
-
mockedHelpers.detectModifications.mockResolvedValue({
|
|
113
|
-
modified: true,
|
|
114
|
-
currentHash: modifiedHash,
|
|
115
|
-
originalHash: originalHash,
|
|
116
|
-
});
|
|
117
|
-
const result = await checkForConflicts('test-skill', '/path/to/skill', manifest, undefined, 'owner/test-skill');
|
|
118
|
-
expect(result.shouldProceed).toBe(false);
|
|
119
|
-
expect(result.earlyReturn).toBeDefined();
|
|
120
|
-
expect(result.earlyReturn.conflict).toBeDefined();
|
|
121
|
-
expect(result.earlyReturn.conflict.hasLocalModifications).toBe(true);
|
|
122
|
-
expect(result.earlyReturn.requiresAction).toContain('overwrite');
|
|
123
|
-
expect(result.earlyReturn.requiresAction).toContain('merge');
|
|
124
|
-
expect(result.earlyReturn.requiresAction).toContain('cancel');
|
|
125
|
-
});
|
|
126
|
-
it('should cancel when action is cancel', async () => {
|
|
127
|
-
const originalContent = 'Original content';
|
|
128
|
-
const modifiedContent = 'Modified content';
|
|
129
|
-
const originalHash = hashContent(originalContent);
|
|
130
|
-
const modifiedHash = hashContent(modifiedContent);
|
|
131
|
-
const manifest = {
|
|
132
|
-
version: '1.0.0',
|
|
133
|
-
installedSkills: {
|
|
134
|
-
'test-skill': {
|
|
135
|
-
id: 'owner/test-skill',
|
|
136
|
-
name: 'test-skill',
|
|
137
|
-
version: '1.0.0',
|
|
138
|
-
source: 'github:owner/test-skill',
|
|
139
|
-
installPath: '/path/to/skill',
|
|
140
|
-
installedAt: '2025-01-01',
|
|
141
|
-
lastUpdated: '2025-01-01',
|
|
142
|
-
originalContentHash: originalHash,
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
};
|
|
146
|
-
// Configure mock to return modified
|
|
147
|
-
mockedHelpers.detectModifications.mockResolvedValue({
|
|
148
|
-
modified: true,
|
|
149
|
-
currentHash: modifiedHash,
|
|
150
|
-
originalHash: originalHash,
|
|
151
|
-
});
|
|
152
|
-
const result = await checkForConflicts('test-skill', '/path/to/skill', manifest, 'cancel', 'owner/test-skill');
|
|
153
|
-
expect(result.shouldProceed).toBe(false);
|
|
154
|
-
expect(result.earlyReturn).toBeDefined();
|
|
155
|
-
expect(result.earlyReturn.error).toContain('cancelled');
|
|
156
|
-
});
|
|
157
|
-
it('should create backup when action is overwrite', async () => {
|
|
158
|
-
const originalContent = 'Original content';
|
|
159
|
-
const modifiedContent = 'Modified content';
|
|
160
|
-
const originalHash = hashContent(originalContent);
|
|
161
|
-
const modifiedHash = hashContent(modifiedContent);
|
|
162
|
-
const manifest = {
|
|
163
|
-
version: '1.0.0',
|
|
164
|
-
installedSkills: {
|
|
165
|
-
'test-skill': {
|
|
166
|
-
id: 'owner/test-skill',
|
|
167
|
-
name: 'test-skill',
|
|
168
|
-
version: '1.0.0',
|
|
169
|
-
source: 'github:owner/test-skill',
|
|
170
|
-
installPath: '/path/to/skill',
|
|
171
|
-
installedAt: '2025-01-01',
|
|
172
|
-
lastUpdated: '2025-01-01',
|
|
173
|
-
originalContentHash: originalHash,
|
|
174
|
-
},
|
|
175
|
-
},
|
|
176
|
-
};
|
|
177
|
-
// Configure mocks
|
|
178
|
-
mockedHelpers.detectModifications.mockResolvedValue({
|
|
179
|
-
modified: true,
|
|
180
|
-
currentHash: modifiedHash,
|
|
181
|
-
originalHash: originalHash,
|
|
182
|
-
});
|
|
183
|
-
mockedHelpers.createSkillBackup.mockResolvedValue('/backup/path/test-skill');
|
|
184
|
-
const result = await checkForConflicts('test-skill', '/path/to/skill', manifest, 'overwrite', 'owner/test-skill');
|
|
185
|
-
expect(result.shouldProceed).toBe(true);
|
|
186
|
-
expect(result.backupPath).toBeDefined();
|
|
187
|
-
});
|
|
188
|
-
it('should proceed for merge action', async () => {
|
|
189
|
-
const originalContent = 'Original content';
|
|
190
|
-
const modifiedContent = 'Modified content';
|
|
191
|
-
const originalHash = hashContent(originalContent);
|
|
192
|
-
const modifiedHash = hashContent(modifiedContent);
|
|
193
|
-
const manifest = {
|
|
194
|
-
version: '1.0.0',
|
|
195
|
-
installedSkills: {
|
|
196
|
-
'test-skill': {
|
|
197
|
-
id: 'owner/test-skill',
|
|
198
|
-
name: 'test-skill',
|
|
199
|
-
version: '1.0.0',
|
|
200
|
-
source: 'github:owner/test-skill',
|
|
201
|
-
installPath: '/path/to/skill',
|
|
202
|
-
installedAt: '2025-01-01',
|
|
203
|
-
lastUpdated: '2025-01-01',
|
|
204
|
-
originalContentHash: originalHash,
|
|
205
|
-
},
|
|
206
|
-
},
|
|
207
|
-
};
|
|
208
|
-
// Configure mock to return modified
|
|
209
|
-
mockedHelpers.detectModifications.mockResolvedValue({
|
|
210
|
-
modified: true,
|
|
211
|
-
currentHash: modifiedHash,
|
|
212
|
-
originalHash: originalHash,
|
|
213
|
-
});
|
|
214
|
-
const result = await checkForConflicts('test-skill', '/path/to/skill', manifest, 'merge', 'owner/test-skill');
|
|
215
|
-
expect(result.shouldProceed).toBe(true);
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
// ============================================================================
|
|
219
|
-
// Tests for handleMergeAction
|
|
220
|
-
// ============================================================================
|
|
221
|
-
describe('handleMergeAction', () => {
|
|
222
|
-
beforeEach(() => {
|
|
223
|
-
vi.clearAllMocks();
|
|
224
|
-
});
|
|
225
|
-
it('should fallback to overwrite when no original content found', async () => {
|
|
226
|
-
const manifest = {
|
|
227
|
-
version: '1.0.0',
|
|
228
|
-
installedSkills: {
|
|
229
|
-
'test-skill': {
|
|
230
|
-
id: 'owner/test-skill',
|
|
231
|
-
name: 'test-skill',
|
|
232
|
-
version: '1.0.0',
|
|
233
|
-
source: 'github:owner/test-skill',
|
|
234
|
-
installPath: '/path/to/skill',
|
|
235
|
-
installedAt: '2025-01-01',
|
|
236
|
-
lastUpdated: '2025-01-01',
|
|
237
|
-
},
|
|
238
|
-
},
|
|
239
|
-
};
|
|
240
|
-
// loadOriginal returns null
|
|
241
|
-
mockedHelpers.loadOriginal.mockResolvedValue(null);
|
|
242
|
-
mockedFs.readFile.mockResolvedValue('Current content'); // current content
|
|
243
|
-
const result = await handleMergeAction('test-skill', '/path/to/skill', 'Upstream content', manifest, 'owner', 'repo', 'owner/test-skill');
|
|
244
|
-
expect(result.shouldProceed).toBe(true);
|
|
245
|
-
});
|
|
246
|
-
it('should return merged content on clean merge', async () => {
|
|
247
|
-
const originalContent = `Line 1
|
|
248
|
-
Line 2
|
|
249
|
-
Line 3`;
|
|
250
|
-
const currentContent = `Line 1
|
|
251
|
-
Local Line 2
|
|
252
|
-
Line 3`;
|
|
253
|
-
const upstreamContent = `Line 1
|
|
254
|
-
Line 2
|
|
255
|
-
Upstream Line 3`;
|
|
256
|
-
const manifest = {
|
|
257
|
-
version: '1.0.0',
|
|
258
|
-
installedSkills: {
|
|
259
|
-
'test-skill': {
|
|
260
|
-
id: 'owner/test-skill',
|
|
261
|
-
name: 'test-skill',
|
|
262
|
-
version: '1.0.0',
|
|
263
|
-
source: 'github:owner/test-skill',
|
|
264
|
-
installPath: '/path/to/skill',
|
|
265
|
-
installedAt: '2025-01-01',
|
|
266
|
-
lastUpdated: '2025-01-01',
|
|
267
|
-
},
|
|
268
|
-
},
|
|
269
|
-
};
|
|
270
|
-
// loadOriginal returns original content
|
|
271
|
-
mockedHelpers.loadOriginal.mockResolvedValue(originalContent);
|
|
272
|
-
// current content read from fs
|
|
273
|
-
mockedFs.readFile.mockResolvedValue(currentContent);
|
|
274
|
-
const result = await handleMergeAction('test-skill', '/path/to/skill', upstreamContent, manifest, 'owner', 'repo', 'owner/test-skill');
|
|
275
|
-
expect(result.shouldProceed).toBe(true);
|
|
276
|
-
expect(result.mergedContent).toBeDefined();
|
|
277
|
-
expect(result.mergedContent).toContain('Local Line 2');
|
|
278
|
-
expect(result.mergedContent).toContain('Upstream Line 3');
|
|
279
|
-
});
|
|
280
|
-
it('should handle deleted local file as a conflict', async () => {
|
|
281
|
-
const originalContent = 'Original content';
|
|
282
|
-
const upstreamContent = 'Upstream content';
|
|
283
|
-
const manifest = {
|
|
284
|
-
version: '1.0.0',
|
|
285
|
-
installedSkills: {
|
|
286
|
-
'test-skill': {
|
|
287
|
-
id: 'owner/test-skill',
|
|
288
|
-
name: 'test-skill',
|
|
289
|
-
version: '1.0.0',
|
|
290
|
-
source: 'github:owner/test-skill',
|
|
291
|
-
installPath: '/path/to/skill',
|
|
292
|
-
installedAt: '2025-01-01',
|
|
293
|
-
lastUpdated: '2025-01-01',
|
|
294
|
-
},
|
|
295
|
-
},
|
|
296
|
-
};
|
|
297
|
-
// loadOriginal returns original content
|
|
298
|
-
mockedHelpers.loadOriginal.mockResolvedValue(originalContent);
|
|
299
|
-
// current content - file deleted (throws ENOENT, treated as empty)
|
|
300
|
-
const error = new Error('ENOENT');
|
|
301
|
-
error.code = 'ENOENT';
|
|
302
|
-
mockedFs.readFile.mockRejectedValue(error);
|
|
303
|
-
// createSkillBackup mock
|
|
304
|
-
mockedHelpers.createSkillBackup.mockResolvedValue('/backup/path/test-skill');
|
|
305
|
-
// fs operations for writing conflict file
|
|
306
|
-
mockedFs.mkdir.mockResolvedValue(undefined);
|
|
307
|
-
mockedFs.writeFile.mockResolvedValue(undefined);
|
|
308
|
-
const result = await handleMergeAction('test-skill', '/path/to/skill', upstreamContent, manifest, 'owner', 'repo', 'owner/test-skill');
|
|
309
|
-
// When local is deleted (empty) and upstream differs from original,
|
|
310
|
-
// this is a conflict since both sides modified the content differently
|
|
311
|
-
expect(result.shouldProceed).toBe(false);
|
|
312
|
-
expect(result.backupPath).toBeDefined();
|
|
313
|
-
expect(result.earlyReturn).toBeDefined();
|
|
314
|
-
expect(result.earlyReturn.mergeResult).toBeDefined();
|
|
315
|
-
expect(result.earlyReturn.mergeResult.conflicts).toBeDefined();
|
|
316
|
-
});
|
|
317
|
-
it('should create backup and write conflict markers on merge conflict', async () => {
|
|
318
|
-
const originalContent = 'Original content';
|
|
319
|
-
const currentContent = 'Local version';
|
|
320
|
-
const upstreamContent = 'Upstream version';
|
|
321
|
-
const manifest = {
|
|
322
|
-
version: '1.0.0',
|
|
323
|
-
installedSkills: {
|
|
324
|
-
'test-skill': {
|
|
325
|
-
id: 'owner/test-skill',
|
|
326
|
-
name: 'test-skill',
|
|
327
|
-
version: '1.0.0',
|
|
328
|
-
source: 'github:owner/test-skill',
|
|
329
|
-
installPath: '/path/to/skill',
|
|
330
|
-
installedAt: '2025-01-01',
|
|
331
|
-
lastUpdated: '2025-01-01',
|
|
332
|
-
},
|
|
333
|
-
},
|
|
334
|
-
};
|
|
335
|
-
// loadOriginal returns original content
|
|
336
|
-
mockedHelpers.loadOriginal.mockResolvedValue(originalContent);
|
|
337
|
-
// current content read from fs
|
|
338
|
-
mockedFs.readFile.mockResolvedValue(currentContent);
|
|
339
|
-
// createSkillBackup mock
|
|
340
|
-
mockedHelpers.createSkillBackup.mockResolvedValue('/backup/path/test-skill');
|
|
341
|
-
// fs operations for writing conflict file
|
|
342
|
-
mockedFs.mkdir.mockResolvedValue(undefined);
|
|
343
|
-
mockedFs.writeFile.mockResolvedValue(undefined);
|
|
344
|
-
const result = await handleMergeAction('test-skill', '/path/to/skill', upstreamContent, manifest, 'owner', 'repo', 'owner/test-skill');
|
|
345
|
-
expect(result.shouldProceed).toBe(false);
|
|
346
|
-
expect(result.backupPath).toBeDefined();
|
|
347
|
-
expect(result.earlyReturn).toBeDefined();
|
|
348
|
-
expect(result.earlyReturn.mergeResult).toBeDefined();
|
|
349
|
-
expect(result.earlyReturn.mergeResult.conflicts.length).toBeGreaterThan(0);
|
|
350
|
-
expect(result.earlyReturn.tips).toBeDefined();
|
|
351
|
-
expect(result.earlyReturn.tips).toContainEqual(expect.stringContaining('conflict'));
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
//# sourceMappingURL=install.conflict.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.conflict.test.js","sourceRoot":"","sources":["../../../src/tools/install.conflict.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit Tests for Three-Way Merge Algorithm
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/merge.test
|
|
4
|
-
* @see SMI-1868, SMI-1879
|
|
5
|
-
*
|
|
6
|
-
* Tests cover:
|
|
7
|
-
* - computeDiff: Line-by-line diff detection
|
|
8
|
-
* - threeWayMerge: Three-way merge with conflict detection
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=merge.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge.test.d.ts","sourceRoot":"","sources":["../../../src/tools/merge.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit Tests for Three-Way Merge Algorithm
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/merge.test
|
|
4
|
-
* @see SMI-1868, SMI-1879
|
|
5
|
-
*
|
|
6
|
-
* Tests cover:
|
|
7
|
-
* - computeDiff: Line-by-line diff detection
|
|
8
|
-
* - threeWayMerge: Three-way merge with conflict detection
|
|
9
|
-
*/
|
|
10
|
-
import { describe, it, expect } from 'vitest';
|
|
11
|
-
// Import functions under test
|
|
12
|
-
import { threeWayMerge, computeDiff } from './merge.js';
|
|
13
|
-
// ============================================================================
|
|
14
|
-
// Tests for computeDiff
|
|
15
|
-
// ============================================================================
|
|
16
|
-
describe('computeDiff', () => {
|
|
17
|
-
it('should detect no changes for identical content', () => {
|
|
18
|
-
const content = `Line 1
|
|
19
|
-
Line 2
|
|
20
|
-
Line 3`;
|
|
21
|
-
const result = computeDiff(content, content);
|
|
22
|
-
expect(result.additions).toHaveLength(0);
|
|
23
|
-
expect(result.deletions).toHaveLength(0);
|
|
24
|
-
expect(result.unchanged).toEqual([1, 2, 3]);
|
|
25
|
-
});
|
|
26
|
-
it('should detect added lines', () => {
|
|
27
|
-
const base = `Line 1
|
|
28
|
-
Line 2`;
|
|
29
|
-
const target = `Line 1
|
|
30
|
-
Line 2
|
|
31
|
-
Line 3`;
|
|
32
|
-
const result = computeDiff(base, target);
|
|
33
|
-
expect(result.additions).toContain(3);
|
|
34
|
-
expect(result.deletions).toHaveLength(0);
|
|
35
|
-
expect(result.unchanged).toEqual([1, 2]);
|
|
36
|
-
});
|
|
37
|
-
it('should detect deleted lines', () => {
|
|
38
|
-
const base = `Line 1
|
|
39
|
-
Line 2
|
|
40
|
-
Line 3`;
|
|
41
|
-
const target = `Line 1
|
|
42
|
-
Line 3`;
|
|
43
|
-
const result = computeDiff(base, target);
|
|
44
|
-
expect(result.deletions).toContain(2);
|
|
45
|
-
expect(result.unchanged).toEqual([1, 3]);
|
|
46
|
-
});
|
|
47
|
-
it('should detect modified lines', () => {
|
|
48
|
-
const base = `Line 1
|
|
49
|
-
Line 2
|
|
50
|
-
Line 3`;
|
|
51
|
-
const target = `Line 1
|
|
52
|
-
Modified Line 2
|
|
53
|
-
Line 3`;
|
|
54
|
-
const result = computeDiff(base, target);
|
|
55
|
-
expect(result.deletions).toContain(2);
|
|
56
|
-
expect(result.additions).toContain(2);
|
|
57
|
-
});
|
|
58
|
-
it('should handle empty base', () => {
|
|
59
|
-
const base = '';
|
|
60
|
-
const target = 'New line';
|
|
61
|
-
const result = computeDiff(base, target);
|
|
62
|
-
// Empty string splits to [''], so there's 1 line that gets "deleted"
|
|
63
|
-
// and 1 line that gets "added"
|
|
64
|
-
expect(result.additions).toContain(1);
|
|
65
|
-
// An empty string still has one "line" (empty line) that counts as a deletion
|
|
66
|
-
expect(result.deletions).toHaveLength(1);
|
|
67
|
-
});
|
|
68
|
-
it('should handle empty target', () => {
|
|
69
|
-
const base = 'Old line';
|
|
70
|
-
const target = '';
|
|
71
|
-
const result = computeDiff(base, target);
|
|
72
|
-
expect(result.deletions).toContain(1);
|
|
73
|
-
// An empty string still has one "line" (empty line) that counts as an addition
|
|
74
|
-
expect(result.additions).toHaveLength(1);
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
// ============================================================================
|
|
78
|
-
// Tests for threeWayMerge
|
|
79
|
-
// ============================================================================
|
|
80
|
-
describe('threeWayMerge', () => {
|
|
81
|
-
describe('edge cases', () => {
|
|
82
|
-
it('should handle all empty content', () => {
|
|
83
|
-
const result = threeWayMerge('', '', '');
|
|
84
|
-
expect(result.success).toBe(true);
|
|
85
|
-
expect(result.merged).toBe('');
|
|
86
|
-
});
|
|
87
|
-
it('should use upstream when local is empty and base is empty', () => {
|
|
88
|
-
const upstream = 'New content';
|
|
89
|
-
const result = threeWayMerge('', '', upstream);
|
|
90
|
-
expect(result.success).toBe(true);
|
|
91
|
-
expect(result.merged).toBe(upstream);
|
|
92
|
-
});
|
|
93
|
-
it('should use local when upstream is empty and base is empty', () => {
|
|
94
|
-
const local = 'Local content';
|
|
95
|
-
const result = threeWayMerge('', local, '');
|
|
96
|
-
expect(result.success).toBe(true);
|
|
97
|
-
expect(result.merged).toBe(local);
|
|
98
|
-
});
|
|
99
|
-
it('should conflict when both have content but no base', () => {
|
|
100
|
-
const local = 'Local content';
|
|
101
|
-
const upstream = 'Upstream content';
|
|
102
|
-
const result = threeWayMerge('', local, upstream);
|
|
103
|
-
expect(result.success).toBe(false);
|
|
104
|
-
expect(result.conflicts).toHaveLength(1);
|
|
105
|
-
expect(result.merged).toContain('<<<<<<< LOCAL');
|
|
106
|
-
expect(result.merged).toContain('>>>>>>> UPSTREAM');
|
|
107
|
-
});
|
|
108
|
-
});
|
|
109
|
-
describe('unchanged scenarios', () => {
|
|
110
|
-
it('should use upstream when local is unchanged', () => {
|
|
111
|
-
const base = 'Original content';
|
|
112
|
-
const local = 'Original content';
|
|
113
|
-
const upstream = 'Updated content';
|
|
114
|
-
const result = threeWayMerge(base, local, upstream);
|
|
115
|
-
expect(result.success).toBe(true);
|
|
116
|
-
expect(result.merged).toBe(upstream);
|
|
117
|
-
});
|
|
118
|
-
it('should use local when upstream is unchanged', () => {
|
|
119
|
-
const base = 'Original content';
|
|
120
|
-
const local = 'Modified content';
|
|
121
|
-
const upstream = 'Original content';
|
|
122
|
-
const result = threeWayMerge(base, local, upstream);
|
|
123
|
-
expect(result.success).toBe(true);
|
|
124
|
-
expect(result.merged).toBe(local);
|
|
125
|
-
});
|
|
126
|
-
it('should use either when both have same changes', () => {
|
|
127
|
-
const base = 'Original content';
|
|
128
|
-
const local = 'Same modified content';
|
|
129
|
-
const upstream = 'Same modified content';
|
|
130
|
-
const result = threeWayMerge(base, local, upstream);
|
|
131
|
-
expect(result.success).toBe(true);
|
|
132
|
-
expect(result.merged).toBe(local);
|
|
133
|
-
});
|
|
134
|
-
});
|
|
135
|
-
describe('clean merges', () => {
|
|
136
|
-
it('should merge non-overlapping changes', () => {
|
|
137
|
-
const base = `Line 1
|
|
138
|
-
Line 2
|
|
139
|
-
Line 3`;
|
|
140
|
-
const local = `Line 1
|
|
141
|
-
Modified Line 2
|
|
142
|
-
Line 3`;
|
|
143
|
-
const upstream = `Line 1
|
|
144
|
-
Line 2
|
|
145
|
-
Modified Line 3`;
|
|
146
|
-
const result = threeWayMerge(base, local, upstream);
|
|
147
|
-
expect(result.success).toBe(true);
|
|
148
|
-
expect(result.merged).toContain('Modified Line 2');
|
|
149
|
-
expect(result.merged).toContain('Modified Line 3');
|
|
150
|
-
});
|
|
151
|
-
it('should handle local additions at end', () => {
|
|
152
|
-
const base = `Line 1
|
|
153
|
-
Line 2`;
|
|
154
|
-
const local = `Line 1
|
|
155
|
-
Line 2
|
|
156
|
-
New local line`;
|
|
157
|
-
const upstream = `Modified Line 1
|
|
158
|
-
Line 2`;
|
|
159
|
-
const result = threeWayMerge(base, local, upstream);
|
|
160
|
-
expect(result.success).toBe(true);
|
|
161
|
-
expect(result.merged).toContain('Modified Line 1');
|
|
162
|
-
expect(result.merged).toContain('New local line');
|
|
163
|
-
});
|
|
164
|
-
it('should handle upstream additions at end', () => {
|
|
165
|
-
const base = `Line 1
|
|
166
|
-
Line 2`;
|
|
167
|
-
const local = `Modified Line 1
|
|
168
|
-
Line 2`;
|
|
169
|
-
const upstream = `Line 1
|
|
170
|
-
Line 2
|
|
171
|
-
New upstream line`;
|
|
172
|
-
const result = threeWayMerge(base, local, upstream);
|
|
173
|
-
expect(result.success).toBe(true);
|
|
174
|
-
expect(result.merged).toContain('Modified Line 1');
|
|
175
|
-
expect(result.merged).toContain('New upstream line');
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
describe('conflicts', () => {
|
|
179
|
-
it('should detect conflict when both modify same line', () => {
|
|
180
|
-
const base = `Line 1
|
|
181
|
-
Line 2
|
|
182
|
-
Line 3`;
|
|
183
|
-
const local = `Line 1
|
|
184
|
-
Local change
|
|
185
|
-
Line 3`;
|
|
186
|
-
const upstream = `Line 1
|
|
187
|
-
Upstream change
|
|
188
|
-
Line 3`;
|
|
189
|
-
const result = threeWayMerge(base, local, upstream);
|
|
190
|
-
expect(result.success).toBe(false);
|
|
191
|
-
expect(result.conflicts).toBeDefined();
|
|
192
|
-
expect(result.conflicts.length).toBeGreaterThan(0);
|
|
193
|
-
expect(result.merged).toContain('<<<<<<< LOCAL');
|
|
194
|
-
expect(result.merged).toContain('=======');
|
|
195
|
-
expect(result.merged).toContain('>>>>>>> UPSTREAM');
|
|
196
|
-
});
|
|
197
|
-
it('should include conflict markers in merged output', () => {
|
|
198
|
-
const base = 'Original';
|
|
199
|
-
const local = 'Local version';
|
|
200
|
-
const upstream = 'Upstream version';
|
|
201
|
-
const result = threeWayMerge(base, local, upstream);
|
|
202
|
-
expect(result.success).toBe(false);
|
|
203
|
-
expect(result.merged).toContain('<<<<<<< LOCAL');
|
|
204
|
-
expect(result.merged).toContain('Local version');
|
|
205
|
-
expect(result.merged).toContain('=======');
|
|
206
|
-
expect(result.merged).toContain('Upstream version');
|
|
207
|
-
expect(result.merged).toContain('>>>>>>> UPSTREAM');
|
|
208
|
-
});
|
|
209
|
-
it('should provide conflict details', () => {
|
|
210
|
-
const base = 'Original';
|
|
211
|
-
const local = 'Local version';
|
|
212
|
-
const upstream = 'Upstream version';
|
|
213
|
-
const result = threeWayMerge(base, local, upstream);
|
|
214
|
-
expect(result.conflicts).toBeDefined();
|
|
215
|
-
expect(result.conflicts[0]).toMatchObject({
|
|
216
|
-
lineNumber: expect.any(Number),
|
|
217
|
-
local: expect.stringContaining('Local'),
|
|
218
|
-
upstream: expect.stringContaining('Upstream'),
|
|
219
|
-
base: expect.any(String),
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
//# sourceMappingURL=merge.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge.test.js","sourceRoot":"","sources":["../../../src/tools/merge.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SMI-1869: Conflict Resolution Flow Integration Tests
|
|
3
|
-
* Tests for conflict detection and resolution during skill reinstallation
|
|
4
|
-
*
|
|
5
|
-
* Split from install.integration.test.ts per governance standards (SMI-1880)
|
|
6
|
-
*/
|
|
7
|
-
export {};
|
|
8
|
-
//# sourceMappingURL=install-conflict.integration.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install-conflict.integration.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/install-conflict.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|