sqlew 4.1.0 → 4.1.2
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/CHANGELOG.md +1830 -1805
- package/dist/database/initialization/schema-version.js +1 -1
- package/dist/database/initialization/schema-version.js.map +1 -1
- package/dist/database/migrations/v4/20251126000000_v4_bootstrap.js +27 -27
- package/dist/database/migrations/v4/20251126000000_v4_bootstrap.js.map +1 -1
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js +33 -33
- package/dist/database/migrations/v4/20251126000001_v4_migrate_data.js.map +1 -1
- package/dist/database/migrations/v4/20251127000000_add_rejected_status.js +7 -7
- package/dist/database/migrations/v4/20251127000000_add_rejected_status.js.map +1 -1
- package/dist/database/migrations/v4/20251127000001_update_task_move_help.js +11 -11
- package/dist/database/migrations/v4/20251127000001_update_task_move_help.js.map +1 -1
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js +10 -10
- package/dist/database/migrations/v4/20251127000002_v4_seed_help_system.js.map +1 -1
- package/dist/database/migrations/v4/20251127000003_add_task_notes_column.js +7 -7
- package/dist/database/migrations/v4/20251127000003_add_task_notes_column.js.map +1 -1
- package/dist/database/migrations/v4/20251128000000_drop_all_views.js +8 -8
- package/dist/database/migrations/v4/20251128000000_drop_all_views.js.map +1 -1
- package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.d.ts +14 -0
- package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.js +201 -0
- package/dist/database/migrations/v4/20251225000000_v4_seed_missing_help_data.js.map +1 -0
- package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.d.ts +12 -0
- package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.d.ts.map +1 -0
- package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.js +61 -0
- package/dist/database/migrations/v4/20251225000001_v4_fix_help_params.js.map +1 -0
- package/dist/server/setup.d.ts.map +1 -1
- package/dist/server/setup.js +28 -6
- package/dist/server/setup.js.map +1 -1
- package/dist/tests/database/sql-dump/table-ordering.test.js +6 -1
- package/dist/tests/database/sql-dump/table-ordering.test.js.map +1 -1
- package/dist/tests/docker/native/constraint-operations.test.js +74 -137
- package/dist/tests/docker/native/constraint-operations.test.js.map +1 -1
- package/dist/tests/docker/native/decision-operations.test.js +52 -40
- package/dist/tests/docker/native/decision-operations.test.js.map +1 -1
- package/dist/tests/docker/native/help-system.test.d.ts +3 -2
- package/dist/tests/docker/native/help-system.test.d.ts.map +1 -1
- package/dist/tests/docker/native/help-system.test.js +90 -80
- package/dist/tests/docker/native/help-system.test.js.map +1 -1
- package/dist/tests/docker/native/suggest-tool.test.d.ts +2 -2
- package/dist/tests/docker/native/suggest-tool.test.js +130 -63
- package/dist/tests/docker/native/suggest-tool.test.js.map +1 -1
- package/dist/tests/docker/native/task-operations.test.js +9 -19
- package/dist/tests/docker/native/task-operations.test.js.map +1 -1
- package/dist/tests/docker/native/test-harness.d.ts.map +1 -1
- package/dist/tests/docker/native/test-harness.js +6 -5
- package/dist/tests/docker/native/test-harness.js.map +1 -1
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js +7 -8
- package/dist/tests/feature/decision/batch-validation-comprehensive.test.js.map +1 -1
- package/dist/tests/feature/decision/context-modular.test.js +1 -3
- package/dist/tests/feature/decision/context-modular.test.js.map +1 -1
- package/dist/tests/feature/help/help-system.test.d.ts +1 -13
- package/dist/tests/feature/help/help-system.test.d.ts.map +1 -1
- package/dist/tests/feature/help/help-system.test.js +107 -331
- package/dist/tests/feature/help/help-system.test.js.map +1 -1
- package/dist/tests/feature/task/auto-pruning-decision-link.test.js +2 -4
- package/dist/tests/feature/task/auto-pruning-decision-link.test.js.map +1 -1
- package/dist/tests/integration/all-features.standalone.js +1 -3
- package/dist/tests/integration/all-features.standalone.js.map +1 -1
- package/dist/tests/migrations/test-all-versions-real.js +2 -4
- package/dist/tests/migrations/test-all-versions-real.js.map +1 -1
- package/dist/tests/migrations/test-all-versions.js +3 -7
- package/dist/tests/migrations/test-all-versions.js.map +1 -1
- package/dist/tests/unit/universal-knex.test.js +3 -0
- package/dist/tests/unit/universal-knex.test.js.map +1 -1
- package/dist/tests/unit/utils/config-loader.test.js +130 -191
- package/dist/tests/unit/utils/config-loader.test.js.map +1 -1
- package/dist/tests/unit/utils/project-detector.test.js +24 -0
- package/dist/tests/unit/utils/project-detector.test.js.map +1 -1
- package/dist/tests/unit/validation/parameter-validation.test.js +2 -2
- package/dist/tests/unit/validation/parameter-validation.test.js.map +1 -1
- package/dist/tests/unit/validation/policy-validation.test.js +1 -3
- package/dist/tests/unit/validation/policy-validation.test.js.map +1 -1
- package/dist/tools/files/help/example.js +8 -8
- package/dist/tools/files/help/example.js.map +1 -1
- package/dist/tools/files/help/help.js +4 -4
- package/dist/tools/files/help/help.js.map +1 -1
- package/dist/tools/files/internal/validation.d.ts.map +1 -1
- package/dist/tools/files/internal/validation.js +1 -2
- package/dist/tools/files/internal/validation.js.map +1 -1
- package/dist/tools/help-queries.d.ts.map +1 -1
- package/dist/tools/help-queries.js +57 -27
- package/dist/tools/help-queries.js.map +1 -1
- package/dist/tools/suggest/actions/by-tags.d.ts.map +1 -1
- package/dist/tools/suggest/actions/by-tags.js +3 -1
- package/dist/tools/suggest/actions/by-tags.js.map +1 -1
- package/dist/tools/suggest/help/constraint-help.js +2 -2
- package/dist/tools/suggest/help/constraint-help.js.map +1 -1
- package/dist/tools/tasks/help/example.d.ts.map +1 -1
- package/dist/tools/tasks/help/example.js +10 -0
- package/dist/tools/tasks/help/example.js.map +1 -1
- package/dist/tools/tasks/help/help.d.ts.map +1 -1
- package/dist/tools/tasks/help/help.js +10 -0
- package/dist/tools/tasks/help/help.js.map +1 -1
- package/dist/tools/use_case/actions/search.js +5 -5
- package/dist/tools/use_case/actions/search.js.map +1 -1
- package/dist/tools/use_case/help/example.d.ts +2 -7
- package/dist/tools/use_case/help/example.d.ts.map +1 -1
- package/dist/tools/use_case/help/example.js +24 -37
- package/dist/tools/use_case/help/example.js.map +1 -1
- package/dist/tools/use_case/help/help.js +1 -1
- package/dist/tools/use_case/help/help.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/action-specs/decision-specs.d.ts.map +1 -1
- package/dist/utils/action-specs/decision-specs.js +2 -3
- package/dist/utils/action-specs/decision-specs.js.map +1 -1
- package/dist/utils/action-specs/file-specs.d.ts.map +1 -1
- package/dist/utils/action-specs/file-specs.js +4 -6
- package/dist/utils/action-specs/file-specs.js.map +1 -1
- package/dist/utils/db-aggregations.d.ts.map +1 -1
- package/dist/utils/db-aggregations.js +44 -1
- package/dist/utils/db-aggregations.js.map +1 -1
- package/dist/utils/project-detector.js +21 -6
- package/dist/utils/project-detector.js.map +1 -1
- package/dist/utils/suggestion-scorer.d.ts.map +1 -1
- package/dist/utils/suggestion-scorer.js +5 -0
- package/dist/utils/suggestion-scorer.js.map +1 -1
- package/dist/utils/universal-knex.js +3 -3
- package/dist/utils/universal-knex.js.map +1 -1
- package/package.json +87 -123
- package/dist/tests/feature/vcs/git-aware-completion.test.d.ts +0 -6
- package/dist/tests/feature/vcs/git-aware-completion.test.d.ts.map +0 -1
- package/dist/tests/feature/vcs/git-aware-completion.test.js +0 -197
- package/dist/tests/feature/vcs/git-aware-completion.test.js.map +0 -1
- package/dist/tests/feature/vcs/two-step-git-completion.test.d.ts +0 -6
- package/dist/tests/feature/vcs/two-step-git-completion.test.d.ts.map +0 -1
- package/dist/tests/feature/vcs/two-step-git-completion.test.js +0 -305
- package/dist/tests/feature/vcs/two-step-git-completion.test.js.map +0 -1
- package/dist/tests/feature/vcs/vcs-staging.test.d.ts +0 -6
- package/dist/tests/feature/vcs/vcs-staging.test.d.ts.map +0 -1
- package/dist/tests/feature/vcs/vcs-staging.test.js +0 -142
- package/dist/tests/feature/vcs/vcs-staging.test.js.map +0 -1
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Git-Aware Auto-Complete Tests (v3.4.0)
|
|
3
|
-
* Tests for detectAndCompleteReviewedTasks function
|
|
4
|
-
*/
|
|
5
|
-
import { describe, it, before, after } from 'node:test';
|
|
6
|
-
import assert from 'node:assert';
|
|
7
|
-
import { mkdirSync, rmSync, existsSync } from 'fs';
|
|
8
|
-
import { join } from 'path';
|
|
9
|
-
import { execSync } from 'child_process';
|
|
10
|
-
import { initializeDatabase, closeDatabase, setConfigValue } from '../../../database.js';
|
|
11
|
-
import { detectAndCompleteReviewedTasks } from '../../../utils/task-stale-detection.js';
|
|
12
|
-
import { ProjectContext } from '../../../utils/project-context.js';
|
|
13
|
-
const TEST_DIR = join(process.cwd(), 'test-tracking');
|
|
14
|
-
// Helper to clean up test directory
|
|
15
|
-
function cleanupTestDir() {
|
|
16
|
-
if (existsSync(TEST_DIR)) {
|
|
17
|
-
rmSync(TEST_DIR, { recursive: true, force: true });
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
// Helper to get current git HEAD hash
|
|
21
|
-
function getGitHead() {
|
|
22
|
-
try {
|
|
23
|
-
return execSync('git rev-parse HEAD', { encoding: 'utf-8' }).trim();
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Helper to reset git to a specific commit
|
|
30
|
-
function resetGitTo(commitHash) {
|
|
31
|
-
try {
|
|
32
|
-
execSync(`git reset --hard ${commitHash}`, { stdio: 'ignore' });
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
// Ignore errors (e.g., if reset fails)
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
describe('Git-Aware Auto-Complete', () => {
|
|
39
|
-
let db;
|
|
40
|
-
let initialGitHead = null;
|
|
41
|
-
before(async () => {
|
|
42
|
-
// Record initial git HEAD to reset after tests (cleanup test commits)
|
|
43
|
-
initialGitHead = getGitHead();
|
|
44
|
-
// Clean up before tests
|
|
45
|
-
cleanupTestDir();
|
|
46
|
-
// Configure git user for test commits (required if not set globally)
|
|
47
|
-
try {
|
|
48
|
-
execSync('git config user.email 2>/dev/null || git config user.email "test@example.com"', { stdio: 'ignore' });
|
|
49
|
-
execSync('git config user.name 2>/dev/null || git config user.name "Test User"', { stdio: 'ignore' });
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// Ignore - may already be configured
|
|
53
|
-
}
|
|
54
|
-
// Create test database (in-memory)
|
|
55
|
-
db = await initializeDatabase({
|
|
56
|
-
databaseType: 'sqlite',
|
|
57
|
-
connection: {
|
|
58
|
-
filename: ':memory:'
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
const knex = db.getKnex();
|
|
62
|
-
// Initialize ProjectContext (required for v3.7.0+ multi-project support)
|
|
63
|
-
const projectContext = ProjectContext.getInstance();
|
|
64
|
-
await projectContext.ensureProject(knex, 'test-git-aware-completion', 'config', {
|
|
65
|
-
projectRootPath: process.cwd(),
|
|
66
|
-
});
|
|
67
|
-
// Add test config for git auto-complete (v4.0: in-memory config)
|
|
68
|
-
await setConfigValue(db, 'git_auto_complete_enabled', '1');
|
|
69
|
-
await setConfigValue(db, 'require_all_files_committed', '1');
|
|
70
|
-
// Create test directory
|
|
71
|
-
if (!existsSync(TEST_DIR)) {
|
|
72
|
-
mkdirSync(TEST_DIR, { recursive: true });
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
after(async () => {
|
|
76
|
-
// Close database
|
|
77
|
-
if (db) {
|
|
78
|
-
await closeDatabase();
|
|
79
|
-
}
|
|
80
|
-
// Clean up test directory
|
|
81
|
-
cleanupTestDir();
|
|
82
|
-
// Reset git to initial HEAD to drop test commits
|
|
83
|
-
if (initialGitHead) {
|
|
84
|
-
resetGitTo(initialGitHead);
|
|
85
|
-
}
|
|
86
|
-
});
|
|
87
|
-
it('should auto-complete task when all watched files are committed', async () => {
|
|
88
|
-
const knex = db.getKnex();
|
|
89
|
-
const projectId = ProjectContext.getInstance().getProjectId();
|
|
90
|
-
// 1. Create a task in waiting_review status with watched files
|
|
91
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
92
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
93
|
-
title: 'Test git-aware task',
|
|
94
|
-
status_id: statusRow.id,
|
|
95
|
-
priority: 2,
|
|
96
|
-
project_id: projectId,
|
|
97
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
98
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
99
|
-
});
|
|
100
|
-
// 2. Add watched files
|
|
101
|
-
const [file1Id] = await knex('v4_files').insert({ path: 'test-tracking/file1.ts' });
|
|
102
|
-
const [file2Id] = await knex('v4_files').insert({ path: 'test-tracking/file2.ts' });
|
|
103
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file1Id, project_id: projectId, linked_ts: Math.floor(Date.now() / 1000) });
|
|
104
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file2Id, project_id: projectId, linked_ts: Math.floor(Date.now() / 1000) });
|
|
105
|
-
// 3. Commit the files to git
|
|
106
|
-
execSync(`touch ${TEST_DIR}/file1.ts`);
|
|
107
|
-
execSync(`touch ${TEST_DIR}/file2.ts`);
|
|
108
|
-
execSync(`git add ${TEST_DIR}/file1.ts ${TEST_DIR}/file2.ts`);
|
|
109
|
-
execSync(`git commit -m "Test commit for git-aware completion"`);
|
|
110
|
-
// 4. Run git-aware auto-complete
|
|
111
|
-
const completedCount = await detectAndCompleteReviewedTasks(db);
|
|
112
|
-
// 5. Verify task was auto-completed
|
|
113
|
-
assert.strictEqual(completedCount, 1, 'Should auto-complete 1 task');
|
|
114
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
115
|
-
const doneStatus = await knex('v4_task_statuses').where({ name: 'done' }).first('id');
|
|
116
|
-
assert.strictEqual(task.status_id, doneStatus.id, 'Task should be in done status');
|
|
117
|
-
});
|
|
118
|
-
it('should NOT auto-complete task when only some files are committed', async () => {
|
|
119
|
-
const knex = db.getKnex();
|
|
120
|
-
const projectId = ProjectContext.getInstance().getProjectId();
|
|
121
|
-
// 1. Create a task in waiting_review
|
|
122
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
123
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
124
|
-
title: 'Partial commit task',
|
|
125
|
-
status_id: statusRow.id,
|
|
126
|
-
priority: 2,
|
|
127
|
-
project_id: projectId,
|
|
128
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
129
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
130
|
-
});
|
|
131
|
-
// 2. Add watched files
|
|
132
|
-
const [file3Id] = await knex('v4_files').insert({ path: 'test-tracking/file3.ts' });
|
|
133
|
-
const [file4Id] = await knex('v4_files').insert({ path: 'test-tracking/file4.ts' });
|
|
134
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file3Id, project_id: projectId, linked_ts: Math.floor(Date.now() / 1000) });
|
|
135
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file4Id, project_id: projectId, linked_ts: Math.floor(Date.now() / 1000) });
|
|
136
|
-
// 3. Commit only ONE file
|
|
137
|
-
execSync(`touch ${TEST_DIR}/file3.ts`);
|
|
138
|
-
execSync(`git add ${TEST_DIR}/file3.ts`);
|
|
139
|
-
execSync(`git commit -m "Partial commit - only file3"`);
|
|
140
|
-
// 4. Run git-aware auto-complete
|
|
141
|
-
const completedCount = await detectAndCompleteReviewedTasks(db);
|
|
142
|
-
// 5. Verify task was NOT auto-completed (still in waiting_review)
|
|
143
|
-
assert.strictEqual(completedCount, 0, 'Should NOT auto-complete task with partial commits');
|
|
144
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
145
|
-
const waitingReviewStatus = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
146
|
-
assert.strictEqual(task.status_id, waitingReviewStatus.id, 'Task should still be in waiting_review status');
|
|
147
|
-
});
|
|
148
|
-
it('should skip tasks with no watched files', async () => {
|
|
149
|
-
const knex = db.getKnex();
|
|
150
|
-
const projectId = ProjectContext.getInstance().getProjectId();
|
|
151
|
-
// 1. Create a task in waiting_review with NO watched files
|
|
152
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
153
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
154
|
-
title: 'No watched files task',
|
|
155
|
-
status_id: statusRow.id,
|
|
156
|
-
priority: 2,
|
|
157
|
-
project_id: projectId,
|
|
158
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
159
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
160
|
-
});
|
|
161
|
-
// 2. Run git-aware auto-complete
|
|
162
|
-
const completedCount = await detectAndCompleteReviewedTasks(db);
|
|
163
|
-
// 3. Verify no tasks were auto-completed
|
|
164
|
-
assert.strictEqual(completedCount, 0, 'Should skip tasks with no watched files');
|
|
165
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
166
|
-
const waitingReviewStatus = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
167
|
-
assert.strictEqual(task.status_id, waitingReviewStatus.id, 'Task should still be in waiting_review status');
|
|
168
|
-
});
|
|
169
|
-
it('should respect git_auto_complete_enabled config', async () => {
|
|
170
|
-
const knex = db.getKnex();
|
|
171
|
-
const projectId = ProjectContext.getInstance().getProjectId();
|
|
172
|
-
// 1. Disable git auto-complete (v4.0: in-memory config)
|
|
173
|
-
await setConfigValue(db, 'git_auto_complete_enabled', '0');
|
|
174
|
-
// 2. Create a task with all files committed
|
|
175
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
176
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
177
|
-
title: 'Config disabled task',
|
|
178
|
-
status_id: statusRow.id,
|
|
179
|
-
priority: 2,
|
|
180
|
-
project_id: projectId,
|
|
181
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
182
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
183
|
-
});
|
|
184
|
-
const [file5Id] = await knex('v4_files').insert({ path: 'test-tracking/file5.ts' });
|
|
185
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file5Id, project_id: projectId, linked_ts: Math.floor(Date.now() / 1000) });
|
|
186
|
-
execSync(`touch ${TEST_DIR}/file5.ts`);
|
|
187
|
-
execSync(`git add ${TEST_DIR}/file5.ts`);
|
|
188
|
-
execSync(`git commit -m "Test with config disabled"`);
|
|
189
|
-
// 3. Run git-aware auto-complete (should skip due to config)
|
|
190
|
-
const completedCount = await detectAndCompleteReviewedTasks(db);
|
|
191
|
-
// 4. Verify no tasks were auto-completed
|
|
192
|
-
assert.strictEqual(completedCount, 0, 'Should respect disabled config');
|
|
193
|
-
// Re-enable for other tests (v4.0: in-memory config)
|
|
194
|
-
await setConfigValue(db, 'git_auto_complete_enabled', '1');
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
//# sourceMappingURL=git-aware-completion.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-aware-completion.test.js","sourceRoot":"","sources":["../../../../src/tests/feature/vcs/git-aware-completion.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"two-step-git-completion.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/feature/vcs/two-step-git-completion.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Integration Tests - Two-Step Git-Aware Task Workflow (v3.5.2)
|
|
3
|
-
* Tests the complete workflow: staging → done, commit → archived
|
|
4
|
-
*/
|
|
5
|
-
import { describe, it, before, after, beforeEach } from 'node:test';
|
|
6
|
-
import assert from 'node:assert';
|
|
7
|
-
import { existsSync, mkdirSync, writeFileSync, rmSync } from 'fs';
|
|
8
|
-
import { join } from 'path';
|
|
9
|
-
import { execSync } from 'child_process';
|
|
10
|
-
import { initializeDatabase, closeDatabase, setConfigValue } from '../../../database.js';
|
|
11
|
-
import { detectAndCompleteOnStaging, detectAndArchiveOnCommit } from '../../../utils/task-stale-detection.js';
|
|
12
|
-
const TEST_DIR = join(process.cwd(), 'test-two-step-git');
|
|
13
|
-
// Helper to clean up test directory
|
|
14
|
-
function cleanupTestDir() {
|
|
15
|
-
if (existsSync(TEST_DIR)) {
|
|
16
|
-
rmSync(TEST_DIR, { recursive: true, force: true });
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
describe('Two-Step Git-Aware Workflow Integration Tests', () => {
|
|
20
|
-
let db;
|
|
21
|
-
before(async () => {
|
|
22
|
-
// Clean up before tests
|
|
23
|
-
cleanupTestDir();
|
|
24
|
-
// Create test database (in-memory)
|
|
25
|
-
db = await initializeDatabase({
|
|
26
|
-
databaseType: 'sqlite',
|
|
27
|
-
connection: {
|
|
28
|
-
filename: ':memory:'
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
// Add test config for two-step workflow (v4.0: in-memory config)
|
|
32
|
-
await setConfigValue(db, 'git_auto_complete_on_stage', '1');
|
|
33
|
-
await setConfigValue(db, 'git_auto_archive_on_commit', '1');
|
|
34
|
-
await setConfigValue(db, 'require_all_files_staged', '1');
|
|
35
|
-
await setConfigValue(db, 'require_all_files_committed_for_archive', '1');
|
|
36
|
-
// Create test git repository
|
|
37
|
-
mkdirSync(TEST_DIR, { recursive: true });
|
|
38
|
-
execSync('git init', { cwd: TEST_DIR });
|
|
39
|
-
execSync('git config user.email "test@example.com"', { cwd: TEST_DIR });
|
|
40
|
-
execSync('git config user.name "Test User"', { cwd: TEST_DIR });
|
|
41
|
-
// Change to test directory for git operations
|
|
42
|
-
process.chdir(TEST_DIR);
|
|
43
|
-
});
|
|
44
|
-
after(async () => {
|
|
45
|
-
// Close database
|
|
46
|
-
if (db) {
|
|
47
|
-
await closeDatabase();
|
|
48
|
-
}
|
|
49
|
-
// Go back to original directory
|
|
50
|
-
process.chdir(join(TEST_DIR, '..'));
|
|
51
|
-
// Clean up test directory
|
|
52
|
-
cleanupTestDir();
|
|
53
|
-
});
|
|
54
|
-
describe('Step 1: Staging → Done', () => {
|
|
55
|
-
beforeEach(async () => {
|
|
56
|
-
// Clean up tasks and file links from previous tests
|
|
57
|
-
const knex = db.getKnex();
|
|
58
|
-
await knex('v4_task_file_links').delete();
|
|
59
|
-
await knex('v4_task_details').delete();
|
|
60
|
-
await knex('v4_tasks').delete();
|
|
61
|
-
});
|
|
62
|
-
it('should transition task from waiting_review to done when all files staged', async () => {
|
|
63
|
-
const knex = db.getKnex();
|
|
64
|
-
// 1. Create task in waiting_review with watched file
|
|
65
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
66
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
67
|
-
status_id: statusRow.id,
|
|
68
|
-
priority: 2,
|
|
69
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
70
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
71
|
-
});
|
|
72
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
73
|
-
// 2. Add watched file
|
|
74
|
-
writeFileSync('test-file1.ts', '// Test content');
|
|
75
|
-
const [fileId] = await knex('v4_files').insert({ path: 'test-file1.ts' });
|
|
76
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: fileId, link_type: 'watch' });
|
|
77
|
-
// 3. Stage the file
|
|
78
|
-
execSync('git add test-file1.ts');
|
|
79
|
-
// 4. Run staging detection
|
|
80
|
-
const completedCount = await detectAndCompleteOnStaging(db);
|
|
81
|
-
// 5. Verify task transitioned to done
|
|
82
|
-
assert.strictEqual(completedCount, 1, 'Should complete 1 task');
|
|
83
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
84
|
-
const doneStatusRow = await knex('v4_task_statuses').where({ name: 'done' }).first('id');
|
|
85
|
-
assert.strictEqual(task.status_id, doneStatusRow.id, 'Task should be in done status');
|
|
86
|
-
});
|
|
87
|
-
it('should NOT transition when only some files are staged', async () => {
|
|
88
|
-
const knex = db.getKnex();
|
|
89
|
-
// 1. Create task with 2 watched files
|
|
90
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
91
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
92
|
-
status_id: statusRow.id,
|
|
93
|
-
priority: 2,
|
|
94
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
95
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
96
|
-
});
|
|
97
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
98
|
-
// 2. Add 2 watched files
|
|
99
|
-
writeFileSync('test-file2.ts', '// Test content 2');
|
|
100
|
-
writeFileSync('test-file3.ts', '// Test content 3');
|
|
101
|
-
const [file2Id] = await knex('v4_files').insert({ path: 'test-file2.ts' });
|
|
102
|
-
const [file3Id] = await knex('v4_files').insert({ path: 'test-file3.ts' });
|
|
103
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file2Id, link_type: 'watch' });
|
|
104
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file3Id, link_type: 'watch' });
|
|
105
|
-
// 3. Stage only ONE file
|
|
106
|
-
execSync('git add test-file2.ts');
|
|
107
|
-
// 4. Run staging detection
|
|
108
|
-
const completedCount = await detectAndCompleteOnStaging(db);
|
|
109
|
-
// 5. Verify task is STILL in waiting_review
|
|
110
|
-
assert.strictEqual(completedCount, 0, 'Should NOT complete any tasks');
|
|
111
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
112
|
-
assert.strictEqual(task.status_id, statusRow.id, 'Task should still be in waiting_review');
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
describe('Step 2: Commit → Archived', () => {
|
|
116
|
-
beforeEach(async () => {
|
|
117
|
-
// Clean up tasks and file links from previous tests
|
|
118
|
-
const knex = db.getKnex();
|
|
119
|
-
await knex('v4_task_file_links').delete();
|
|
120
|
-
await knex('v4_task_details').delete();
|
|
121
|
-
await knex('v4_tasks').delete();
|
|
122
|
-
});
|
|
123
|
-
it('should transition task from done to archived when all files committed', async () => {
|
|
124
|
-
const knex = db.getKnex();
|
|
125
|
-
// 1. Commit previously staged files
|
|
126
|
-
execSync('git commit -m "Test commit 1"');
|
|
127
|
-
// 2. Create task in done status with watched file
|
|
128
|
-
const doneStatusRow = await knex('v4_task_statuses').where({ name: 'done' }).first('id');
|
|
129
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
130
|
-
status_id: doneStatusRow.id,
|
|
131
|
-
priority: 2,
|
|
132
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
133
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
134
|
-
});
|
|
135
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
136
|
-
// 3. Add watched file and commit it
|
|
137
|
-
writeFileSync('test-file4.ts', '// Test content 4');
|
|
138
|
-
const [fileId] = await knex('v4_files').insert({ path: 'test-file4.ts' });
|
|
139
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: fileId, link_type: 'watch' });
|
|
140
|
-
execSync('git add test-file4.ts');
|
|
141
|
-
execSync('git commit -m "Test commit 2"');
|
|
142
|
-
// 4. Run archive detection
|
|
143
|
-
const archivedCount = await detectAndArchiveOnCommit(db);
|
|
144
|
-
// 5. Verify task transitioned to archived
|
|
145
|
-
assert.strictEqual(archivedCount, 1, 'Should archive 1 task');
|
|
146
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
147
|
-
const archivedStatusRow = await knex('v4_task_statuses').where({ name: 'archived' }).first('id');
|
|
148
|
-
assert.strictEqual(task.status_id, archivedStatusRow.id, 'Task should be in archived status');
|
|
149
|
-
});
|
|
150
|
-
it('should NOT archive when files are not committed (only staged)', async () => {
|
|
151
|
-
const knex = db.getKnex();
|
|
152
|
-
// 1. Create task in done status
|
|
153
|
-
const doneStatusRow = await knex('v4_task_statuses').where({ name: 'done' }).first('id');
|
|
154
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
155
|
-
status_id: doneStatusRow.id,
|
|
156
|
-
priority: 2,
|
|
157
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
158
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
159
|
-
});
|
|
160
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
161
|
-
// 2. Add watched file and ONLY stage it (don't commit)
|
|
162
|
-
writeFileSync('test-file5.ts', '// Test content 5');
|
|
163
|
-
const [fileId] = await knex('v4_files').insert({ path: 'test-file5.ts' });
|
|
164
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: fileId, link_type: 'watch' });
|
|
165
|
-
execSync('git add test-file5.ts');
|
|
166
|
-
// 3. Run archive detection
|
|
167
|
-
const archivedCount = await detectAndArchiveOnCommit(db);
|
|
168
|
-
// 4. Verify task is STILL in done
|
|
169
|
-
assert.strictEqual(archivedCount, 0, 'Should NOT archive any tasks');
|
|
170
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
171
|
-
assert.strictEqual(task.status_id, doneStatusRow.id, 'Task should still be in done status');
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
describe('Full Two-Step Workflow', () => {
|
|
175
|
-
beforeEach(async () => {
|
|
176
|
-
// Clean up tasks and file links from previous tests
|
|
177
|
-
const knex = db.getKnex();
|
|
178
|
-
await knex('v4_task_file_links').delete();
|
|
179
|
-
await knex('v4_task_details').delete();
|
|
180
|
-
await knex('v4_tasks').delete();
|
|
181
|
-
});
|
|
182
|
-
it('should complete full cycle: waiting_review → done → archived', async () => {
|
|
183
|
-
const knex = db.getKnex();
|
|
184
|
-
// 1. Create task in waiting_review
|
|
185
|
-
const waitingReviewRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
186
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
187
|
-
status_id: waitingReviewRow.id,
|
|
188
|
-
priority: 2,
|
|
189
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
190
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
191
|
-
});
|
|
192
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
193
|
-
// 2. Add watched file
|
|
194
|
-
writeFileSync('test-full-cycle.ts', '// Full cycle test');
|
|
195
|
-
const [fileId] = await knex('v4_files').insert({ path: 'test-full-cycle.ts' });
|
|
196
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: fileId, link_type: 'watch' });
|
|
197
|
-
// 3. STEP 1: Stage file → should transition to done
|
|
198
|
-
execSync('git add test-full-cycle.ts');
|
|
199
|
-
const stagingCompleted = await detectAndCompleteOnStaging(db);
|
|
200
|
-
assert.strictEqual(stagingCompleted, 1);
|
|
201
|
-
let task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
202
|
-
const doneStatusRow = await knex('v4_task_statuses').where({ name: 'done' }).first('id');
|
|
203
|
-
assert.strictEqual(task.status_id, doneStatusRow.id, 'Task should be done after staging');
|
|
204
|
-
// 4. STEP 2: Commit file → should transition to archived
|
|
205
|
-
execSync('git commit -m "Full cycle test"');
|
|
206
|
-
const commitArchived = await detectAndArchiveOnCommit(db);
|
|
207
|
-
assert.strictEqual(commitArchived, 1);
|
|
208
|
-
task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
209
|
-
const archivedStatusRow = await knex('v4_task_statuses').where({ name: 'archived' }).first('id');
|
|
210
|
-
assert.strictEqual(task.status_id, archivedStatusRow.id, 'Task should be archived after commit');
|
|
211
|
-
});
|
|
212
|
-
it('should handle rapid staging + commit (git commit -a)', async () => {
|
|
213
|
-
const knex = db.getKnex();
|
|
214
|
-
// 1. Create task
|
|
215
|
-
const waitingReviewRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
216
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
217
|
-
status_id: waitingReviewRow.id,
|
|
218
|
-
priority: 2,
|
|
219
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
220
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
221
|
-
});
|
|
222
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
223
|
-
// 2. Add watched file
|
|
224
|
-
writeFileSync('test-rapid.ts', '// Rapid test');
|
|
225
|
-
const [fileId] = await knex('v4_files').insert({ path: 'test-rapid.ts' });
|
|
226
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: fileId, link_type: 'watch' });
|
|
227
|
-
// 3. Stage and commit immediately
|
|
228
|
-
execSync('git add test-rapid.ts && git commit -m "Rapid test"');
|
|
229
|
-
// 4. Run both detections - should go straight to archived
|
|
230
|
-
const stagingCompleted = await detectAndCompleteOnStaging(db);
|
|
231
|
-
// Staging won't find it (already committed)
|
|
232
|
-
assert.strictEqual(stagingCompleted, 0);
|
|
233
|
-
// But commit detection should complete it to done first
|
|
234
|
-
// This is handled by detectAndCompleteReviewedTasks in real workflow
|
|
235
|
-
// For this test, manually transition to done then test archiving
|
|
236
|
-
const doneStatusRow = await knex('v4_task_statuses').where({ name: 'done' }).first('id');
|
|
237
|
-
await knex('v4_tasks').where({ id: taskId }).update({ status_id: doneStatusRow.id });
|
|
238
|
-
const commitArchived = await detectAndArchiveOnCommit(db);
|
|
239
|
-
assert.strictEqual(commitArchived, 1);
|
|
240
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
241
|
-
const archivedStatusRow = await knex('v4_task_statuses').where({ name: 'archived' }).first('id');
|
|
242
|
-
assert.strictEqual(task.status_id, archivedStatusRow.id);
|
|
243
|
-
});
|
|
244
|
-
});
|
|
245
|
-
describe('Configuration Tests', () => {
|
|
246
|
-
beforeEach(async () => {
|
|
247
|
-
// Clean up tasks and file links from previous tests
|
|
248
|
-
const knex = db.getKnex();
|
|
249
|
-
await knex('v4_task_file_links').delete();
|
|
250
|
-
await knex('v4_task_details').delete();
|
|
251
|
-
await knex('v4_tasks').delete();
|
|
252
|
-
});
|
|
253
|
-
it('should respect require_all_files_staged config', async () => {
|
|
254
|
-
const knex = db.getKnex();
|
|
255
|
-
// Set to require all files (v4.0: in-memory config)
|
|
256
|
-
await setConfigValue(db, 'require_all_files_staged', '1');
|
|
257
|
-
// Create task with 2 files
|
|
258
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
259
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
260
|
-
status_id: statusRow.id,
|
|
261
|
-
priority: 2,
|
|
262
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
263
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
264
|
-
});
|
|
265
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
266
|
-
writeFileSync('config-test1.ts', '// Config test 1');
|
|
267
|
-
writeFileSync('config-test2.ts', '// Config test 2');
|
|
268
|
-
const [file1Id] = await knex('v4_files').insert({ path: 'config-test1.ts' });
|
|
269
|
-
const [file2Id] = await knex('v4_files').insert({ path: 'config-test2.ts' });
|
|
270
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file1Id, link_type: 'watch' });
|
|
271
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: file2Id, link_type: 'watch' });
|
|
272
|
-
// Stage only one file
|
|
273
|
-
execSync('git add config-test1.ts');
|
|
274
|
-
// Should NOT complete (require ALL)
|
|
275
|
-
const completed = await detectAndCompleteOnStaging(db);
|
|
276
|
-
assert.strictEqual(completed, 0);
|
|
277
|
-
const task = await knex('v4_tasks').where({ id: taskId }).first('status_id');
|
|
278
|
-
assert.strictEqual(task.status_id, statusRow.id, 'Task should still be waiting_review');
|
|
279
|
-
});
|
|
280
|
-
it('should respect git_auto_complete_on_stage disabled', async () => {
|
|
281
|
-
const knex = db.getKnex();
|
|
282
|
-
// Disable staging auto-complete (v4.0: in-memory config)
|
|
283
|
-
await setConfigValue(db, 'git_auto_complete_on_stage', '0');
|
|
284
|
-
// Create and stage task
|
|
285
|
-
const statusRow = await knex('v4_task_statuses').where({ name: 'waiting_review' }).first('id');
|
|
286
|
-
const [taskId] = await knex('v4_tasks').insert({
|
|
287
|
-
status_id: statusRow.id,
|
|
288
|
-
priority: 2,
|
|
289
|
-
created_ts: Math.floor(Date.now() / 1000),
|
|
290
|
-
updated_ts: Math.floor(Date.now() / 1000)
|
|
291
|
-
});
|
|
292
|
-
await knex('v4_task_details').insert({ task_id: taskId, title: 'Test task' });
|
|
293
|
-
writeFileSync('disabled-test.ts', '// Disabled test');
|
|
294
|
-
const [fileId] = await knex('v4_files').insert({ path: 'disabled-test.ts' });
|
|
295
|
-
await knex('v4_task_file_links').insert({ task_id: taskId, file_id: fileId, link_type: 'watch' });
|
|
296
|
-
execSync('git add disabled-test.ts');
|
|
297
|
-
// Should NOT complete (feature disabled)
|
|
298
|
-
const completed = await detectAndCompleteOnStaging(db);
|
|
299
|
-
assert.strictEqual(completed, 0);
|
|
300
|
-
// Re-enable for other tests (v4.0: in-memory config)
|
|
301
|
-
await setConfigValue(db, 'git_auto_complete_on_stage', '1');
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
});
|
|
305
|
-
//# sourceMappingURL=two-step-git-completion.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"two-step-git-completion.test.js","sourceRoot":"","sources":["../../../../src/tests/feature/vcs/two-step-git-completion.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vcs-staging.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/feature/vcs/vcs-staging.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|