@mytechtoday/augment-sdd 1.0.0 → 1.1.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.
Files changed (58) hide show
  1. package/out/beads/BeadsAdapter.js +30 -0
  2. package/out/beads/BeadsAdapter.js.map +1 -0
  3. package/out/beads/ClassicBeadsAdapter.js +84 -0
  4. package/out/beads/ClassicBeadsAdapter.js.map +1 -0
  5. package/out/beads/PowerShellBeadsAdapter.js +118 -0
  6. package/out/beads/PowerShellBeadsAdapter.js.map +1 -0
  7. package/out/beads/getBeadsAdapter.js +94 -0
  8. package/out/beads/getBeadsAdapter.js.map +1 -0
  9. package/out/commands/executeBeadsBatch.js +29 -15
  10. package/out/commands/executeBeadsBatch.js.map +1 -1
  11. package/out/commands/generateBeads.js +25 -22
  12. package/out/commands/generateBeads.js.map +1 -1
  13. package/out/commands/initWizard.js +184 -0
  14. package/out/commands/initWizard.js.map +1 -0
  15. package/out/extension.js +10 -0
  16. package/out/extension.js.map +1 -1
  17. package/out/test/integration/executeBeadsBatch.test.js +83 -57
  18. package/out/test/integration/executeBeadsBatch.test.js.map +1 -1
  19. package/out/test/integration/generateBeads.test.js +156 -0
  20. package/out/test/integration/generateBeads.test.js.map +1 -0
  21. package/out/test/integration/generateOpenSpec.test.js +16 -39
  22. package/out/test/integration/generateOpenSpec.test.js.map +1 -1
  23. package/out/test/unit/ClassicBeadsAdapter.test.js +121 -0
  24. package/out/test/unit/ClassicBeadsAdapter.test.js.map +1 -0
  25. package/out/test/unit/PowerShellBeadsAdapter.test.js +120 -0
  26. package/out/test/unit/PowerShellBeadsAdapter.test.js.map +1 -0
  27. package/out/test/unit/getBeadsAdapter.test.js +97 -0
  28. package/out/test/unit/getBeadsAdapter.test.js.map +1 -0
  29. package/out/test/unit/initWizard.test.js +170 -0
  30. package/out/test/unit/initWizard.test.js.map +1 -0
  31. package/out/test/unit/runCli.test.js +11 -24
  32. package/out/test/unit/runCli.test.js.map +1 -1
  33. package/out/utils/detectCli.js +47 -1
  34. package/out/utils/detectCli.js.map +1 -1
  35. package/out/utils/runCli.js +9 -3
  36. package/out/utils/runCli.js.map +1 -1
  37. package/package.json +22 -1
  38. package/.eslintrc.json +0 -20
  39. package/src/commands/executeBeadsBatch.ts +0 -153
  40. package/src/commands/fullPipeline.ts +0 -120
  41. package/src/commands/generateBeads.ts +0 -127
  42. package/src/commands/generateOpenSpec.ts +0 -227
  43. package/src/dashboard/DashboardPanel.ts +0 -168
  44. package/src/extension.ts +0 -77
  45. package/src/parsers/parseBeadUpdates.ts +0 -26
  46. package/src/parsers/parseTasksMarkdown.ts +0 -61
  47. package/src/test/integration/executeBeadsBatch.test.ts +0 -129
  48. package/src/test/integration/generateOpenSpec.test.ts +0 -129
  49. package/src/test/runTest.ts +0 -15
  50. package/src/test/suite/index.ts +0 -37
  51. package/src/test/unit/parseBeadUpdates.test.ts +0 -48
  52. package/src/test/unit/parseTasksMarkdown.test.ts +0 -41
  53. package/src/test/unit/runCli.test.ts +0 -109
  54. package/src/utils/detectCli.ts +0 -28
  55. package/src/utils/getConfig.ts +0 -25
  56. package/src/utils/logger.ts +0 -42
  57. package/src/utils/runCli.ts +0 -102
  58. package/tsconfig.json +0 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateBeads.test.js","sourceRoot":"","sources":["../../../src/test/integration/generateBeads.test.ts"],"names":[],"mappings":"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"}
