@langadventurellc/task-trellis-mcp 1.0.1 → 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 (207) hide show
  1. package/README.md +47 -67
  2. package/dist/__tests__/e2e/crud/createObject.e2e.test.js +64 -12
  3. package/dist/__tests__/e2e/crud/createObject.e2e.test.js.map +1 -1
  4. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js +260 -90
  5. package/dist/__tests__/e2e/crud/listObjects.e2e.test.js.map +1 -1
  6. package/dist/__tests__/e2e/utils/extractObjectIds.d.ts +5 -0
  7. package/dist/__tests__/e2e/utils/extractObjectIds.d.ts.map +1 -0
  8. package/dist/__tests__/e2e/utils/extractObjectIds.js +12 -0
  9. package/dist/__tests__/e2e/utils/extractObjectIds.js.map +1 -0
  10. package/dist/__tests__/e2e/utils/index.d.ts +1 -0
  11. package/dist/__tests__/e2e/utils/index.d.ts.map +1 -1
  12. package/dist/__tests__/e2e/utils/index.js +3 -1
  13. package/dist/__tests__/e2e/utils/index.js.map +1 -1
  14. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts +2 -1
  15. package/dist/__tests__/e2e/utils/mcpTestClient.d.ts.map +1 -1
  16. package/dist/__tests__/e2e/utils/mcpTestClient.js +14 -8
  17. package/dist/__tests__/e2e/utils/mcpTestClient.js.map +1 -1
  18. package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts +3 -1
  19. package/dist/__tests__/e2e/utils/parseListObjectsResponse.d.ts.map +1 -1
  20. package/dist/__tests__/e2e/utils/parseListObjectsResponse.js +1 -0
  21. package/dist/__tests__/e2e/utils/parseListObjectsResponse.js.map +1 -1
  22. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts +2 -0
  23. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.d.ts.map +1 -0
  24. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js +597 -0
  25. package/dist/__tests__/e2e/workflow/appendModifiedFiles.e2e.test.js.map +1 -0
  26. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js +189 -0
  27. package/dist/__tests__/e2e/workflow/claimTask.e2e.test.js.map +1 -1
  28. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js +446 -0
  29. package/dist/__tests__/e2e/workflow/completeTask.e2e.test.js.map +1 -1
  30. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js +3 -7
  31. package/dist/__tests__/e2e/workflow/taskLifecycle.e2e.test.js.map +1 -1
  32. package/dist/configuration/ServerConfig.d.ts +1 -0
  33. package/dist/configuration/ServerConfig.d.ts.map +1 -1
  34. package/dist/models/TrellisObjectSummary.d.ts +16 -0
  35. package/dist/models/TrellisObjectSummary.d.ts.map +1 -0
  36. package/dist/models/TrellisObjectSummary.js +3 -0
  37. package/dist/models/TrellisObjectSummary.js.map +1 -0
  38. package/dist/models/index.d.ts +1 -0
  39. package/dist/models/index.d.ts.map +1 -1
  40. package/dist/models/index.js.map +1 -1
  41. package/dist/repositories/local/__tests__/getObjectFilePath.test.js +9 -6
  42. package/dist/repositories/local/__tests__/getObjectFilePath.test.js.map +1 -1
  43. package/dist/repositories/local/__tests__/getObjects.test.js +40 -10
  44. package/dist/repositories/local/__tests__/getObjects.test.js.map +1 -1
  45. package/dist/repositories/local/getObjectFilePath.d.ts.map +1 -1
  46. package/dist/repositories/local/getObjectFilePath.js +8 -4
  47. package/dist/repositories/local/getObjectFilePath.js.map +1 -1
  48. package/dist/repositories/local/getObjects.d.ts.map +1 -1
  49. package/dist/repositories/local/getObjects.js +6 -1
  50. package/dist/repositories/local/getObjects.js.map +1 -1
  51. package/dist/server.js +23 -9
  52. package/dist/server.js.map +1 -1
  53. package/dist/services/TaskTrellisService.d.ts +87 -0
  54. package/dist/services/TaskTrellisService.d.ts.map +1 -0
  55. package/dist/services/TaskTrellisService.js +3 -0
  56. package/dist/services/TaskTrellisService.js.map +1 -0
  57. package/dist/services/local/LocalTaskTrellisService.d.ts +61 -0
  58. package/dist/services/local/LocalTaskTrellisService.d.ts.map +1 -0
  59. package/dist/services/local/LocalTaskTrellisService.js +77 -0
  60. package/dist/services/local/LocalTaskTrellisService.js.map +1 -0
  61. package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts +2 -0
  62. package/dist/services/local/__tests__/appendAffectedFiles.test.d.ts.map +1 -0
  63. package/dist/services/local/__tests__/appendAffectedFiles.test.js +202 -0
  64. package/dist/services/local/__tests__/appendAffectedFiles.test.js.map +1 -0
  65. package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts +2 -0
  66. package/dist/services/local/__tests__/appendModifiedFiles.test.d.ts.map +1 -0
  67. package/dist/services/local/__tests__/appendModifiedFiles.test.js +161 -0
  68. package/dist/services/local/__tests__/appendModifiedFiles.test.js.map +1 -0
  69. package/dist/services/local/__tests__/appendObjectLog.test.d.ts +2 -0
  70. package/dist/services/local/__tests__/appendObjectLog.test.d.ts.map +1 -0
  71. package/dist/services/local/__tests__/appendObjectLog.test.js +104 -0
  72. package/dist/services/local/__tests__/appendObjectLog.test.js.map +1 -0
  73. package/dist/services/local/__tests__/claimTask.test.d.ts +2 -0
  74. package/dist/services/local/__tests__/claimTask.test.d.ts.map +1 -0
  75. package/dist/services/local/__tests__/claimTask.test.js +463 -0
  76. package/dist/services/local/__tests__/claimTask.test.js.map +1 -0
  77. package/dist/services/local/__tests__/completeTask.test.d.ts +2 -0
  78. package/dist/services/local/__tests__/completeTask.test.d.ts.map +1 -0
  79. package/dist/services/local/__tests__/completeTask.test.js +468 -0
  80. package/dist/services/local/__tests__/completeTask.test.js.map +1 -0
  81. package/dist/services/local/__tests__/createObject.test.d.ts +2 -0
  82. package/dist/services/local/__tests__/createObject.test.d.ts.map +1 -0
  83. package/dist/services/local/__tests__/createObject.test.js +332 -0
  84. package/dist/services/local/__tests__/createObject.test.js.map +1 -0
  85. package/dist/services/local/__tests__/listObjects.test.d.ts +2 -0
  86. package/dist/services/local/__tests__/listObjects.test.d.ts.map +1 -0
  87. package/dist/services/local/__tests__/listObjects.test.js +226 -0
  88. package/dist/services/local/__tests__/listObjects.test.js.map +1 -0
  89. package/dist/services/local/__tests__/pruneClosed.test.d.ts +2 -0
  90. package/dist/services/local/__tests__/pruneClosed.test.d.ts.map +1 -0
  91. package/dist/services/local/__tests__/pruneClosed.test.js +213 -0
  92. package/dist/services/local/__tests__/pruneClosed.test.js.map +1 -0
  93. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts +2 -0
  94. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.d.ts.map +1 -0
  95. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.js +283 -0
  96. package/dist/services/local/__tests__/replaceObjectBodyRegex.test.js.map +1 -0
  97. package/dist/services/local/__tests__/updateObject.test.d.ts +2 -0
  98. package/dist/services/local/__tests__/updateObject.test.d.ts.map +1 -0
  99. package/dist/services/local/__tests__/updateObject.test.js +314 -0
  100. package/dist/services/local/__tests__/updateObject.test.js.map +1 -0
  101. package/dist/services/local/appendAffectedFiles.d.ts +12 -0
  102. package/dist/services/local/appendAffectedFiles.d.ts.map +1 -0
  103. package/dist/services/local/appendAffectedFiles.js +34 -0
  104. package/dist/services/local/appendAffectedFiles.js.map +1 -0
  105. package/dist/services/local/appendModifiedFiles.d.ts +15 -0
  106. package/dist/services/local/appendModifiedFiles.d.ts.map +1 -0
  107. package/dist/services/local/appendModifiedFiles.js +39 -0
  108. package/dist/services/local/appendModifiedFiles.js.map +1 -0
  109. package/dist/services/local/appendObjectLog.d.ts +8 -0
  110. package/dist/services/local/appendObjectLog.d.ts.map +1 -0
  111. package/dist/services/local/appendObjectLog.js +45 -0
  112. package/dist/services/local/appendObjectLog.js.map +1 -0
  113. package/dist/services/local/claimTask.d.ts +8 -0
  114. package/dist/services/local/claimTask.d.ts.map +1 -0
  115. package/dist/services/local/claimTask.js +118 -0
  116. package/dist/services/local/claimTask.js.map +1 -0
  117. package/dist/services/local/completeTask.d.ts +9 -0
  118. package/dist/services/local/completeTask.d.ts.map +1 -0
  119. package/dist/services/local/completeTask.js +74 -0
  120. package/dist/services/local/completeTask.js.map +1 -0
  121. package/dist/services/local/createObject.d.ts +9 -0
  122. package/dist/services/local/createObject.d.ts.map +1 -0
  123. package/dist/services/local/createObject.js +44 -0
  124. package/dist/services/local/createObject.js.map +1 -0
  125. package/dist/services/local/listObjects.d.ts +9 -0
  126. package/dist/services/local/listObjects.d.ts.map +1 -0
  127. package/dist/services/local/listObjects.js +43 -0
  128. package/dist/services/local/listObjects.js.map +1 -0
  129. package/dist/services/local/pruneClosed.d.ts +8 -0
  130. package/dist/services/local/pruneClosed.d.ts.map +1 -0
  131. package/dist/services/local/pruneClosed.js +55 -0
  132. package/dist/services/local/pruneClosed.js.map +1 -0
  133. package/dist/services/local/replaceObjectBodyRegex.d.ts +8 -0
  134. package/dist/services/local/replaceObjectBodyRegex.d.ts.map +1 -0
  135. package/dist/services/local/replaceObjectBodyRegex.js +85 -0
  136. package/dist/services/local/replaceObjectBodyRegex.js.map +1 -0
  137. package/dist/services/local/updateObject.d.ts +9 -0
  138. package/dist/services/local/updateObject.d.ts.map +1 -0
  139. package/dist/services/local/updateObject.js +53 -0
  140. package/dist/services/local/updateObject.js.map +1 -0
  141. package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts +2 -0
  142. package/dist/tools/__tests__/appendModifiedFilesTool.test.d.ts.map +1 -0
  143. package/dist/tools/__tests__/appendModifiedFilesTool.test.js +177 -0
  144. package/dist/tools/__tests__/appendModifiedFilesTool.test.js.map +1 -0
  145. package/dist/tools/__tests__/appendObjectLogTool.test.js +33 -101
  146. package/dist/tools/__tests__/appendObjectLogTool.test.js.map +1 -1
  147. package/dist/tools/__tests__/claimTaskTool.test.js +98 -311
  148. package/dist/tools/__tests__/claimTaskTool.test.js.map +1 -1
  149. package/dist/tools/__tests__/completeTaskTool.test.js +134 -184
  150. package/dist/tools/__tests__/completeTaskTool.test.js.map +1 -1
  151. package/dist/tools/__tests__/createObjectTool.test.js +61 -325
  152. package/dist/tools/__tests__/createObjectTool.test.js.map +1 -1
  153. package/dist/tools/__tests__/listObjectsTool.test.js +70 -109
  154. package/dist/tools/__tests__/listObjectsTool.test.js.map +1 -1
  155. package/dist/tools/__tests__/pruneClosedTool.test.js +87 -146
  156. package/dist/tools/__tests__/pruneClosedTool.test.js.map +1 -1
  157. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js +56 -225
  158. package/dist/tools/__tests__/replaceObjectBodyRegexTool.test.js.map +1 -1
  159. package/dist/tools/__tests__/updateObjectTool.test.js +48 -166
  160. package/dist/tools/__tests__/updateObjectTool.test.js.map +1 -1
  161. package/dist/tools/appendModifiedFilesTool.d.ts +30 -0
  162. package/dist/tools/appendModifiedFilesTool.d.ts.map +1 -0
  163. package/dist/tools/appendModifiedFilesTool.js +55 -0
  164. package/dist/tools/appendModifiedFilesTool.js.map +1 -0
  165. package/dist/tools/appendObjectLogTool.d.ts +4 -3
  166. package/dist/tools/appendObjectLogTool.d.ts.map +1 -1
  167. package/dist/tools/appendObjectLogTool.js +2 -40
  168. package/dist/tools/appendObjectLogTool.js.map +1 -1
  169. package/dist/tools/claimTaskTool.d.ts +4 -3
  170. package/dist/tools/claimTaskTool.d.ts.map +1 -1
  171. package/dist/tools/claimTaskTool.js +2 -80
  172. package/dist/tools/claimTaskTool.js.map +1 -1
  173. package/dist/tools/completeTaskTool.d.ts +5 -3
  174. package/dist/tools/completeTaskTool.d.ts.map +1 -1
  175. package/dist/tools/completeTaskTool.js +3 -29
  176. package/dist/tools/completeTaskTool.js.map +1 -1
  177. package/dist/tools/createObjectTool.d.ts +7 -6
  178. package/dist/tools/createObjectTool.d.ts.map +1 -1
  179. package/dist/tools/createObjectTool.js +11 -44
  180. package/dist/tools/createObjectTool.js.map +1 -1
  181. package/dist/tools/index.d.ts +1 -0
  182. package/dist/tools/index.d.ts.map +1 -1
  183. package/dist/tools/index.js +4 -1
  184. package/dist/tools/index.js.map +1 -1
  185. package/dist/tools/listObjectsTool.d.ts +5 -4
  186. package/dist/tools/listObjectsTool.d.ts.map +1 -1
  187. package/dist/tools/listObjectsTool.js +5 -13
  188. package/dist/tools/listObjectsTool.js.map +1 -1
  189. package/dist/tools/pruneClosedTool.d.ts +4 -3
  190. package/dist/tools/pruneClosedTool.d.ts.map +1 -1
  191. package/dist/tools/pruneClosedTool.js +2 -51
  192. package/dist/tools/pruneClosedTool.js.map +1 -1
  193. package/dist/tools/replaceObjectBodyRegexTool.d.ts +4 -3
  194. package/dist/tools/replaceObjectBodyRegexTool.d.ts.map +1 -1
  195. package/dist/tools/replaceObjectBodyRegexTool.js +2 -80
  196. package/dist/tools/replaceObjectBodyRegexTool.js.map +1 -1
  197. package/dist/tools/updateObjectTool.d.ts +5 -4
  198. package/dist/tools/updateObjectTool.d.ts.map +1 -1
  199. package/dist/tools/updateObjectTool.js +3 -49
  200. package/dist/tools/updateObjectTool.js.map +1 -1
  201. package/dist/validation/__tests__/validateParentType.test.js +5 -5
  202. package/dist/validation/__tests__/validateParentType.test.js.map +1 -1
  203. package/dist/validation/validateParentType.d.ts +1 -1
  204. package/dist/validation/validateParentType.d.ts.map +1 -1
  205. package/dist/validation/validateParentType.js +2 -5
  206. package/dist/validation/validateParentType.js.map +1 -1
  207. package/package.json +1 -1
