specforge-mcp 0.12.0 → 0.13.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 (258) hide show
  1. package/dist/index.js +0 -0
  2. package/package.json +1 -1
  3. package/dist/engine/agent-generator.test.d.ts +0 -2
  4. package/dist/engine/agent-generator.test.d.ts.map +0 -1
  5. package/dist/engine/agent-generator.test.js +0 -556
  6. package/dist/engine/agent-generator.test.js.map +0 -1
  7. package/dist/engine/analyzer.test.d.ts +0 -2
  8. package/dist/engine/analyzer.test.d.ts.map +0 -1
  9. package/dist/engine/analyzer.test.js +0 -1461
  10. package/dist/engine/analyzer.test.js.map +0 -1
  11. package/dist/engine/auditor.test.d.ts +0 -2
  12. package/dist/engine/auditor.test.d.ts.map +0 -1
  13. package/dist/engine/auditor.test.js +0 -2075
  14. package/dist/engine/auditor.test.js.map +0 -1
  15. package/dist/engine/doc-generator.test.d.ts +0 -2
  16. package/dist/engine/doc-generator.test.d.ts.map +0 -1
  17. package/dist/engine/doc-generator.test.js +0 -961
  18. package/dist/engine/doc-generator.test.js.map +0 -1
  19. package/dist/engine/estimator.test.d.ts +0 -2
  20. package/dist/engine/estimator.test.d.ts.map +0 -1
  21. package/dist/engine/estimator.test.js +0 -334
  22. package/dist/engine/estimator.test.js.map +0 -1
  23. package/dist/engine/skill-generator.test.d.ts +0 -2
  24. package/dist/engine/skill-generator.test.d.ts.map +0 -1
  25. package/dist/engine/skill-generator.test.js +0 -742
  26. package/dist/engine/skill-generator.test.js.map +0 -1
  27. package/dist/engine/validator.test.d.ts +0 -2
  28. package/dist/engine/validator.test.d.ts.map +0 -1
  29. package/dist/engine/validator.test.js +0 -2371
  30. package/dist/engine/validator.test.js.map +0 -1
  31. package/dist/engine/web-fetcher.test.d.ts +0 -2
  32. package/dist/engine/web-fetcher.test.d.ts.map +0 -1
  33. package/dist/engine/web-fetcher.test.js +0 -360
  34. package/dist/engine/web-fetcher.test.js.map +0 -1
  35. package/dist/i18n/index.test.d.ts +0 -2
  36. package/dist/i18n/index.test.d.ts.map +0 -1
  37. package/dist/i18n/index.test.js +0 -375
  38. package/dist/i18n/index.test.js.map +0 -1
  39. package/dist/index.test.d.ts +0 -2
  40. package/dist/index.test.d.ts.map +0 -1
  41. package/dist/index.test.js +0 -124
  42. package/dist/index.test.js.map +0 -1
  43. package/dist/resources/patterns.test.d.ts +0 -2
  44. package/dist/resources/patterns.test.d.ts.map +0 -1
  45. package/dist/resources/patterns.test.js +0 -142
  46. package/dist/resources/patterns.test.js.map +0 -1
  47. package/dist/resources/process.test.d.ts +0 -2
  48. package/dist/resources/process.test.d.ts.map +0 -1
  49. package/dist/resources/process.test.js +0 -48
  50. package/dist/resources/process.test.js.map +0 -1
  51. package/dist/resources/registry.test.d.ts +0 -2
  52. package/dist/resources/registry.test.d.ts.map +0 -1
  53. package/dist/resources/registry.test.js +0 -138
  54. package/dist/resources/registry.test.js.map +0 -1
  55. package/dist/resources/specs.test.d.ts +0 -2
  56. package/dist/resources/specs.test.d.ts.map +0 -1
  57. package/dist/resources/specs.test.js +0 -130
  58. package/dist/resources/specs.test.js.map +0 -1
  59. package/dist/resources/templates.test.d.ts +0 -2
  60. package/dist/resources/templates.test.d.ts.map +0 -1
  61. package/dist/resources/templates.test.js +0 -119
  62. package/dist/resources/templates.test.js.map +0 -1
  63. package/dist/smoke.test.d.ts +0 -2
  64. package/dist/smoke.test.d.ts.map +0 -1
  65. package/dist/smoke.test.js +0 -229
  66. package/dist/smoke.test.js.map +0 -1
  67. package/dist/storage/base-store.test.d.ts +0 -2
  68. package/dist/storage/base-store.test.d.ts.map +0 -1
  69. package/dist/storage/base-store.test.js +0 -180
  70. package/dist/storage/base-store.test.js.map +0 -1
  71. package/dist/storage/global-store.test.d.ts +0 -2
  72. package/dist/storage/global-store.test.d.ts.map +0 -1
  73. package/dist/storage/global-store.test.js +0 -327
  74. package/dist/storage/global-store.test.js.map +0 -1
  75. package/dist/storage/index.test.d.ts +0 -2
  76. package/dist/storage/index.test.d.ts.map +0 -1
  77. package/dist/storage/index.test.js +0 -56
  78. package/dist/storage/index.test.js.map +0 -1
  79. package/dist/storage/knowledge-store.test.d.ts +0 -2
  80. package/dist/storage/knowledge-store.test.d.ts.map +0 -1
  81. package/dist/storage/knowledge-store.test.js +0 -368
  82. package/dist/storage/knowledge-store.test.js.map +0 -1
  83. package/dist/storage/metrics-store.test.d.ts +0 -2
  84. package/dist/storage/metrics-store.test.d.ts.map +0 -1
  85. package/dist/storage/metrics-store.test.js +0 -212
  86. package/dist/storage/metrics-store.test.js.map +0 -1
  87. package/dist/storage/pattern-store.test.d.ts +0 -2
  88. package/dist/storage/pattern-store.test.d.ts.map +0 -1
  89. package/dist/storage/pattern-store.test.js +0 -224
  90. package/dist/storage/pattern-store.test.js.map +0 -1
  91. package/dist/storage/spec-store.test.d.ts +0 -2
  92. package/dist/storage/spec-store.test.d.ts.map +0 -1
  93. package/dist/storage/spec-store.test.js +0 -227
  94. package/dist/storage/spec-store.test.js.map +0 -1
  95. package/dist/tools/audit.test.d.ts +0 -2
  96. package/dist/tools/audit.test.d.ts.map +0 -1
  97. package/dist/tools/audit.test.js +0 -169
  98. package/dist/tools/audit.test.js.map +0 -1
  99. package/dist/tools/challenge-spec.test.d.ts +0 -2
  100. package/dist/tools/challenge-spec.test.d.ts.map +0 -1
  101. package/dist/tools/challenge-spec.test.js +0 -782
  102. package/dist/tools/challenge-spec.test.js.map +0 -1
  103. package/dist/tools/check-versions.test.d.ts +0 -2
  104. package/dist/tools/check-versions.test.d.ts.map +0 -1
  105. package/dist/tools/check-versions.test.js +0 -214
  106. package/dist/tools/check-versions.test.js.map +0 -1
  107. package/dist/tools/clarify-requirements.test.d.ts +0 -2
  108. package/dist/tools/clarify-requirements.test.d.ts.map +0 -1
  109. package/dist/tools/clarify-requirements.test.js +0 -161
  110. package/dist/tools/clarify-requirements.test.js.map +0 -1
  111. package/dist/tools/consult-docs.test.d.ts +0 -2
  112. package/dist/tools/consult-docs.test.d.ts.map +0 -1
  113. package/dist/tools/consult-docs.test.js +0 -140
  114. package/dist/tools/consult-docs.test.js.map +0 -1
  115. package/dist/tools/create-spec.test.d.ts +0 -2
  116. package/dist/tools/create-spec.test.d.ts.map +0 -1
  117. package/dist/tools/create-spec.test.js +0 -233
  118. package/dist/tools/create-spec.test.js.map +0 -1
  119. package/dist/tools/define-ui-contract.test.d.ts +0 -2
  120. package/dist/tools/define-ui-contract.test.d.ts.map +0 -1
  121. package/dist/tools/define-ui-contract.test.js +0 -479
  122. package/dist/tools/define-ui-contract.test.js.map +0 -1
  123. package/dist/tools/design-schema.test.d.ts +0 -2
  124. package/dist/tools/design-schema.test.d.ts.map +0 -1
  125. package/dist/tools/design-schema.test.js +0 -301
  126. package/dist/tools/design-schema.test.js.map +0 -1
  127. package/dist/tools/detect-agent.test.d.ts +0 -2
  128. package/dist/tools/detect-agent.test.d.ts.map +0 -1
  129. package/dist/tools/detect-agent.test.js +0 -133
  130. package/dist/tools/detect-agent.test.js.map +0 -1
  131. package/dist/tools/detect-drift.test.d.ts +0 -2
  132. package/dist/tools/detect-drift.test.d.ts.map +0 -1
  133. package/dist/tools/detect-drift.test.js +0 -312
  134. package/dist/tools/detect-drift.test.js.map +0 -1
  135. package/dist/tools/discover-mcps.test.d.ts +0 -2
  136. package/dist/tools/discover-mcps.test.d.ts.map +0 -1
  137. package/dist/tools/discover-mcps.test.js +0 -345
  138. package/dist/tools/discover-mcps.test.js.map +0 -1
  139. package/dist/tools/estimate.test.d.ts +0 -2
  140. package/dist/tools/estimate.test.d.ts.map +0 -1
  141. package/dist/tools/estimate.test.js +0 -137
  142. package/dist/tools/estimate.test.js.map +0 -1
  143. package/dist/tools/generate-adr.test.d.ts +0 -2
  144. package/dist/tools/generate-adr.test.d.ts.map +0 -1
  145. package/dist/tools/generate-adr.test.js +0 -206
  146. package/dist/tools/generate-adr.test.js.map +0 -1
  147. package/dist/tools/generate-checklist.test.d.ts +0 -2
  148. package/dist/tools/generate-checklist.test.d.ts.map +0 -1
  149. package/dist/tools/generate-checklist.test.js +0 -201
  150. package/dist/tools/generate-checklist.test.js.map +0 -1
  151. package/dist/tools/generate-docs.test.d.ts +0 -2
  152. package/dist/tools/generate-docs.test.d.ts.map +0 -1
  153. package/dist/tools/generate-docs.test.js +0 -183
  154. package/dist/tools/generate-docs.test.js.map +0 -1
  155. package/dist/tools/generate-execution-plan.test.d.ts +0 -2
  156. package/dist/tools/generate-execution-plan.test.d.ts.map +0 -1
  157. package/dist/tools/generate-execution-plan.test.js +0 -643
  158. package/dist/tools/generate-execution-plan.test.js.map +0 -1
  159. package/dist/tools/generate-rules.test.d.ts +0 -2
  160. package/dist/tools/generate-rules.test.d.ts.map +0 -1
  161. package/dist/tools/generate-rules.test.js +0 -148
  162. package/dist/tools/generate-rules.test.js.map +0 -1
  163. package/dist/tools/generate-skill.test.d.ts +0 -2
  164. package/dist/tools/generate-skill.test.d.ts.map +0 -1
  165. package/dist/tools/generate-skill.test.js +0 -138
  166. package/dist/tools/generate-skill.test.js.map +0 -1
  167. package/dist/tools/generate-sub-agent.test.d.ts +0 -2
  168. package/dist/tools/generate-sub-agent.test.d.ts.map +0 -1
  169. package/dist/tools/generate-sub-agent.test.js +0 -162
  170. package/dist/tools/generate-sub-agent.test.js.map +0 -1
  171. package/dist/tools/generate-tests.test.d.ts +0 -2
  172. package/dist/tools/generate-tests.test.d.ts.map +0 -1
  173. package/dist/tools/generate-tests.test.js +0 -222
  174. package/dist/tools/generate-tests.test.js.map +0 -1
  175. package/dist/tools/init-constitution.test.d.ts +0 -2
  176. package/dist/tools/init-constitution.test.d.ts.map +0 -1
  177. package/dist/tools/init-constitution.test.js +0 -398
  178. package/dist/tools/init-constitution.test.js.map +0 -1
  179. package/dist/tools/init-project.test.d.ts +0 -2
  180. package/dist/tools/init-project.test.d.ts.map +0 -1
  181. package/dist/tools/init-project.test.js +0 -158
  182. package/dist/tools/init-project.test.js.map +0 -1
  183. package/dist/tools/integrate-pm.test.d.ts +0 -2
  184. package/dist/tools/integrate-pm.test.d.ts.map +0 -1
  185. package/dist/tools/integrate-pm.test.js +0 -558
  186. package/dist/tools/integrate-pm.test.js.map +0 -1
  187. package/dist/tools/learn.test.d.ts +0 -2
  188. package/dist/tools/learn.test.d.ts.map +0 -1
  189. package/dist/tools/learn.test.js +0 -123
  190. package/dist/tools/learn.test.js.map +0 -1
  191. package/dist/tools/list-specs.test.d.ts +0 -2
  192. package/dist/tools/list-specs.test.d.ts.map +0 -1
  193. package/dist/tools/list-specs.test.js +0 -110
  194. package/dist/tools/list-specs.test.js.map +0 -1
  195. package/dist/tools/manage-context.test.d.ts +0 -2
  196. package/dist/tools/manage-context.test.d.ts.map +0 -1
  197. package/dist/tools/manage-context.test.js +0 -359
  198. package/dist/tools/manage-context.test.js.map +0 -1
  199. package/dist/tools/manage-git.test.d.ts +0 -2
  200. package/dist/tools/manage-git.test.d.ts.map +0 -1
  201. package/dist/tools/manage-git.test.js +0 -882
  202. package/dist/tools/manage-git.test.js.map +0 -1
  203. package/dist/tools/orchestrate.test.d.ts +0 -2
  204. package/dist/tools/orchestrate.test.d.ts.map +0 -1
  205. package/dist/tools/orchestrate.test.js +0 -1117
  206. package/dist/tools/orchestrate.test.js.map +0 -1
  207. package/dist/tools/reconcile-spec.test.d.ts +0 -2
  208. package/dist/tools/reconcile-spec.test.d.ts.map +0 -1
  209. package/dist/tools/reconcile-spec.test.js +0 -259
  210. package/dist/tools/reconcile-spec.test.js.map +0 -1
  211. package/dist/tools/register-platform-tools.test.d.ts +0 -2
  212. package/dist/tools/register-platform-tools.test.d.ts.map +0 -1
  213. package/dist/tools/register-platform-tools.test.js +0 -404
  214. package/dist/tools/register-platform-tools.test.js.map +0 -1
  215. package/dist/tools/register-spec-tools.test.d.ts +0 -2
  216. package/dist/tools/register-spec-tools.test.d.ts.map +0 -1
  217. package/dist/tools/register-spec-tools.test.js +0 -407
  218. package/dist/tools/register-spec-tools.test.js.map +0 -1
  219. package/dist/tools/reverse-engineer.test.d.ts +0 -2
  220. package/dist/tools/reverse-engineer.test.d.ts.map +0 -1
  221. package/dist/tools/reverse-engineer.test.js +0 -206
  222. package/dist/tools/reverse-engineer.test.js.map +0 -1
  223. package/dist/tools/schemas.d.ts +0 -20
  224. package/dist/tools/schemas.d.ts.map +0 -1
  225. package/dist/tools/schemas.js +0 -133
  226. package/dist/tools/schemas.js.map +0 -1
  227. package/dist/tools/schemas.test.d.ts +0 -2
  228. package/dist/tools/schemas.test.d.ts.map +0 -1
  229. package/dist/tools/schemas.test.js +0 -245
  230. package/dist/tools/schemas.test.js.map +0 -1
  231. package/dist/tools/set-locale.test.d.ts +0 -2
  232. package/dist/tools/set-locale.test.d.ts.map +0 -1
  233. package/dist/tools/set-locale.test.js +0 -74
  234. package/dist/tools/set-locale.test.js.map +0 -1
  235. package/dist/tools/suggest-mcps.test.d.ts +0 -2
  236. package/dist/tools/suggest-mcps.test.d.ts.map +0 -1
  237. package/dist/tools/suggest-mcps.test.js +0 -198
  238. package/dist/tools/suggest-mcps.test.js.map +0 -1
  239. package/dist/tools/suggest-stack.test.d.ts +0 -2
  240. package/dist/tools/suggest-stack.test.d.ts.map +0 -1
  241. package/dist/tools/suggest-stack.test.js +0 -181
  242. package/dist/tools/suggest-stack.test.js.map +0 -1
  243. package/dist/tools/suggest-tooling.test.d.ts +0 -2
  244. package/dist/tools/suggest-tooling.test.d.ts.map +0 -1
  245. package/dist/tools/suggest-tooling.test.js +0 -213
  246. package/dist/tools/suggest-tooling.test.js.map +0 -1
  247. package/dist/tools/summarize-spec.test.d.ts +0 -2
  248. package/dist/tools/summarize-spec.test.d.ts.map +0 -1
  249. package/dist/tools/summarize-spec.test.js +0 -180
  250. package/dist/tools/summarize-spec.test.js.map +0 -1
  251. package/dist/tools/update-status.test.d.ts +0 -2
  252. package/dist/tools/update-status.test.d.ts.map +0 -1
  253. package/dist/tools/update-status.test.js +0 -142
  254. package/dist/tools/update-status.test.js.map +0 -1
  255. package/dist/tools/validate.test.d.ts +0 -2
  256. package/dist/tools/validate.test.d.ts.map +0 -1
  257. package/dist/tools/validate.test.js +0 -137
  258. package/dist/tools/validate.test.js.map +0 -1