@@ -38,41 +38,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
38
38
  * IT-1: Happy path — proposal.md written, validate passes.
39
39
  * IT-2: Auggie returns empty output on both attempts → showErrorMessage called.
40
40
  *
41
- * Strategy: stub cp.spawn via sinon so no real CLIs are invoked.
42
- * A temp directory is created on each test and wired as the workspace root.
41
+ * Strategy: stub runCli module export instead of cp.spawn.
42
+ * Avoids the non-configurable spawn descriptor error in VS Code Electron.
43
+ * runCli call sequence: init → instructions/proposal → auggie → validate.
43
44
  */
44
45
  const assert = __importStar(require("assert"));
45
- const cp = __importStar(require("child_process"));
46
46
  const fs = __importStar(require("fs"));
47
47
  const os = __importStar(require("os"));
48
48
  const path = __importStar(require("path"));
49
49
  const sinon = __importStar(require("sinon"));
50
50
  const vscode = __importStar(require("vscode"));
51
- const events_1 = require("events");
52
51
  const generateOpenSpec_1 = require("../../commands/generateOpenSpec");
53
- // ---------------------------------------------------------------------------
54
- // Fake process factory (mirrors the one in runCli.test.ts)
55
- // ---------------------------------------------------------------------------
56
- function fakeProc(opts) {
57
- const stdoutEE = new events_1.EventEmitter();
58
- const procEE = new events_1.EventEmitter();
59
- const proc = {
60
- stdout: stdoutEE,
61
- stderr: new events_1.EventEmitter(),
62
- kill: () => { },
63
- on: procEE.on.bind(procEE),
64
- once: procEE.once.bind(procEE),
65
- removeListener: procEE.removeListener.bind(procEE),
66
- emit: procEE.emit.bind(procEE),
67
- };
68
- setImmediate(() => {
69
- if (opts.stdout) {
70
- stdoutEE.emit('data', Buffer.from(opts.stdout));
71
- }
72
- procEE.emit('close', opts.code ?? 0);
73
- });
74
- return proc;
75
- }
52
+ const runCliModule = __importStar(require("../../utils/runCli"));
76
53
  // ---------------------------------------------------------------------------
77
54
  // Helpers
78
55
  // ---------------------------------------------------------------------------