@@ -0,0 +1,468 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const models_1 = require("../../../models");
4
+ const completeTask_1 = require("../completeTask");
5
+ describe("completeTask service function", () => {
6
+ let mockRepository;
7
+ const createMockTask = (overrides) => ({
8
+ id: "T-test-task",
9
+ type: models_1.TrellisObjectType.TASK,
10
+ title: "Test Task",
11
+ status: models_1.TrellisObjectStatus.IN_PROGRESS,
12
+ priority: models_1.TrellisObjectPriority.MEDIUM,
13
+ parent: undefined,
14
+ prerequisites: [],
15
+ affectedFiles: new Map(),
16
+ log: [],
17
+ schema: "1.0",
18
+ created: "2025-01-15T10:00:00Z",
19
+ updated: "2025-01-15T10:00:00Z",
20
+ childrenIds: [],
21
+ body: "This is a test task",
22
+ ...overrides,
23
+ });
24
+ const createMockFeature = (id, childrenIds = [], status = models_1.TrellisObjectStatus.OPEN) => ({
25
+ id,
26
+ type: models_1.TrellisObjectType.FEATURE,
27
+ title: "Test Feature",
28
+ status,
29
+ priority: models_1.TrellisObjectPriority.MEDIUM,
30
+ parent: "E-test-epic",
31
+ prerequisites: [],
32
+ affectedFiles: new Map(),
33
+ log: [],
34
+ schema: "1.0",
35
+ created: "2025-01-15T10:00:00Z",
36
+ updated: "2025-01-15T10:00:00Z",
37
+ childrenIds,
38
+ body: "This is a test feature",
39
+ });
40
+ const createMockEpic = (id, childrenIds = [], status = models_1.TrellisObjectStatus.OPEN) => ({
41
+ id,
42
+ type: models_1.TrellisObjectType.EPIC,
43
+ title: "Test Epic",
44
+ status,
45
+ priority: models_1.TrellisObjectPriority.MEDIUM,
46
+ parent: "P-test-project",
47
+ prerequisites: [],
48
+ affectedFiles: new Map(),
49
+ log: [],
50
+ schema: "1.0",
51
+ created: "2025-01-15T10:00:00Z",
52
+ updated: "2025-01-15T10:00:00Z",
53
+ childrenIds,
54
+ body: "This is a test epic",
55
+ });
56
+ const createMockProject = (id, childrenIds = [], status = models_1.TrellisObjectStatus.OPEN) => ({
57
+ id,
58
+ type: models_1.TrellisObjectType.PROJECT,
59
+ title: "Test Project",
60
+ status,
61
+ priority: models_1.TrellisObjectPriority.MEDIUM,
62
+ parent: undefined,
63
+ prerequisites: [],
64
+ affectedFiles: new Map(),
65
+ log: [],
66
+ schema: "1.0",
67
+ created: "2025-01-15T10:00:00Z",
68
+ updated: "2025-01-15T10:00:00Z",
69
+ childrenIds,
70
+ body: "This is a test project",
71
+ });
72
+ beforeEach(() => {
73
+ mockRepository = {
74
+ getObjectById: jest.fn(),
75
+ getObjects: jest.fn(),
76
+ saveObject: jest.fn(),
77
+ deleteObject: jest.fn(),
78
+ };
79
+ });
80
+ describe("basic completion functionality", () => {
81
+ it("should successfully complete a task in progress", async () => {
82
+ const mockTask = createMockTask();
83
+ const filesChanged = {
84
+ "src/file1.ts": "Added new feature",
85
+ "src/file2.ts": "Fixed bug",
86
+ };
87
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
88
+ mockRepository.saveObject.mockResolvedValue();
89
+ const result = await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Task completed successfully", filesChanged);
90
+ expect(mockRepository.getObjectById).toHaveBeenCalledWith("T-test-task");
91
+ expect(mockRepository.saveObject).toHaveBeenCalledWith({
92
+ ...mockTask,
93
+ status: models_1.TrellisObjectStatus.DONE,
94
+ affectedFiles: new Map([
95
+ ["src/file1.ts", "Added new feature"],
96
+ ["src/file2.ts", "Fixed bug"],
97
+ ]),
98
+ log: ["Task completed successfully"],
99
+ });
100
+ expect(result.content[0].text).toContain('Task "T-test-task" completed successfully. Updated 2 affected files.');
101
+ });
102
+ it("should append to existing affected files", async () => {
103
+ const existingFiles = new Map([["existing.ts", "Previously changed"]]);
104
+ const mockTask = createMockTask({ affectedFiles: existingFiles });
105
+ const filesChanged = {
106
+ "src/new-file.ts": "Newly added file",
107
+ };
108
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
109
+ mockRepository.saveObject.mockResolvedValue();
110
+ await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Added new functionality", filesChanged);
111
+ expect(mockRepository.saveObject).toHaveBeenCalledWith({
112
+ ...mockTask,
113
+ status: models_1.TrellisObjectStatus.DONE,
114
+ affectedFiles: new Map([
115
+ ["existing.ts", "Previously changed"],
116
+ ["src/new-file.ts", "Newly added file"],
117
+ ]),
118
+ log: ["Added new functionality"],
119
+ });
120
+ });
121
+ it("should merge descriptions for files that already exist in affected files", async () => {
122
+ const existingFiles = new Map([
123
+ ["existing.ts", "Previously changed"],
124
+ ["src/shared.ts", "Initial changes"],
125
+ ]);
126
+ const mockTask = createMockTask({ affectedFiles: existingFiles });
127
+ const filesChanged = {
128
+ "src/shared.ts": "Additional changes",
129
+ "src/new-file.ts": "Newly added file",
130
+ };
131
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
132
+ mockRepository.saveObject.mockResolvedValue();
133
+ await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Added new functionality", filesChanged);
134
+ expect(mockRepository.saveObject).toHaveBeenCalledWith({
135
+ ...mockTask,
136
+ status: models_1.TrellisObjectStatus.DONE,
137
+ affectedFiles: new Map([
138
+ ["existing.ts", "Previously changed"],
139
+ ["src/shared.ts", "Initial changes; Additional changes"],
140
+ ["src/new-file.ts", "Newly added file"],
141
+ ]),
142
+ log: ["Added new functionality"],
143
+ });
144
+ });
145
+ it("should append to existing log entries", async () => {
146
+ const mockTask = createMockTask({ log: ["Previous log entry"] });
147
+ const filesChanged = { "file.ts": "Description" };
148
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
149
+ mockRepository.saveObject.mockResolvedValue();
150
+ await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "New log entry", filesChanged);
151
+ expect(mockRepository.saveObject).toHaveBeenCalledWith({
152
+ ...mockTask,
153
+ status: models_1.TrellisObjectStatus.DONE,
154
+ log: ["Previous log entry", "New log entry"],
155
+ affectedFiles: new Map([["file.ts", "Description"]]),
156
+ });
157
+ });
158
+ it("should handle empty files changed object", async () => {
159
+ const mockTask = createMockTask();
160
+ const filesChanged = {};
161
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
162
+ mockRepository.saveObject.mockResolvedValue();
163
+ const result = await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Task completed with no file changes", filesChanged);
164
+ expect(mockRepository.saveObject).toHaveBeenCalledWith({
165
+ ...mockTask,
166
+ status: models_1.TrellisObjectStatus.DONE,
167
+ affectedFiles: new Map(),
168
+ log: ["Task completed with no file changes"],
169
+ });
170
+ expect(result.content[0].text).toContain("Updated 0 affected files");
171
+ });
172
+ });
173
+ describe("error handling", () => {
174
+ it("should throw error when task is not found", async () => {
175
+ mockRepository.getObjectById.mockResolvedValue(null);
176
+ await expect((0, completeTask_1.completeTask)(mockRepository, "T-nonexistent", "Summary", {})).rejects.toThrow('Task with ID "T-nonexistent" not found');
177
+ expect(mockRepository.getObjectById).toHaveBeenCalledWith("T-nonexistent");
178
+ expect(mockRepository.saveObject).not.toHaveBeenCalled();
179
+ });
180
+ it("should throw error when task is not in progress", async () => {
181
+ const mockTask = createMockTask({ status: models_1.TrellisObjectStatus.OPEN });
182
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
183
+ await expect((0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Summary", {})).rejects.toThrow('Task "T-test-task" is not in progress (current status: open)');
184
+ expect(mockRepository.saveObject).not.toHaveBeenCalled();
185
+ });
186
+ it("should throw error when task is already done", async () => {
187
+ const mockTask = createMockTask({ status: models_1.TrellisObjectStatus.DONE });
188
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
189
+ await expect((0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Summary", {})).rejects.toThrow('Task "T-test-task" is not in progress (current status: done)');
190
+ expect(mockRepository.saveObject).not.toHaveBeenCalled();
191
+ });
192
+ it("should throw error when task is in draft status", async () => {
193
+ const mockTask = createMockTask({ status: models_1.TrellisObjectStatus.DRAFT });
194
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
195
+ await expect((0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Summary", {})).rejects.toThrow('Task "T-test-task" is not in progress (current status: draft)');
196
+ expect(mockRepository.saveObject).not.toHaveBeenCalled();
197
+ });
198
+ it("should handle repository getObjectById errors", async () => {
199
+ const errorMessage = "Database connection failed";
200
+ mockRepository.getObjectById.mockRejectedValue(new Error(errorMessage));
201
+ await expect((0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Summary", {})).rejects.toThrow(errorMessage);
202
+ expect(mockRepository.saveObject).not.toHaveBeenCalled();
203
+ });
204
+ it("should handle repository saveObject errors", async () => {
205
+ const mockTask = createMockTask();
206
+ const errorMessage = "Save operation failed";
207
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
208
+ mockRepository.saveObject.mockRejectedValue(new Error(errorMessage));
209
+ await expect((0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Summary", {
210
+ "file.ts": "Description",
211
+ })).rejects.toThrow(errorMessage);
212
+ expect(mockRepository.getObjectById).toHaveBeenCalledWith("T-test-task");
213
+ expect(mockRepository.saveObject).toHaveBeenCalled();
214
+ });
215
+ });
216
+ describe("auto-complete parent functionality", () => {
217
+ const serverConfigWithAutoComplete = {
218
+ mode: "local",
219
+ planningRootFolder: "/test",
220
+ autoCompleteParent: true,
221
+ };
222
+ const serverConfigWithoutAutoComplete = {
223
+ mode: "local",
224
+ planningRootFolder: "/test",
225
+ autoCompleteParent: false,
226
+ };
227
+ it("should not auto-complete parents when autoCompleteParent is false", async () => {
228
+ const mockTask = createMockTask();
229
+ const mockFeature = createMockFeature("F-test-feature", ["T-test-task"]);
230
+ mockRepository.getObjectById.mockImplementation((id) => {
231
+ if (id === mockTask.id)
232
+ return Promise.resolve(mockTask);
233
+ if (id === mockFeature.id)
234
+ return Promise.resolve(mockFeature);
235
+ throw new Error("Not found");
236
+ });
237
+ mockRepository.saveObject.mockResolvedValue();
238
+ await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Task completed", {}, serverConfigWithoutAutoComplete);
239
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(1);
240
+ expect(mockRepository.saveObject).toHaveBeenCalledWith({
241
+ ...mockTask,
242
+ status: models_1.TrellisObjectStatus.DONE,
243
+ affectedFiles: new Map(),
244
+ log: ["Task completed"],
245
+ });
246
+ });
247
+ it("should not auto-complete parents when serverConfig is undefined", async () => {
248
+ const mockTask = createMockTask();
249
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
250
+ mockRepository.saveObject.mockResolvedValue();
251
+ await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Task completed", {});
252
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(1);
253
+ });
254
+ it("should auto-complete feature when all tasks are done", async () => {
255
+ const mockTask1 = createMockTask({
256
+ id: "T-task-1",
257
+ parent: "F-test-feature",
258
+ });
259
+ const mockTask2 = createMockTask({
260
+ id: "T-task-2",
261
+ parent: "F-test-feature",
262
+ status: models_1.TrellisObjectStatus.DONE,
263
+ });
264
+ const mockFeature = createMockFeature("F-test-feature", [
265
+ mockTask1.id,
266
+ mockTask2.id,
267
+ ]);
268
+ mockRepository.getObjectById.mockImplementation((id) => {
269
+ if (id === mockTask1.id)
270
+ return Promise.resolve(mockTask1);
271
+ if (id === mockTask2.id)
272
+ return Promise.resolve(mockTask2);
273
+ if (id === mockFeature.id)
274
+ return Promise.resolve(mockFeature);
275
+ return Promise.resolve(null);
276
+ });
277
+ mockRepository.saveObject.mockResolvedValue();
278
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask1.id, "Task completed", {}, serverConfigWithAutoComplete);
279
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(3);
280
+ expect(mockRepository.saveObject).toHaveBeenNthCalledWith(3, {
281
+ ...mockFeature,
282
+ status: models_1.TrellisObjectStatus.DONE,
283
+ log: ["Auto-completed: All child tasks are complete"],
284
+ });
285
+ });
286
+ it("should not auto-complete feature when some tasks are still in progress", async () => {
287
+ const mockTask1 = createMockTask({
288
+ id: "T-task-1",
289
+ parent: "F-test-feature",
290
+ });
291
+ const mockTask2 = createMockTask({
292
+ id: "T-task-2",
293
+ parent: "F-test-feature",
294
+ status: models_1.TrellisObjectStatus.IN_PROGRESS,
295
+ });
296
+ const mockFeature = createMockFeature("F-test-feature", [
297
+ mockTask1.id,
298
+ mockTask2.id,
299
+ ]);
300
+ mockRepository.getObjectById.mockImplementation((id) => {
301
+ if (id === mockTask1.id)
302
+ return Promise.resolve(mockTask1);
303
+ if (id === mockTask2.id)
304
+ return Promise.resolve(mockTask2);
305
+ if (id === mockFeature.id)
306
+ return Promise.resolve(mockFeature);
307
+ return Promise.resolve(null);
308
+ });
309
+ mockRepository.saveObject.mockResolvedValue();
310
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask1.id, "Task completed", {}, serverConfigWithAutoComplete);
311
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(2);
312
+ });
313
+ it("should auto-complete feature when all tasks are done or wont-do", async () => {
314
+ const mockTask1 = createMockTask({
315
+ id: "T-task-1",
316
+ parent: "F-test-feature",
317
+ });
318
+ const mockTask2 = createMockTask({
319
+ id: "T-task-2",
320
+ parent: "F-test-feature",
321
+ status: models_1.TrellisObjectStatus.WONT_DO,
322
+ });
323
+ const mockFeature = createMockFeature("F-test-feature", [
324
+ mockTask1.id,
325
+ mockTask2.id,
326
+ ]);
327
+ mockRepository.getObjectById.mockImplementation((id) => {
328
+ if (id === mockTask1.id)
329
+ return Promise.resolve(mockTask1);
330
+ if (id === mockTask2.id)
331
+ return Promise.resolve(mockTask2);
332
+ if (id === mockFeature.id)
333
+ return Promise.resolve(mockFeature);
334
+ return Promise.resolve(null);
335
+ });
336
+ mockRepository.saveObject.mockResolvedValue();
337
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask1.id, "Task completed", {}, serverConfigWithAutoComplete);
338
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(3);
339
+ expect(mockRepository.saveObject).toHaveBeenNthCalledWith(3, {
340
+ ...mockFeature,
341
+ status: models_1.TrellisObjectStatus.DONE,
342
+ log: ["Auto-completed: All child tasks are complete"],
343
+ });
344
+ });
345
+ it("should auto-complete epic when all features are done", async () => {
346
+ const mockTask = createMockTask({
347
+ parent: "F-feature-1",
348
+ });
349
+ const mockFeature1 = createMockFeature("F-feature-1", [mockTask.id]);
350
+ const mockFeature2 = createMockFeature("F-feature-2", [], models_1.TrellisObjectStatus.DONE);
351
+ const mockEpic = createMockEpic("E-test-epic", [
352
+ mockFeature1.id,
353
+ mockFeature2.id,
354
+ ]);
355
+ mockRepository.getObjectById.mockImplementation((id) => {
356
+ if (id === mockTask.id)
357
+ return Promise.resolve(mockTask);
358
+ if (id === mockFeature1.id)
359
+ return Promise.resolve(mockFeature1);
360
+ if (id === mockFeature2.id)
361
+ return Promise.resolve(mockFeature2);
362
+ if (id === mockEpic.id)
363
+ return Promise.resolve(mockEpic);
364
+ return Promise.resolve(null);
365
+ });
366
+ mockRepository.saveObject.mockResolvedValue();
367
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask.id, "Task completed", {}, serverConfigWithAutoComplete);
368
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(5);
369
+ expect(mockRepository.saveObject).toHaveBeenNthCalledWith(5, {
370
+ ...mockEpic,
371
+ status: models_1.TrellisObjectStatus.DONE,
372
+ log: ["Auto-completed: All child features are complete"],
373
+ });
374
+ });
375
+ it("should auto-complete project when all epics are done", async () => {
376
+ const mockTask = createMockTask({ parent: "F-test-feature" });
377
+ const mockFeature = createMockFeature("F-test-feature", [mockTask.id]);
378
+ const mockEpic1 = createMockEpic("E-test-epic", [mockFeature.id]);
379
+ const mockEpic2 = createMockEpic("E-epic-2", [], models_1.TrellisObjectStatus.DONE);
380
+ const mockProject = createMockProject("P-test-project", [
381
+ mockEpic1.id,
382
+ mockEpic2.id,
383
+ ]);
384
+ mockRepository.getObjectById.mockImplementation((id) => {
385
+ if (id === mockTask.id)
386
+ return Promise.resolve(mockTask);
387
+ if (id === mockFeature.id)
388
+ return Promise.resolve(mockFeature);
389
+ if (id === mockEpic1.id)
390
+ return Promise.resolve(mockEpic1);
391
+ if (id === mockEpic2.id)
392
+ return Promise.resolve(mockEpic2);
393
+ if (id === mockProject.id)
394
+ return Promise.resolve(mockProject);
395
+ return Promise.resolve(null);
396
+ });
397
+ mockRepository.saveObject.mockResolvedValue();
398
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask.id, "Task completed", {}, serverConfigWithAutoComplete);
399
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(7);
400
+ expect(mockRepository.saveObject).toHaveBeenNthCalledWith(7, {
401
+ ...mockProject,
402
+ status: models_1.TrellisObjectStatus.DONE,
403
+ log: ["Auto-completed: All child epics are complete"],
404
+ });
405
+ });
406
+ it("should handle task with no parent", async () => {
407
+ const mockTask = createMockTask({ parent: undefined });
408
+ mockRepository.getObjectById.mockImplementation((id) => {
409
+ if (id === mockTask.id)
410
+ return Promise.resolve(mockTask);
411
+ return Promise.resolve(null);
412
+ });
413
+ mockRepository.saveObject.mockResolvedValue();
414
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask.id, "Task completed", {}, serverConfigWithAutoComplete);
415
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(1);
416
+ });
417
+ it("should handle missing parent object", async () => {
418
+ const mockTask = createMockTask();
419
+ mockRepository.getObjectById.mockImplementation((id) => {
420
+ if (id === mockTask.id)
421
+ return Promise.resolve(mockTask);
422
+ return Promise.resolve(null);
423
+ });
424
+ mockRepository.saveObject.mockResolvedValue();
425
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask.id, "Task completed", {}, serverConfigWithAutoComplete);
426
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(1);
427
+ });
428
+ it("should not auto-complete parent if already done", async () => {
429
+ const mockTask = createMockTask();
430
+ const mockFeature = createMockFeature("F-test-feature", [mockTask.id], models_1.TrellisObjectStatus.DONE);
431
+ mockRepository.getObjectById.mockImplementation((id) => {
432
+ if (id === mockTask.id)
433
+ return Promise.resolve(mockTask);
434
+ if (id === mockFeature.id)
435
+ return Promise.resolve(mockFeature);
436
+ return Promise.resolve(null);
437
+ });
438
+ mockRepository.saveObject.mockResolvedValue();
439
+ await (0, completeTask_1.completeTask)(mockRepository, mockTask.id, "Task completed", {}, serverConfigWithAutoComplete);
440
+ expect(mockRepository.saveObject).toHaveBeenCalledTimes(1);
441
+ });
442
+ });
443
+ describe("file change handling", () => {
444
+ it("should properly handle filesChanged as Record<string, string>", async () => {
445
+ const mockTask = createMockTask();
446
+ const filesChanged = {
447
+ "file1.ts": "First file",
448
+ "file2.js": "Second file",
449
+ "config.json": "Configuration file",
450
+ };
451
+ mockRepository.getObjectById.mockResolvedValue(mockTask);
452
+ mockRepository.saveObject.mockResolvedValue();
453
+ await (0, completeTask_1.completeTask)(mockRepository, "T-test-task", "Multiple files changed", filesChanged);
454
+ const expectedMap = new Map([
455
+ ["file1.ts", "First file"],
456
+ ["file2.js", "Second file"],
457
+ ["config.json", "Configuration file"],
458
+ ]);
459
+ expect(mockRepository.saveObject).toHaveBeenCalledWith({
460
+ ...mockTask,
461
+ status: models_1.TrellisObjectStatus.DONE,
462
+ affectedFiles: expectedMap,
463
+ log: ["Multiple files changed"],
464
+ });
465
+ });
466
+ });
467
+ });
468
+ //# sourceMappingURL=completeTask.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completeTask.test.js","sourceRoot":"","sources":["../../../../src/services/local/__tests__/completeTask.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=createObject.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createObject.test.d.ts","sourceRoot":"","sources":["../../../../src/services/local/__tests__/createObject.test.ts"],"names":[],"mappings":""}