@@ -1,479 +0,0 @@
1
- // Tests for handleDefineUIContract
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- vi.mock('../i18n/index.js', () => ({
4
- t: (key) => key,
5
- ti: (key, vars) => `${key}:${JSON.stringify(vars)}`,
6
- }));
7
- vi.mock('../storage/index.js', () => ({
8
- specStore: { getSpec: vi.fn() },
9
- knowledgeStore: { getKnowledge: vi.fn() },
10
- }));
11
- vi.mock('node:fs/promises', () => ({
12
- readFile: vi.fn(),
13
- }));
14
- import { handleDefineUIContract } from './define-ui-contract.js';
15
- import { specStore, knowledgeStore } from '../storage/index.js';
16
- import { readFile } from 'node:fs/promises';
17
- const mockGetSpec = vi.mocked(specStore.getSpec);
18
- const mockGetKnowledge = vi.mocked(knowledgeStore.getKnowledge);
19
- const mockReadFile = vi.mocked(readFile);
20
- const baseSpec = {
21
- id: 'SPEC-001',
22
- title: 'Dashboard',
23
- type: 'feature',
24
- scope: 'feature',
25
- target: 'frontend',
26
- tags: ['ui', 'dashboard'],
27
- status: 'approved',
28
- risk: 'medium',
29
- difficulty: 3,
30
- estimation: { devHours: 8, reviewHours: 2, totalCostUsd: 100 },
31
- dependencies: [],
32
- huPath: null,
33
- fichaTecnicaPath: null,
34
- };
35
- const baseKnowledge = {
36
- language: 'typescript',
37
- framework: 'next',
38
- projectPath: '/test',
39
- stack: [],
40
- conventions: {},
41
- architecture: { primary: 'monolith', secondary: [], layers: [] },
42
- database: 'postgresql',
43
- testCommand: null,
44
- buildCommand: null,
45
- linting: { detectedLinters: [] },
46
- apiContracts: [{ type: 'REST' }],
47
- layers: [],
48
- };
49
- beforeEach(() => {
50
- vi.clearAllMocks();
51
- mockReadFile.mockRejectedValue(new Error('not found'));
52
- });
53
- describe('handleDefineUIContract', () => {
54
- it('should return error when spec not found', async () => {
55
- mockGetSpec.mockResolvedValue(null);
56
- const result = await handleDefineUIContract({
57
- specId: 'SPEC-999',
58
- projectId: 'proj-1',
59
- });
60
- expect(result.isError).toBe(true);
61
- });
62
- it('should return error for backend-only spec', async () => {
63
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'backend' });
64
- const result = await handleDefineUIContract({
65
- specId: 'SPEC-001',
66
- projectId: 'proj-1',
67
- });
68
- expect(result.isError).toBe(true);
69
- expect(result.content[0].text).toContain('no UI components');
70
- });
71
- it('should return error for database spec', async () => {
72
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'database' });
73
- const result = await handleDefineUIContract({
74
- specId: 'SPEC-001',
75
- projectId: 'proj-1',
76
- });
77
- expect(result.isError).toBe(true);
78
- });
79
- it('should return error for infrastructure spec', async () => {
80
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'infrastructure' });
81
- const result = await handleDefineUIContract({
82
- specId: 'SPEC-001',
83
- projectId: 'proj-1',
84
- });
85
- expect(result.isError).toBe(true);
86
- });
87
- it('should return error when knowledge not found', async () => {
88
- mockGetSpec.mockResolvedValue(baseSpec);
89
- mockGetKnowledge.mockResolvedValue(null);
90
- const result = await handleDefineUIContract({
91
- specId: 'SPEC-001',
92
- projectId: 'proj-1',
93
- });
94
- expect(result.isError).toBe(true);
95
- });
96
- it('should generate UI contract for frontend spec', async () => {
97
- mockGetSpec.mockResolvedValue(baseSpec);
98
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
99
- const result = await handleDefineUIContract({
100
- specId: 'SPEC-001',
101
- projectId: 'proj-1',
102
- });
103
- expect(result.isError).toBeUndefined();
104
- expect(result.content).toHaveLength(2);
105
- const data = JSON.parse(result.content[1].text);
106
- expect(data.componentTree).toBeDefined();
107
- expect(data.componentTree.length).toBeGreaterThan(0);
108
- expect(data.dataFlow).toBeDefined();
109
- expect(data.loadingStates).toBeDefined();
110
- expect(data.errorStates).toBeDefined();
111
- });
112
- it('should use provided screen names', async () => {
113
- mockGetSpec.mockResolvedValue(baseSpec);
114
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
115
- const result = await handleDefineUIContract({
116
- specId: 'SPEC-001',
117
- projectId: 'proj-1',
118
- screens: ['settings', 'profile'],
119
- });
120
- const data = JSON.parse(result.content[1].text);
121
- const names = data.componentTree.map((n) => n.name);
122
- expect(names).toContain('SettingsPage');
123
- expect(names).toContain('ProfilePage');
124
- });
125
- it('should detect form components from spec content', async () => {
126
- mockGetSpec.mockResolvedValue({
127
- ...baseSpec,
128
- title: 'User form with input submission and create',
129
- tags: ['form', 'submit'],
130
- });
131
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
132
- const result = await handleDefineUIContract({
133
- specId: 'SPEC-001',
134
- projectId: 'proj-1',
135
- screens: ['user'],
136
- });
137
- const data = JSON.parse(result.content[1].text);
138
- const pageChildren = data.componentTree[0].children;
139
- const hasForm = pageChildren.some((c) => c.name.includes('Form'));
140
- expect(hasForm).toBe(true);
141
- });
142
- it('should detect list components from spec content', async () => {
143
- mockGetSpec.mockResolvedValue({
144
- ...baseSpec,
145
- title: 'Product list display table browse',
146
- tags: ['list'],
147
- });
148
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
149
- const result = await handleDefineUIContract({
150
- specId: 'SPEC-001',
151
- projectId: 'proj-1',
152
- screens: ['products'],
153
- });
154
- const data = JSON.parse(result.content[1].text);
155
- const pageChildren = data.componentTree[0].children;
156
- const hasList = pageChildren.some((c) => c.name.includes('List'));
157
- expect(hasList).toBe(true);
158
- });
159
- it('should handle fullstack spec target', async () => {
160
- mockGetSpec.mockResolvedValue({ ...baseSpec, target: 'fullstack' });
161
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
162
- const result = await handleDefineUIContract({
163
- specId: 'SPEC-001',
164
- projectId: 'proj-1',
165
- });
166
- expect(result.isError).toBeUndefined();
167
- });
168
- it('should use client type for vue framework', async () => {
169
- mockGetSpec.mockResolvedValue(baseSpec);
170
- mockGetKnowledge.mockResolvedValue({
171
- ...baseKnowledge,
172
- framework: 'vue',
173
- });
174
- const result = await handleDefineUIContract({
175
- specId: 'SPEC-001',
176
- projectId: 'proj-1',
177
- screens: ['home'],
178
- });
179
- const data = JSON.parse(result.content[1].text);
180
- expect(data.componentTree[0].type).toBe('client');
181
- });
182
- // --- Coverage for knowledge.framework ?? 'react' fallback (line 136) ---
183
- it('should default to react behavior when framework is null', async () => {
184
- mockGetSpec.mockResolvedValue(baseSpec);
185
- mockGetKnowledge.mockResolvedValue({
186
- ...baseKnowledge,
187
- framework: null,
188
- });
189
- const result = await handleDefineUIContract({
190
- specId: 'SPEC-001',
191
- projectId: 'proj-1',
192
- screens: ['home'],
193
- });
194
- expect(result.isError).toBeUndefined();
195
- const data = JSON.parse(result.content[1].text);
196
- // Without framework, defaults to 'react' which means server type for pages
197
- expect(data.componentTree[0].type).toBe('server');
198
- });
199
- // --- Coverage for readSpecContent catch blocks (lines 579-590) ---
200
- it('should read huPath content when available', async () => {
201
- mockGetSpec.mockResolvedValue({
202
- ...baseSpec,
203
- huPath: '/test/hu.md',
204
- fichaTecnicaPath: null,
205
- });
206
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
207
- mockReadFile.mockImplementation(((path) => {
208
- if (path === '/test/hu.md') {
209
- return Promise.resolve('form input submit create edit update list table grid display action button save delete confirm detail view profile info summary');
210
- }
211
- return Promise.reject(new Error('not found'));
212
- }));
213
- const result = await handleDefineUIContract({
214
- specId: 'SPEC-001',
215
- projectId: 'proj-1',
216
- screens: ['dashboard'],
217
- });
218
- expect(result.isError).toBeUndefined();
219
- const data = JSON.parse(result.content[1].text);
220
- // Should have form, list, detail, and actions components because of content keywords
221
- const children = data.componentTree[0].children;
222
- expect(children.some((c) => c.name.includes('Form'))).toBe(true);
223
- expect(children.some((c) => c.name.includes('List'))).toBe(true);
224
- expect(children.some((c) => c.name.includes('Detail'))).toBe(true);
225
- expect(children.some((c) => c.name.includes('Actions'))).toBe(true);
226
- });
227
- it('should read fichaTecnicaPath content when available', async () => {
228
- mockGetSpec.mockResolvedValue({
229
- ...baseSpec,
230
- huPath: null,
231
- fichaTecnicaPath: '/test/ficha.md',
232
- });
233
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
234
- mockReadFile.mockImplementation(((path) => {
235
- if (path === '/test/ficha.md') {
236
- return Promise.resolve('form input submit');
237
- }
238
- return Promise.reject(new Error('not found'));
239
- }));
240
- const result = await handleDefineUIContract({
241
- specId: 'SPEC-001',
242
- projectId: 'proj-1',
243
- screens: ['user'],
244
- });
245
- expect(result.isError).toBeUndefined();
246
- const data = JSON.parse(result.content[1].text);
247
- const children = data.componentTree[0].children;
248
- expect(children.some((c) => c.name.includes('Form'))).toBe(true);
249
- });
250
- it('should handle readFile errors gracefully for both paths', async () => {
251
- mockGetSpec.mockResolvedValue({
252
- ...baseSpec,
253
- huPath: '/test/missing-hu.md',
254
- fichaTecnicaPath: '/test/missing-ficha.md',
255
- });
256
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
257
- mockReadFile.mockRejectedValue(new Error('ENOENT'));
258
- const result = await handleDefineUIContract({
259
- specId: 'SPEC-001',
260
- projectId: 'proj-1',
261
- });
262
- expect(result.isError).toBeUndefined();
263
- });
264
- // --- Coverage for countComponents recursive counting (line 566-573) ---
265
- it('should count all nested components correctly', async () => {
266
- mockGetSpec.mockResolvedValue({
267
- ...baseSpec,
268
- title: 'Dashboard with list and detail view profile info',
269
- tags: ['list', 'detail'],
270
- });
271
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
272
- const result = await handleDefineUIContract({
273
- specId: 'SPEC-001',
274
- projectId: 'proj-1',
275
- screens: ['products'],
276
- });
277
- expect(result.isError).toBeUndefined();
278
- // The success message should contain a component count
279
- expect(result.content[0].text).toContain('componentCount');
280
- const data = JSON.parse(result.content[1].text);
281
- // Recursively count
282
- let totalComponents = 0;
283
- const countAll = (nodes) => {
284
- for (const node of nodes) {
285
- totalComponents++;
286
- if (node.children) {
287
- countAll(node.children);
288
- }
289
- }
290
- };
291
- countAll(data.componentTree);
292
- expect(totalComponents).toBeGreaterThan(0);
293
- });
294
- // --- Coverage for extractScreens with URL-like patterns ---
295
- it('should extract screens from spec content when no screens provided', async () => {
296
- mockGetSpec.mockResolvedValue({
297
- ...baseSpec,
298
- title: 'page settings screen admin view users modal dialog',
299
- tags: ['route'],
300
- });
301
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
302
- const result = await handleDefineUIContract({
303
- specId: 'SPEC-001',
304
- projectId: 'proj-1',
305
- });
306
- expect(result.isError).toBeUndefined();
307
- const data = JSON.parse(result.content[1].text);
308
- // Should have extracted screens from content
309
- expect(data.componentTree.length).toBeGreaterThan(0);
310
- });
311
- // --- Coverage for default screen "main" when no screens detected ---
312
- it('should use default "main" screen when no screens detected in content', async () => {
313
- mockGetSpec.mockResolvedValue({
314
- ...baseSpec,
315
- title: 'Simple feature',
316
- tags: [],
317
- });
318
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
319
- const result = await handleDefineUIContract({
320
- specId: 'SPEC-001',
321
- projectId: 'proj-1',
322
- });
323
- const data = JSON.parse(result.content[1].text);
324
- const names = data.componentTree.map((n) => n.name);
325
- expect(names).toContain('MainPage');
326
- });
327
- // --- Coverage for generic content area when only header detected (line 251-261) ---
328
- it('should add generic content area when only header component detected', async () => {
329
- mockGetSpec.mockResolvedValue({
330
- ...baseSpec,
331
- title: 'Simple static page',
332
- tags: [],
333
- });
334
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
335
- const result = await handleDefineUIContract({
336
- specId: 'SPEC-001',
337
- projectId: 'proj-1',
338
- screens: ['about'],
339
- });
340
- const data = JSON.parse(result.content[1].text);
341
- const children = data.componentTree[0].children;
342
- const hasContent = children.some((c) => c.name.includes('Content'));
343
- expect(hasContent).toBe(true);
344
- });
345
- // --- Coverage for dataFlow with Form and List clients (lines 435-451) ---
346
- it('should generate data flow entries for Form and List client components', async () => {
347
- mockGetSpec.mockResolvedValue({
348
- ...baseSpec,
349
- title: 'Product form input submit create list table grid display',
350
- tags: ['form', 'list'],
351
- });
352
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
353
- const result = await handleDefineUIContract({
354
- specId: 'SPEC-001',
355
- projectId: 'proj-1',
356
- screens: ['products'],
357
- });
358
- const data = JSON.parse(result.content[1].text);
359
- const hasFormSubmission = data.dataFlow.some((f) => f.data === 'Form submission');
360
- const hasFilterParams = data.dataFlow.some((f) => f.data.includes('Filter/sort/pagination'));
361
- expect(hasFormSubmission).toBe(true);
362
- expect(hasFilterParams).toBe(true);
363
- });
364
- // --- Coverage for loading states: Actions component (line 487-493) ---
365
- it('should generate loading states for Action components', async () => {
366
- mockGetSpec.mockResolvedValue({
367
- ...baseSpec,
368
- title: 'Settings action button save delete confirm',
369
- tags: ['actions'],
370
- });
371
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
372
- const result = await handleDefineUIContract({
373
- specId: 'SPEC-001',
374
- projectId: 'proj-1',
375
- screens: ['settings'],
376
- });
377
- const data = JSON.parse(result.content[1].text);
378
- const hasActionsLoading = data.loadingStates.some((s) => s.component.includes('Actions'));
379
- expect(hasActionsLoading).toBe(true);
380
- });
381
- // --- Coverage for error states: Form and List errors (lines 523-549) ---
382
- it('should generate error states for Form and List components', async () => {
383
- mockGetSpec.mockResolvedValue({
384
- ...baseSpec,
385
- title: 'Order form input submit create list table display',
386
- tags: ['form', 'list'],
387
- });
388
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
389
- const result = await handleDefineUIContract({
390
- specId: 'SPEC-001',
391
- projectId: 'proj-1',
392
- screens: ['orders'],
393
- });
394
- const data = JSON.parse(result.content[1].text);
395
- // Form error states
396
- const hasFormValidation = data.errorStates.some((s) => s.trigger.includes('Validation error'));
397
- const hasFormServer = data.errorStates.some((s) => s.trigger.includes('Server rejection'));
398
- // List error states
399
- const hasEmptyState = data.errorStates.some((s) => s.trigger.includes('Empty state'));
400
- const hasFetchError = data.errorStates.some((s) => s.trigger.includes('Fetch error'));
401
- expect(hasFormValidation).toBe(true);
402
- expect(hasFormServer).toBe(true);
403
- expect(hasEmptyState).toBe(true);
404
- expect(hasFetchError).toBe(true);
405
- });
406
- // --- Coverage for dataFlow without apiContracts ---
407
- it('should default to REST API type when no apiContracts defined', async () => {
408
- mockGetSpec.mockResolvedValue(baseSpec);
409
- mockGetKnowledge.mockResolvedValue({
410
- ...baseKnowledge,
411
- apiContracts: [],
412
- });
413
- const result = await handleDefineUIContract({
414
- specId: 'SPEC-001',
415
- projectId: 'proj-1',
416
- screens: ['home'],
417
- });
418
- const data = JSON.parse(result.content[1].text);
419
- const hasRestFetch = data.dataFlow.some((f) => f.method.includes('REST'));
420
- expect(hasRestFetch).toBe(true);
421
- });
422
- // --- Coverage for extractFormFields: default fields ---
423
- it('should use default form fields (name, description) when none extracted', async () => {
424
- mockGetSpec.mockResolvedValue({
425
- ...baseSpec,
426
- title: 'Create form submit',
427
- tags: ['form'],
428
- });
429
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
430
- const result = await handleDefineUIContract({
431
- specId: 'SPEC-001',
432
- projectId: 'proj-1',
433
- screens: ['item'],
434
- });
435
- const data = JSON.parse(result.content[1].text);
436
- const formComponent = data.componentTree[0].children.find((c) => c.name.includes('Form'));
437
- if (formComponent) {
438
- const fieldNames = formComponent.children.map((c) => c.name.toLowerCase());
439
- // Should have default fields name and description as children
440
- expect(fieldNames.length).toBeGreaterThanOrEqual(2);
441
- }
442
- });
443
- // --- Coverage for extractFormFields: pattern matching fields ---
444
- it('should extract form fields from spec content patterns', async () => {
445
- mockGetSpec.mockResolvedValue({
446
- ...baseSpec,
447
- title: 'Registration: field email, provide username, name input, password field',
448
- tags: ['form'],
449
- });
450
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
451
- const result = await handleDefineUIContract({
452
- specId: 'SPEC-001',
453
- projectId: 'proj-1',
454
- screens: ['register'],
455
- });
456
- const data = JSON.parse(result.content[1].text);
457
- const formComponent = data.componentTree[0].children.find((c) => c.name.includes('Form'));
458
- expect(formComponent).toBeDefined();
459
- expect(formComponent.children.length).toBeGreaterThan(0);
460
- });
461
- // --- Coverage for server component data flow method (line 431) ---
462
- it('should use server component props method for server-type children', async () => {
463
- mockGetSpec.mockResolvedValue({
464
- ...baseSpec,
465
- title: 'Detail view profile info',
466
- tags: ['detail'],
467
- });
468
- mockGetKnowledge.mockResolvedValue(baseKnowledge);
469
- const result = await handleDefineUIContract({
470
- specId: 'SPEC-001',
471
- projectId: 'proj-1',
472
- screens: ['user'],
473
- });
474
- const data = JSON.parse(result.content[1].text);
475
- const hasServerProps = data.dataFlow.some((f) => f.method.includes('Server component props'));
476
- expect(hasServerProps).toBe(true);
477
- });
478
- });
479
- //# sourceMappingURL=define-ui-contract.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"define-ui-contract.test.js","sourceRoot":"","sources":["../../src/tools/define-ui-contract.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=design-schema.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-schema.test.d.ts","sourceRoot":"","sources":["../../src/tools/design-schema.test.ts"],"names":[],"mappings":""}