@@ -105,13 +82,13 @@ function stubWorkspace(dir) {
105
82
  suite('generateOpenSpec — integration tests', () => {
106
83
  let tmpDir = '';
107
84
  let restoreWF;
108
- let spawnStub;
85
+ let runCliStub;
109
86
  let infoStub;
110
87
  let errStub;
111
88
  setup(() => {
112
89
  tmpDir = makeTempWorkspace();
113
90
  restoreWF = stubWorkspace(tmpDir);
114
- spawnStub = sinon.stub(cp, 'spawn');
91
+ runCliStub = sinon.stub(runCliModule, 'runCli');
115
92
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
93
  infoStub = sinon.stub(vscode.window, 'showInformationMessage').resolves(undefined);
117
94
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -123,11 +100,11 @@ suite('generateOpenSpec — integration tests', () => {
123
100
  fs.rmSync(tmpDir, { recursive: true, force: true });
124
101
  });
125
102
  test('IT-1: happy path — proposal.md written, validate exits 0', async () => {
126
- // Spawn sequence: init → instructions → auggie → validate
127
- spawnStub.onCall(0).returns(fakeProc({ stdout: '', code: 0 }));
128
- spawnStub.onCall(1).returns(fakeProc({ stdout: '{"template":"Write a proposal."}', code: 0 }));
129
- spawnStub.onCall(2).returns(fakeProc({ stdout: '# Proposal\nContent here.', code: 0 }));
130
- spawnStub.onCall(3).returns(fakeProc({ stdout: 'OK', code: 0 }));
103
+ // runCli call order: openspec init → openspec instructions → auggie → openspec validate
104
+ runCliStub.onCall(0).resolves(''); // openspec init
105
+ runCliStub.onCall(1).resolves('{"template":"Write a proposal."}'); // openspec instructions
106
+ runCliStub.onCall(2).resolves('# Proposal\nContent here.'); // auggie
107
+ runCliStub.onCall(3).resolves('OK'); // openspec validate
131
108
  await (0, generateOpenSpec_1.generateOpenSpec)();
132
109
  // proposal.md must have been written
133
110
  const proposalPath = path.join(tmpDir, 'openspec', 'changes', 'test-change', 'proposal.md');
@@ -139,11 +116,11 @@ suite('generateOpenSpec — integration tests', () => {
139
116
  assert.ok(!errStub.called, 'showErrorMessage should NOT be called on success');
140
117
  });
141
118
  test('IT-2: Auggie returns empty on both attempts → showErrorMessage called', async () => {
142
- // init → instructions → auggie (empty) → auggie retry (empty)
143
- spawnStub.onCall(0).returns(fakeProc({ stdout: '', code: 0 }));
144
- spawnStub.onCall(1).returns(fakeProc({ stdout: '{"template":"template"}', code: 0 }));
145
- spawnStub.onCall(2).returns(fakeProc({ stdout: '', code: 0 }));
146
- spawnStub.onCall(3).returns(fakeProc({ stdout: '', code: 0 }));
119
+ // runCli order: init → instructions → auggie (empty) → auggie retry (empty) → throws
120
+ runCliStub.onCall(0).resolves(''); // openspec init
121
+ runCliStub.onCall(1).resolves('{"template":"template"}'); // openspec instructions
122
+ runCliStub.onCall(2).resolves(''); // auggie attempt 1 → empty
123
+ runCliStub.onCall(3).resolves(''); // auggie retry → empty
147
124
  await (0, generateOpenSpec_1.generateOpenSpec)();
148
125
  // Error message must be shown; no proposal file written
149
126
  assert.ok(errStub.called, 'showErrorMessage should be called after two empty Auggie attempts');
@@ -1 +1 @@
1
- {"version":3,"file":"generateOpenSpec.test.js","sourceRoot":"","sources":["../../../src/test/integration/generateOpenSpec.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateOpenSpec.test.js","sourceRoot":"","sources":["../../../src/test/integration/generateOpenSpec.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ /**
37
+ * Unit tests for ClassicBeadsAdapter (UT-1, UT-2 - ps-fix test-spec.md)
38
+ *
39
+ * Strategy: stub runCli module export so no real bd CLI is required.
40
+ * Avoids cp.spawn non-configurable property issue in VS Code Electron.
41
+ */
42
+ const assert = __importStar(require("assert"));
43
+ const sinon = __importStar(require("sinon"));
44
+ const runCliModule = __importStar(require("../../utils/runCli"));
45
+ const ClassicBeadsAdapter_1 = require("../../beads/ClassicBeadsAdapter");
46
+ const BeadsAdapter_1 = require("../../beads/BeadsAdapter");
47
+ suite('ClassicBeadsAdapter - unit tests', () => {
48
+ const ROOT = '/fake/workspace';
49
+ let runCliStub;
50
+ setup(() => {
51
+ runCliStub = sinon.stub(runCliModule, 'runCli');
52
+ });
53
+ teardown(() => {
54
+ sinon.restore();
55
+ });
56
+ test('UT-1: ready() parses JSON array and passes ready/--json args', async () => {
57
+ const beads = [
58
+ { id: 'bd-001', title: 'Alpha', description: 'Do alpha', status: 'open', priority: 2 },
59
+ ];
60
+ runCliStub.resolves(JSON.stringify(beads));
61
+ const adapter = new ClassicBeadsAdapter_1.ClassicBeadsAdapter(ROOT);
62
+ const result = await adapter.ready();
63
+ assert.deepStrictEqual(result, beads);
64
+ const [cmd, args] = runCliStub.firstCall.args;
65
+ assert.strictEqual(cmd, 'bd');
66
+ assert.ok(args.includes('ready'));
67
+ assert.ok(args.includes('--json'));
68
+ });
69
+ test('UT-1b: ready(limit) appends --limit to args', async () => {
70
+ runCliStub.resolves('[]');
71
+ const adapter = new ClassicBeadsAdapter_1.ClassicBeadsAdapter(ROOT);
72
+ await adapter.ready(5);
73
+ const [, args] = runCliStub.firstCall.args;
74
+ const limitIdx = args.indexOf('--limit');
75
+ assert.ok(limitIdx !== -1);
76
+ assert.strictEqual(args[limitIdx + 1], '5');
77
+ });
78
+ test('UT-1c: ready() throws BeadsParseError on malformed JSON', async () => {
79
+ runCliStub.resolves('NOT_JSON');
80
+ const adapter = new ClassicBeadsAdapter_1.ClassicBeadsAdapter(ROOT);
81
+ await assert.rejects(adapter.ready(), BeadsAdapter_1.BeadsParseError);
82
+ });
83
+ test('UT-2: create() returns id from {"id":"bd-abc"}', async () => {
84
+ runCliStub.resolves(JSON.stringify({ id: 'bd-abc' }));
85
+ const adapter = new ClassicBeadsAdapter_1.ClassicBeadsAdapter(ROOT);
86
+ const id = await adapter.create('My Task', 'Some description');
87
+ assert.strictEqual(id, 'bd-abc');
88
+ const [cmd, args] = runCliStub.firstCall.args;
89
+ assert.strictEqual(cmd, 'bd');
90
+ assert.ok(args.includes('create'));
91
+ assert.ok(args.includes('--json'));
92
+ assert.ok(args.includes('My Task'));
93
+ });
94
+ test('UT-2b: create() throws BeadsParseError on malformed JSON', async () => {
95
+ runCliStub.resolves('oops');
96
+ const adapter = new ClassicBeadsAdapter_1.ClassicBeadsAdapter(ROOT);
97
+ await assert.rejects(adapter.create('T', 'D'), BeadsAdapter_1.BeadsParseError);
98
+ });
99
+ test('update() calls bd with correct args', async () => {
100
+ runCliStub.resolves('');
101
+ const adapter = new ClassicBeadsAdapter_1.ClassicBeadsAdapter(ROOT);
102
+ await adapter.update('bd-xyz', 'done');
103
+ const [cmd, args] = runCliStub.firstCall.args;
104
+ assert.strictEqual(cmd, 'bd');
105
+ assert.ok(args.includes('update'));
106
+ assert.ok(args.includes('bd-xyz'));
107
+ assert.ok(args.includes('--status'));
108
+ assert.ok(args.includes('done'));
109
+ });
110
+ test('search() parses JSON array', async () => {
111
+ const beads = [{ id: 'bd-s1', title: 'Search hit', description: '', status: 'open', priority: 3 }];
112
+ runCliStub.resolves(JSON.stringify(beads));
113
+ const adapter = new ClassicBeadsAdapter_1.ClassicBeadsAdapter(ROOT);
114
+ const result = await adapter.search('hit');
115
+ assert.deepStrictEqual(result, beads);
116
+ const [, args] = runCliStub.firstCall.args;
117
+ assert.ok(args.includes('search'));
118
+ assert.ok(args.includes('hit'));
119
+ });
120
+ });
121
+ //# sourceMappingURL=ClassicBeadsAdapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClassicBeadsAdapter.test.js","sourceRoot":"","sources":["../../../src/test/unit/ClassicBeadsAdapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ /**
37
+ * Unit tests for PowerShellBeadsAdapter (UT-3 - ps-fix test-spec.md)
38
+ *
39
+ * Strategy: stub runCli and detectCli module exports.
40
+ * Avoids cp.spawn non-configurable property issue in VS Code Electron.
41
+ */
42
+ const assert = __importStar(require("assert"));
43
+ const sinon = __importStar(require("sinon"));
44
+ const runCliModule = __importStar(require("../../utils/runCli"));
45
+ const detectCliModule = __importStar(require("../../utils/detectCli"));
46
+ const PowerShellBeadsAdapter_1 = require("../../beads/PowerShellBeadsAdapter");
47
+ const BeadsAdapter_1 = require("../../beads/BeadsAdapter");
48
+ const SCRIPT = '/workspace/scripts/beads-query.ps1';
49
+ const ROOT = '/workspace';
50
+ suite('PowerShellBeadsAdapter - unit tests', () => {
51
+ let runCliStub;
52
+ let detectCliStub;
53
+ setup(() => {
54
+ runCliStub = sinon.stub(runCliModule, 'runCli');
55
+ detectCliStub = sinon.stub(detectCliModule, 'detectCli');
56
+ });
57
+ teardown(() => {
58
+ sinon.restore();
59
+ });
60
+ test('UT-3: ready() passes correct pwsh -File <script> ready -Json args', async () => {
61
+ const beads = [
62
+ { id: 'bd-ps1', title: 'PS Bead', description: 'Do it', status: 'open', priority: 2 },
63
+ ];
64
+ detectCliStub.withArgs('pwsh').resolves(true);
65
+ runCliStub.resolves(JSON.stringify(beads));
66
+ const adapter = new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(ROOT, SCRIPT);
67
+ const result = await adapter.ready();
68
+ assert.deepStrictEqual(result, beads);
69
+ const [cmd, args] = runCliStub.firstCall.args;
70
+ assert.strictEqual(cmd, 'pwsh');
71
+ assert.strictEqual(args[0], '-File');
72
+ assert.strictEqual(args[1], SCRIPT);
73
+ assert.strictEqual(args[2], 'ready');
74
+ assert.ok(args.includes('-Json'));
75
+ });
76
+ test('UT-3b: ready(limit) appends -Limit to args', async () => {
77
+ detectCliStub.withArgs('pwsh').resolves(true);
78
+ runCliStub.resolves('[]');
79
+ const adapter = new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(ROOT, SCRIPT);
80
+ await adapter.ready(4);
81
+ const [, args] = runCliStub.firstCall.args;
82
+ const limitIdx = args.indexOf('-Limit');
83
+ assert.ok(limitIdx !== -1);
84
+ assert.strictEqual(args[limitIdx + 1], '4');
85
+ });
86
+ test('UT-3c: ready() throws BeadsParseError on malformed JSON', async () => {
87
+ detectCliStub.withArgs('pwsh').resolves(true);
88
+ runCliStub.resolves('NOT_JSON');
89
+ const adapter = new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(ROOT, SCRIPT);
90
+ await assert.rejects(adapter.ready(), BeadsAdapter_1.BeadsParseError);
91
+ });
92
+ test('update() maps in_progress -> in-progress for PS convention', async () => {
93
+ detectCliStub.withArgs('pwsh').resolves(true);
94
+ runCliStub.resolves('');
95
+ const adapter = new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(ROOT, SCRIPT);
96
+ await adapter.update('bd-xyz', 'in_progress');
97
+ const [, args] = runCliStub.firstCall.args;
98
+ const statusIdx = args.indexOf('-Status');
99
+ assert.ok(statusIdx !== -1);
100
+ assert.strictEqual(args[statusIdx + 1], 'in-progress');
101
+ });
102
+ test('update() passes done unchanged', async () => {
103
+ detectCliStub.withArgs('pwsh').resolves(true);
104
+ runCliStub.resolves('');
105
+ const adapter = new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(ROOT, SCRIPT);
106
+ await adapter.update('bd-xyz', 'done');
107
+ const [, args] = runCliStub.firstCall.args;
108
+ const statusIdx = args.indexOf('-Status');
109
+ assert.strictEqual(args[statusIdx + 1], 'done');
110
+ });
111
+ test('falls back to powershell when pwsh is absent', async () => {
112
+ detectCliStub.withArgs('pwsh').resolves(false);
113
+ runCliStub.resolves('[]');
114
+ const adapter = new PowerShellBeadsAdapter_1.PowerShellBeadsAdapter(ROOT, SCRIPT);
115
+ await adapter.ready();
116
+ const [cmd] = runCliStub.firstCall.args;
117
+ assert.strictEqual(cmd, 'powershell');
118
+ });
119
+ });
120
+ //# sourceMappingURL=PowerShellBeadsAdapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PowerShellBeadsAdapter.test.js","sourceRoot":"","sources":["../../../src/test/unit/PowerShellBeadsAdapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ /**
37
+ * Unit tests for getBeadsAdapter factory (UT-4 - ps-fix test-spec.md)
38
+ *
39
+ * Strategy: stub detectCli module export instead of cp.spawn.
40
+ */
41
+ const assert = __importStar(require("assert"));
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const sinon = __importStar(require("sinon"));
46
+ const vscode = __importStar(require("vscode"));
47
+ const detectCliModule = __importStar(require("../../utils/detectCli"));
48
+ const getBeadsAdapter_1 = require("../../beads/getBeadsAdapter");
49
+ const ClassicBeadsAdapter_1 = require("../../beads/ClassicBeadsAdapter");
50
+ const PowerShellBeadsAdapter_1 = require("../../beads/PowerShellBeadsAdapter");
51
+ function stubBackend(backend) {
52
+ sinon.stub(vscode.workspace, 'getConfiguration').returns({
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ get: (key, def) => key === 'beadsBackend' ? backend : def,
55
+ });
56
+ }
57
+ suite('getBeadsAdapter - unit tests', () => {
58
+ let tmpDir;
59
+ setup(() => {
60
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'augsdd-gba-'));
61
+ });
62
+ teardown(() => {
63
+ sinon.restore();
64
+ fs.rmSync(tmpDir, { recursive: true, force: true });
65
+ });
66
+ test('UT-4a: backend="bd" -> ClassicBeadsAdapter', async () => {
67
+ stubBackend('bd');
68
+ const adapter = await (0, getBeadsAdapter_1.getBeadsAdapter)(tmpDir);
69
+ assert.ok(adapter instanceof ClassicBeadsAdapter_1.ClassicBeadsAdapter);
70
+ });
71
+ test('UT-4b: backend="beads-ps1" -> PowerShellBeadsAdapter', async () => {
72
+ stubBackend('beads-ps1');
73
+ const adapter = await (0, getBeadsAdapter_1.getBeadsAdapter)(tmpDir);
74
+ assert.ok(adapter instanceof PowerShellBeadsAdapter_1.PowerShellBeadsAdapter);
75
+ });
76
+ test('UT-4c: auto + bd on PATH -> ClassicBeadsAdapter', async () => {
77
+ stubBackend('auto');
78
+ sinon.stub(detectCliModule, 'detectCli').withArgs('bd').resolves(true);
79
+ const adapter = await (0, getBeadsAdapter_1.getBeadsAdapter)(tmpDir);
80
+ assert.ok(adapter instanceof ClassicBeadsAdapter_1.ClassicBeadsAdapter);
81
+ });
82
+ test('UT-4d: auto + bd absent + script present -> PowerShellBeadsAdapter', async () => {
83
+ stubBackend('auto');
84
+ sinon.stub(detectCliModule, 'detectCli').withArgs('bd').resolves(false);
85
+ const scriptsDir = path.join(tmpDir, 'scripts');
86
+ fs.mkdirSync(scriptsDir);
87
+ fs.writeFileSync(path.join(scriptsDir, 'beads-query.ps1'), '# stub');
88
+ const adapter = await (0, getBeadsAdapter_1.getBeadsAdapter)(tmpDir);
89
+ assert.ok(adapter instanceof PowerShellBeadsAdapter_1.PowerShellBeadsAdapter);
90
+ });
91
+ test('UT-4e: auto + neither present -> throws actionable error', async () => {
92
+ stubBackend('auto');
93
+ sinon.stub(detectCliModule, 'detectCli').withArgs('bd').resolves(false);
94
+ await assert.rejects((0, getBeadsAdapter_1.getBeadsAdapter)(tmpDir), /augmentSdd\.init/i);
95
+ });
96
+ });
97
+ //# sourceMappingURL=getBeadsAdapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBeadsAdapter.test.js","sourceRoot":"","sources":["../../../src/test/unit/getBeadsAdapter.test.ts"],"names":[],"mappings":"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"}