@provartesting/provardx-cli 1.5.0-dev.1 → 1.5.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 (129) hide show
  1. package/README.md +163 -13
  2. package/bin/mcp-start.js +74 -0
  3. package/lib/commands/provar/auth/clear.d.ts +7 -0
  4. package/lib/commands/provar/auth/clear.js +36 -0
  5. package/lib/commands/provar/auth/clear.js.map +1 -0
  6. package/lib/commands/provar/auth/login.d.ts +10 -0
  7. package/lib/commands/provar/auth/login.js +90 -0
  8. package/lib/commands/provar/auth/login.js.map +1 -0
  9. package/lib/commands/provar/auth/rotate.d.ts +7 -0
  10. package/lib/commands/provar/auth/rotate.js +42 -0
  11. package/lib/commands/provar/auth/rotate.js.map +1 -0
  12. package/lib/commands/provar/auth/status.d.ts +7 -0
  13. package/lib/commands/provar/auth/status.js +107 -0
  14. package/lib/commands/provar/auth/status.js.map +1 -0
  15. package/lib/commands/provar/mcp/start.d.ts +2 -0
  16. package/lib/commands/provar/mcp/start.js +14 -1
  17. package/lib/commands/provar/mcp/start.js.map +1 -1
  18. package/lib/mcp/docs/NITROX_CATALOG_SOURCE.json +6 -0
  19. package/lib/mcp/docs/NITROX_COMPONENT_CATALOG.md +2001 -0
  20. package/lib/mcp/docs/PROVAR_TEST_STEP_REFERENCE.md +1430 -0
  21. package/lib/mcp/docs/PROVAR_TOOL_GUIDE.md +175 -0
  22. package/lib/mcp/licensing/algasClient.js +14 -5
  23. package/lib/mcp/licensing/algasClient.js.map +1 -1
  24. package/lib/mcp/licensing/ideDetection.d.ts +0 -12
  25. package/lib/mcp/licensing/ideDetection.js +1 -73
  26. package/lib/mcp/licensing/ideDetection.js.map +1 -1
  27. package/lib/mcp/licensing/licenseCache.js +7 -1
  28. package/lib/mcp/licensing/licenseCache.js.map +1 -1
  29. package/lib/mcp/licensing/licenseValidator.d.ts +3 -3
  30. package/lib/mcp/licensing/licenseValidator.js +11 -4
  31. package/lib/mcp/licensing/licenseValidator.js.map +1 -1
  32. package/lib/mcp/prompts/guidePrompts.d.ts +4 -0
  33. package/lib/mcp/prompts/guidePrompts.js +324 -0
  34. package/lib/mcp/prompts/guidePrompts.js.map +1 -0
  35. package/lib/mcp/prompts/index.d.ts +2 -0
  36. package/lib/mcp/prompts/index.js +23 -0
  37. package/lib/mcp/prompts/index.js.map +1 -0
  38. package/lib/mcp/prompts/loopPrompts.d.ts +6 -0
  39. package/lib/mcp/prompts/loopPrompts.js +435 -0
  40. package/lib/mcp/prompts/loopPrompts.js.map +1 -0
  41. package/lib/mcp/prompts/migrationPrompts.d.ts +4 -0
  42. package/lib/mcp/prompts/migrationPrompts.js +207 -0
  43. package/lib/mcp/prompts/migrationPrompts.js.map +1 -0
  44. package/lib/mcp/rules/provar_best_practices_rules.json +256 -544
  45. package/lib/mcp/security/pathPolicy.d.ts +5 -0
  46. package/lib/mcp/security/pathPolicy.js +58 -3
  47. package/lib/mcp/security/pathPolicy.js.map +1 -1
  48. package/lib/mcp/server.d.ts +17 -0
  49. package/lib/mcp/server.js +151 -6
  50. package/lib/mcp/server.js.map +1 -1
  51. package/lib/mcp/tools/antTools.d.ts +15 -0
  52. package/lib/mcp/tools/antTools.js +347 -170
  53. package/lib/mcp/tools/antTools.js.map +1 -1
  54. package/lib/mcp/tools/automationTools.d.ts +18 -8
  55. package/lib/mcp/tools/automationTools.js +332 -176
  56. package/lib/mcp/tools/automationTools.js.map +1 -1
  57. package/lib/mcp/tools/bestPracticesEngine.js +161 -23
  58. package/lib/mcp/tools/bestPracticesEngine.js.map +1 -1
  59. package/lib/mcp/tools/connectionTools.d.ts +4 -0
  60. package/lib/mcp/tools/connectionTools.js +172 -0
  61. package/lib/mcp/tools/connectionTools.js.map +1 -0
  62. package/lib/mcp/tools/defectTools.d.ts +1 -1
  63. package/lib/mcp/tools/defectTools.js +56 -50
  64. package/lib/mcp/tools/defectTools.js.map +1 -1
  65. package/lib/mcp/tools/hierarchyValidate.d.ts +1 -1
  66. package/lib/mcp/tools/hierarchyValidate.js +127 -42
  67. package/lib/mcp/tools/hierarchyValidate.js.map +1 -1
  68. package/lib/mcp/tools/nitroXTools.d.ts +23 -0
  69. package/lib/mcp/tools/nitroXTools.js +823 -0
  70. package/lib/mcp/tools/nitroXTools.js.map +1 -0
  71. package/lib/mcp/tools/pageObjectGenerate.js +132 -57
  72. package/lib/mcp/tools/pageObjectGenerate.js.map +1 -1
  73. package/lib/mcp/tools/pageObjectValidate.js +136 -46
  74. package/lib/mcp/tools/pageObjectValidate.js.map +1 -1
  75. package/lib/mcp/tools/projectInspect.js +51 -30
  76. package/lib/mcp/tools/projectInspect.js.map +1 -1
  77. package/lib/mcp/tools/projectValidateFromPath.js +70 -49
  78. package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
  79. package/lib/mcp/tools/propertiesTools.d.ts +2 -0
  80. package/lib/mcp/tools/propertiesTools.js +332 -78
  81. package/lib/mcp/tools/propertiesTools.js.map +1 -1
  82. package/lib/mcp/tools/qualityHubApiTools.d.ts +3 -0
  83. package/lib/mcp/tools/qualityHubApiTools.js +138 -0
  84. package/lib/mcp/tools/qualityHubApiTools.js.map +1 -0
  85. package/lib/mcp/tools/qualityHubTools.js +219 -70
  86. package/lib/mcp/tools/qualityHubTools.js.map +1 -1
  87. package/lib/mcp/tools/rcaTools.d.ts +3 -2
  88. package/lib/mcp/tools/rcaTools.js +189 -56
  89. package/lib/mcp/tools/rcaTools.js.map +1 -1
  90. package/lib/mcp/tools/sfSpawn.d.ts +25 -3
  91. package/lib/mcp/tools/sfSpawn.js +154 -6
  92. package/lib/mcp/tools/sfSpawn.js.map +1 -1
  93. package/lib/mcp/tools/testCaseGenerate.js +226 -78
  94. package/lib/mcp/tools/testCaseGenerate.js.map +1 -1
  95. package/lib/mcp/tools/testCaseStepTools.d.ts +4 -0
  96. package/lib/mcp/tools/testCaseStepTools.js +226 -0
  97. package/lib/mcp/tools/testCaseStepTools.js.map +1 -0
  98. package/lib/mcp/tools/testCaseValidate.d.ts +11 -0
  99. package/lib/mcp/tools/testCaseValidate.js +307 -46
  100. package/lib/mcp/tools/testCaseValidate.js.map +1 -1
  101. package/lib/mcp/tools/testPlanTools.d.ts +1 -0
  102. package/lib/mcp/tools/testPlanTools.js +299 -59
  103. package/lib/mcp/tools/testPlanTools.js.map +1 -1
  104. package/lib/mcp/tools/testPlanValidate.js +56 -18
  105. package/lib/mcp/tools/testPlanValidate.js.map +1 -1
  106. package/lib/mcp/tools/testSuiteValidate.js +37 -11
  107. package/lib/mcp/tools/testSuiteValidate.js.map +1 -1
  108. package/lib/mcp/update/updateChecker.d.ts +14 -0
  109. package/lib/mcp/update/updateChecker.js +228 -0
  110. package/lib/mcp/update/updateChecker.js.map +1 -0
  111. package/lib/services/auth/credentials.d.ts +21 -0
  112. package/lib/services/auth/credentials.js +75 -0
  113. package/lib/services/auth/credentials.js.map +1 -0
  114. package/lib/services/auth/loginFlow.d.ts +68 -0
  115. package/lib/services/auth/loginFlow.js +216 -0
  116. package/lib/services/auth/loginFlow.js.map +1 -0
  117. package/lib/services/projectValidation.d.ts +5 -2
  118. package/lib/services/projectValidation.js +83 -31
  119. package/lib/services/projectValidation.js.map +1 -1
  120. package/lib/services/qualityHub/client.d.ts +161 -0
  121. package/lib/services/qualityHub/client.js +226 -0
  122. package/lib/services/qualityHub/client.js.map +1 -0
  123. package/messages/sf.provar.auth.clear.md +16 -0
  124. package/messages/sf.provar.auth.login.md +31 -0
  125. package/messages/sf.provar.auth.rotate.md +23 -0
  126. package/messages/sf.provar.auth.status.md +16 -0
  127. package/messages/sf.provar.mcp.start.md +83 -48
  128. package/oclif.manifest.json +299 -2
  129. package/package.json +23 -12
@@ -12,15 +12,30 @@ import { XMLParser } from 'fast-xml-parser';
12
12
  import { assertPathAllowed, PathPolicyError } from '../security/pathPolicy.js';
13
13
  import { makeError, makeRequestId } from '../schemas/common.js';
14
14
  import { log } from '../logging/logger.js';
15
+ import { resolveApiKey } from '../../services/auth/credentials.js';
16
+ import { qualityHubClient, getQualityHubBaseUrl, QualityHubAuthError, QualityHubRateLimitError, REQUEST_ACCESS_URL, } from '../../services/qualityHub/client.js';
15
17
  import { runBestPractices } from './bestPracticesEngine.js';
18
+ const ONBOARDING_MESSAGE = 'Quality Hub validation unavailable — running local validation only (structural rules, no quality scoring).\n' +
19
+ 'To enable Quality Hub (170 rules): run sf provar auth login\n' +
20
+ 'For CI/CD: set the PROVAR_API_KEY environment variable.\n' +
21
+ `No account? Request access at: ${REQUEST_ACCESS_URL}`;
22
+ const AUTH_WARNING = 'Quality Hub API key is invalid or expired. Running local validation only.\n' +
23
+ `Run sf provar auth login to get a new key, or request access at: ${REQUEST_ACCESS_URL}`;
24
+ const RATE_LIMIT_WARNING = 'Quality Hub API rate limit reached. Running local validation only. Try again shortly.';
25
+ const UNREACHABLE_WARNING = 'Quality Hub API unreachable. Running local validation only (structural rules, no quality scoring).\n' +
26
+ 'For CI/CD: set PROVAR_QUALITY_HUB_URL and PROVAR_API_KEY environment variables.';
16
27
  export function registerTestCaseValidate(server, config) {
17
- server.tool('provar.testcase.validate', 'Validate a Provar XML test case for structural correctness and quality. Checks XML declaration, root element, required attributes (guid UUID v4, testItemId integer), <steps> presence, and applies best-practice rules (same ruleset and scoring as the Quality Hub batch validation API). Returns validity_score (schema compliance) and quality_score (best practices, 0–100).', {
18
- content: z.string().optional().describe('XML content to validate directly (alias: xml)'),
19
- xml: z.string().optional().describe('XML content to validate API-compatible alias for content'),
20
- file_path: z.string().optional().describe('Path to .xml test case file'),
21
- }, ({ content, xml, file_path }) => {
28
+ server.registerTool('provar_testcase_validate', {
29
+ title: 'Validate Test Case',
30
+ description: 'Validate a Provar XML test case for structural correctness and quality. Checks XML declaration, root element, required attributes (guid UUID v4, testItemId integer), <steps> presence, and applies best-practice rules. When a Provar API key is configured (via sf provar auth login or PROVAR_API_KEY env var), calls the Quality Hub API for full 170-rule scoring. Falls back to local validation if no key is set or the API is unavailable. Returns validity_score (schema compliance), quality_score (best practices, 0–100), and validation_source indicating which ruleset was applied. When structural errors are returned, consult the provar://docs/step-reference MCP resource for correct step attribute schemas.',
31
+ inputSchema: {
32
+ content: z.string().optional().describe('XML content to validate directly (alias: xml)'),
33
+ xml: z.string().optional().describe('XML content to validate — API-compatible alias for content'),
34
+ file_path: z.string().optional().describe('Path to .xml test case file'),
35
+ },
36
+ }, async ({ content, xml, file_path }) => {
22
37
  const requestId = makeRequestId();
23
- log('info', 'provar.testcase.validate', { requestId, has_content: !!content, file_path });
38
+ log('info', 'provar_testcase_validate', { requestId, has_content: !!(content ?? xml), file_path });
24
39
  try {
25
40
  // Resolve xml alias: the batch validation API uses "xml", MCP originally used "content"
26
41
  let source = content ?? xml;
@@ -37,8 +52,62 @@ export function registerTestCaseValidate(server, config) {
37
52
  const err = makeError('MISSING_INPUT', 'Provide either content or file_path.', requestId);
38
53
  return { isError: true, content: [{ type: 'text', text: JSON.stringify(err) }] };
39
54
  }
40
- const validation = validateTestCase(source);
41
- const result = { requestId, ...validation };
55
+ const apiKey = resolveApiKey();
56
+ if (apiKey) {
57
+ const baseUrl = getQualityHubBaseUrl();
58
+ try {
59
+ const apiResult = await qualityHubClient.validateTestCaseViaApi(source, apiKey, baseUrl);
60
+ const localMeta = validateTestCase(source);
61
+ const result = {
62
+ requestId,
63
+ ...apiResult,
64
+ step_count: localMeta.step_count,
65
+ error_count: apiResult.issues.filter((i) => i.severity === 'ERROR').length,
66
+ warning_count: apiResult.issues.filter((i) => i.severity === 'WARNING').length,
67
+ test_case_id: localMeta.test_case_id,
68
+ test_case_name: localMeta.test_case_name,
69
+ validation_source: 'quality_hub',
70
+ };
71
+ log('info', 'provar_testcase_validate: quality_hub', { requestId });
72
+ return {
73
+ content: [{ type: 'text', text: JSON.stringify(result) }],
74
+ structuredContent: result,
75
+ };
76
+ }
77
+ catch (apiErr) {
78
+ // API failed — determine the warning and fall through to local validation
79
+ let warning;
80
+ if (apiErr instanceof QualityHubAuthError) {
81
+ warning = AUTH_WARNING;
82
+ log('warn', 'provar_testcase_validate: auth error, falling back', { requestId });
83
+ }
84
+ else if (apiErr instanceof QualityHubRateLimitError) {
85
+ warning = RATE_LIMIT_WARNING;
86
+ log('warn', 'provar_testcase_validate: rate limited, falling back', { requestId });
87
+ }
88
+ else {
89
+ warning = UNREACHABLE_WARNING;
90
+ log('warn', 'provar_testcase_validate: api unreachable, falling back', { requestId });
91
+ }
92
+ const localResult = {
93
+ requestId,
94
+ ...validateTestCase(source),
95
+ validation_source: 'local_fallback',
96
+ validation_warning: warning,
97
+ };
98
+ return {
99
+ content: [{ type: 'text', text: JSON.stringify(localResult) }],
100
+ structuredContent: localResult,
101
+ };
102
+ }
103
+ }
104
+ // No API key configured — run local validation with onboarding message
105
+ const result = {
106
+ requestId,
107
+ ...validateTestCase(source),
108
+ validation_source: 'local',
109
+ validation_warning: ONBOARDING_MESSAGE,
110
+ };
42
111
  return {
43
112
  content: [{ type: 'text', text: JSON.stringify(result) }],
44
113
  structuredContent: result,
@@ -47,20 +116,74 @@ export function registerTestCaseValidate(server, config) {
47
116
  catch (err) {
48
117
  const error = err;
49
118
  const errResult = makeError(error instanceof PathPolicyError ? error.code : 'VALIDATE_ERROR', error.message, requestId, false);
50
- log('error', 'provar.testcase.validate failed', { requestId, error: error.message });
119
+ log('error', 'provar_testcase_validate failed', { requestId, error: error.message });
51
120
  return { isError: true, content: [{ type: 'text', text: JSON.stringify(errResult) }] };
52
121
  }
53
122
  });
54
123
  }
55
124
  // ── Validator (ported from quality-hub-agents/lambda/src/validator/handler.py) ──
56
125
  const UUID_V4_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
126
+ /**
127
+ * Reads a test case file from disk, validates it, and returns the result.
128
+ * Used by Wave 2 (testCaseGenerate) and Wave 3 (testCaseStepEdit) to validate
129
+ * after mutations without spawning a separate MCP tool call.
130
+ * Throws on path-policy violation or missing file.
131
+ */
132
+ export function validateTestCaseXml(filePath, config) {
133
+ assertPathAllowed(filePath, config.allowedPaths);
134
+ const resolved = path.resolve(filePath);
135
+ if (!fs.existsSync(resolved)) {
136
+ throw Object.assign(new Error(`File not found: ${resolved}`), { code: 'TESTCASE_FILE_NOT_FOUND' });
137
+ }
138
+ return validateTestCase(fs.readFileSync(resolved, 'utf-8'));
139
+ }
140
+ /** TC_010/TC_011: validate testCase id and guid attributes. */
141
+ function checkTestCaseIdAndGuid(tcId, tcGuid, issues) {
142
+ if (!tcId) {
143
+ issues.push({
144
+ rule_id: 'TC_010',
145
+ severity: 'ERROR',
146
+ message: 'testCase missing required id attribute.',
147
+ applies_to: 'testCase',
148
+ suggestion: 'Add id="1" to testCase element (Provar requires the integer literal "1").',
149
+ });
150
+ }
151
+ else if (tcId !== '1') {
152
+ issues.push({
153
+ rule_id: 'TC_010',
154
+ severity: 'ERROR',
155
+ message: `testCase id="${tcId}" is invalid — Provar requires id="1" (integer literal).`,
156
+ applies_to: 'testCase',
157
+ suggestion: 'Set id="1" on the testCase element. The unique identifier is the guid attribute, not id.',
158
+ });
159
+ }
160
+ if (!tcGuid) {
161
+ issues.push({
162
+ rule_id: 'TC_011',
163
+ severity: 'ERROR',
164
+ message: 'testCase missing required guid attribute.',
165
+ applies_to: 'testCase',
166
+ suggestion: 'Add guid attribute (UUID v4) to testCase element.',
167
+ });
168
+ }
169
+ else if (!UUID_V4_RE.test(tcGuid)) {
170
+ issues.push({
171
+ rule_id: 'TC_012',
172
+ severity: 'ERROR',
173
+ message: `testCase guid "${tcGuid}" is not a valid UUID v4.`,
174
+ applies_to: 'testCase',
175
+ suggestion: 'Replace with a valid UUID v4 — e.g. crypto.randomUUID(). The 4th segment must begin with 8, 9, a, or b.',
176
+ });
177
+ }
178
+ }
57
179
  /** Pure function — exported for unit testing */
58
180
  export function validateTestCase(xmlContent, testName) {
59
181
  const issues = [];
60
182
  // TC_001: XML declaration
61
183
  if (!xmlContent.trimStart().startsWith('<?xml')) {
62
184
  issues.push({
63
- rule_id: 'TC_001', severity: 'ERROR',
185
+ rule_id: 'TC_001',
186
+ severity: 'ERROR',
64
187
  message: 'Missing XML declaration. File must start with <?xml version="1.0" encoding="UTF-8"?>.',
65
188
  applies_to: 'document',
66
189
  suggestion: 'Add XML declaration as the first line.',
@@ -79,7 +202,8 @@ export function validateTestCase(xmlContent, testName) {
79
202
  catch (e) {
80
203
  const parseError = e;
81
204
  issues.push({
82
- rule_id: 'TC_002', severity: 'ERROR',
205
+ rule_id: 'TC_002',
206
+ severity: 'ERROR',
83
207
  message: `XML parse error: ${parseError.message}`,
84
208
  applies_to: 'document',
85
209
  suggestion: 'Fix XML syntax errors.',
@@ -89,41 +213,22 @@ export function validateTestCase(xmlContent, testName) {
89
213
  // TC_003: Root element
90
214
  if (!('testCase' in parsed)) {
91
215
  issues.push({
92
- rule_id: 'TC_003', severity: 'ERROR',
216
+ rule_id: 'TC_003',
217
+ severity: 'ERROR',
93
218
  message: 'Root element must be <testCase>.',
94
219
  applies_to: 'document',
95
220
  suggestion: 'Ensure root element is <testCase>.',
96
221
  });
97
222
  return finalize(issues, null, null, 0, xmlContent, testName);
98
223
  }
99
- const tc = parsed['testCase'];
224
+ // fast-xml-parser yields '' for a self-closing element with no attributes (e.g. <testCase/>).
225
+ // Normalise to a plain object so subsequent `'key' in tc` checks don't throw.
226
+ const rawTc = parsed['testCase'];
227
+ const tc = rawTc !== null && typeof rawTc === 'object' ? rawTc : {};
100
228
  const tcId = tc['@_id'] ?? null;
101
229
  const tcName = tc['@_name'] ?? null;
102
230
  const tcGuid = tc['@_guid'];
103
- if (!tcId) {
104
- issues.push({
105
- rule_id: 'TC_010', severity: 'ERROR',
106
- message: 'testCase missing required id attribute.',
107
- applies_to: 'testCase',
108
- suggestion: 'Add id attribute to testCase element.',
109
- });
110
- }
111
- if (!tcGuid) {
112
- issues.push({
113
- rule_id: 'TC_011', severity: 'ERROR',
114
- message: 'testCase missing required guid attribute.',
115
- applies_to: 'testCase',
116
- suggestion: 'Add guid attribute (UUID v4) to testCase element.',
117
- });
118
- }
119
- else if (!UUID_V4_RE.test(tcGuid)) {
120
- issues.push({
121
- rule_id: 'TC_012', severity: 'ERROR',
122
- message: `testCase guid "${tcGuid}" is not a valid UUID v4.`,
123
- applies_to: 'testCase',
124
- suggestion: 'Generate a proper UUID v4 for the guid attribute.',
125
- });
126
- }
231
+ checkTestCaseIdAndGuid(tcId, tcGuid, issues);
127
232
  // TC_013 (registryId) is intentionally not checked here — registryId is a
128
233
  // Salesforce Quality Hub record ID assigned when a test case is registered in
129
234
  // the QH org. Local project files will never have this attribute, so checking
@@ -131,14 +236,27 @@ export function validateTestCase(xmlContent, testName) {
131
236
  // TC_020: <steps> element
132
237
  if (!('steps' in tc)) {
133
238
  issues.push({
134
- rule_id: 'TC_020', severity: 'ERROR',
239
+ rule_id: 'TC_020',
240
+ severity: 'ERROR',
135
241
  message: 'testCase missing <steps> element.',
136
242
  applies_to: 'testCase',
137
243
  suggestion: 'Wrap all step elements in a <steps> element.',
138
244
  });
139
245
  return finalize(issues, tcId, tcName, 0, xmlContent, testName);
140
246
  }
141
- const steps = tc['steps'];
247
+ // DATA-001: <dataTable> binding is silently ignored in standalone CLI execution
248
+ if ('dataTable' in tc && tc['dataTable'] != null) {
249
+ issues.push({
250
+ rule_id: 'DATA-001',
251
+ severity: 'WARNING',
252
+ message: 'testCase declares a <dataTable> but CLI standalone execution does not bind CSV column variables — steps using <value class="variable"> references will resolve to null.',
253
+ applies_to: 'testCase',
254
+ suggestion: 'Use SetValues (Test scope) steps to bind data for standalone CLI execution, or add this test case to a test plan.',
255
+ });
256
+ }
257
+ // Same self-closing guard for <steps/> → fast-xml-parser yields ''
258
+ const rawSteps = tc['steps'];
259
+ const steps = rawSteps !== null && typeof rawSteps === 'object' ? rawSteps : {};
142
260
  const rawApiCalls = steps['apiCall'];
143
261
  const apiCalls = rawApiCalls
144
262
  ? (Array.isArray(rawApiCalls) ? rawApiCalls : [rawApiCalls])
@@ -146,8 +264,53 @@ export function validateTestCase(xmlContent, testName) {
146
264
  for (const call of apiCalls) {
147
265
  validateApiCall(call, issues);
148
266
  }
267
+ // VAR-REF-001 / VAR-REF-002: detect {VarName} tokens inside valueClass="string" elements.
268
+ // Provar does not interpolate {…} tokens in plain string values at runtime — they must use
269
+ // class="variable" (pure reference) or class="compound" (embedded in surrounding text).
270
+ const stringValueRe = /<value[^>]+valueClass="string"[^>]*>([^<]+)<\/value>/g;
271
+ let stringMatch;
272
+ while ((stringMatch = stringValueRe.exec(xmlContent)) !== null) {
273
+ const rawContent = stringMatch[1];
274
+ if (!/\{[\w.]+\}/.test(rawContent))
275
+ continue;
276
+ const isPure = /^\{[\w.]+\}$/.test(rawContent.trim());
277
+ const varNames = [...rawContent.matchAll(/\{([\w.]+)\}/g)].map((m) => m[1]);
278
+ if (isPure) {
279
+ const varName = varNames[0];
280
+ issues.push({
281
+ rule_id: 'VAR-REF-001',
282
+ severity: 'WARNING',
283
+ message: `Argument value "{${varName}}" looks like a variable reference but is stored as a plain string — Provar will not resolve it at runtime.`,
284
+ applies_to: 'argument',
285
+ suggestion: `Replace with <value class="variable"><path element="${varName
286
+ .split('.')
287
+ .join('"/><path element="')}"/></value>. In provar_testcase_generate, use the {VarName} syntax in the attributes object — the generator converts it automatically.`,
288
+ });
289
+ }
290
+ else {
291
+ const preview = rawContent.length > 60 ? rawContent.slice(0, 57) + '…' : rawContent;
292
+ issues.push({
293
+ rule_id: 'VAR-REF-002',
294
+ severity: 'WARNING',
295
+ message: `Argument value "${preview}" contains {${varNames.join('}, {')}} embedded in a plain string — Provar does not interpolate {…} tokens in string values at runtime.`,
296
+ applies_to: 'argument',
297
+ suggestion: 'Use class="compound" with <parts> to split literal text and variable references at each {VarName} boundary. ' +
298
+ 'In provar_testcase_generate, pass the value with {VarName} placeholders in the attributes object — the generator emits compound XML automatically.',
299
+ });
300
+ }
301
+ }
149
302
  return finalize(issues, tcId, tcName, apiCalls.length, xmlContent, testName);
150
303
  }
304
+ /** Normalise fast-xml-parser's single-or-array representation of <argument> children. */
305
+ function getArgList(call) {
306
+ const rawArgs = call['arguments'];
307
+ if (!rawArgs)
308
+ return [];
309
+ const argRaw = rawArgs['argument'];
310
+ if (!argRaw)
311
+ return [];
312
+ return (Array.isArray(argRaw) ? argRaw : [argRaw]);
313
+ }
151
314
  function validateApiCall(call, issues) {
152
315
  const callGuid = call['@_guid'];
153
316
  const apiId = call['@_apiId'];
@@ -156,7 +319,8 @@ function validateApiCall(call, issues) {
156
319
  const label = apiId ? ` "${apiId}"` : '';
157
320
  if (!callGuid) {
158
321
  issues.push({
159
- rule_id: 'TC_030', severity: 'ERROR',
322
+ rule_id: 'TC_030',
323
+ severity: 'ERROR',
160
324
  message: `apiCall${label} missing guid attribute.`,
161
325
  applies_to: 'apiCall',
162
326
  suggestion: 'Add a UUID v4 guid to each apiCall.',
@@ -164,15 +328,17 @@ function validateApiCall(call, issues) {
164
328
  }
165
329
  else if (!UUID_V4_RE.test(callGuid)) {
166
330
  issues.push({
167
- rule_id: 'TC_031', severity: 'ERROR',
331
+ rule_id: 'TC_031',
332
+ severity: 'ERROR',
168
333
  message: `apiCall${label} guid "${callGuid}" is not a valid UUID v4.`,
169
334
  applies_to: 'apiCall',
170
- suggestion: 'Use proper UUID v4 format.',
335
+ suggestion: 'Replace with a valid UUID v4 — e.g. crypto.randomUUID(). The 4th segment must begin with 8, 9, a, or b.',
171
336
  });
172
337
  }
173
338
  if (!apiId) {
174
339
  issues.push({
175
- rule_id: 'TC_032', severity: 'ERROR',
340
+ rule_id: 'TC_032',
341
+ severity: 'ERROR',
176
342
  message: 'apiCall missing apiId attribute.',
177
343
  applies_to: 'apiCall',
178
344
  suggestion: 'Add apiId attribute (e.g., UiConnect, ApexSoqlQuery).',
@@ -180,7 +346,8 @@ function validateApiCall(call, issues) {
180
346
  }
181
347
  if (!name) {
182
348
  issues.push({
183
- rule_id: 'TC_033', severity: 'WARNING',
349
+ rule_id: 'TC_033',
350
+ severity: 'WARNING',
184
351
  message: `apiCall${label} missing name attribute.`,
185
352
  applies_to: 'apiCall',
186
353
  suggestion: 'Add a descriptive name attribute.',
@@ -188,7 +355,8 @@ function validateApiCall(call, issues) {
188
355
  }
189
356
  if (!testItemId) {
190
357
  issues.push({
191
- rule_id: 'TC_034', severity: 'ERROR',
358
+ rule_id: 'TC_034',
359
+ severity: 'ERROR',
192
360
  message: `apiCall${label} missing testItemId attribute.`,
193
361
  applies_to: 'apiCall',
194
362
  suggestion: 'Add sequential testItemId (1, 2, 3...).',
@@ -196,12 +364,102 @@ function validateApiCall(call, issues) {
196
364
  }
197
365
  else if (!/^\d+$/.test(testItemId)) {
198
366
  issues.push({
199
- rule_id: 'TC_035', severity: 'ERROR',
367
+ rule_id: 'TC_035',
368
+ severity: 'ERROR',
200
369
  message: `apiCall${label} testItemId "${testItemId}" must be a whole number.`,
201
370
  applies_to: 'apiCall',
202
371
  suggestion: 'Use sequential integers for testItemId.',
203
372
  });
204
373
  }
374
+ if (apiId)
375
+ validateApiCallArgs(call, apiId, name, issues);
376
+ }
377
+ function checkUiTarget(call, apiId, stepName, issues) {
378
+ const targetArg = getArgList(call).find((a) => a['@_id'] === 'target');
379
+ if (!targetArg)
380
+ return;
381
+ const valueNode = targetArg['value'];
382
+ if (valueNode == null)
383
+ return;
384
+ const valClass = valueNode['@_class'];
385
+ if (valClass !== 'uiTarget') {
386
+ const apiLabel = apiId.includes('UiWithRow') ? 'UiWithRow' : 'UiWithScreen';
387
+ issues.push({
388
+ rule_id: 'UI-TARGET-001',
389
+ severity: 'ERROR',
390
+ message: `${apiLabel} step "${stepName}" target argument uses class="${valClass ?? '(missing)'}" — must be class="uiTarget".`,
391
+ applies_to: 'apiCall',
392
+ suggestion: 'Emit the target as: <value class="uiTarget" uri="sf:ui:target?..."/> or uri="ui:pageobject:target?pageId=...". ' +
393
+ 'In provar_testcase_generate the "target" attribute is converted automatically.',
394
+ });
395
+ }
396
+ }
397
+ function validateApiCallArgs(call, apiId, name, issues) {
398
+ const stepName = name ?? '(unnamed)';
399
+ // UI-TARGET-001 (mirrors quality-hub-agents UI-SCREEN-TARGET-001):
400
+ // UiWithScreen / UiWithRow target argument must use class="uiTarget", not a plain string.
401
+ // A plain string causes: "Can not set IUiTargetValue field ... to java.lang.String"
402
+ if (apiId.includes('UiWithScreen') || apiId.includes('UiWithRow')) {
403
+ checkUiTarget(call, apiId, stepName, issues);
404
+ }
405
+ // UI-LOCATOR-001 (local rule, no direct backend equivalent):
406
+ // UiDoAction / UiAssert locator argument must use class="uiLocator".
407
+ if (apiId.includes('UiDoAction') || apiId.includes('UiAssert')) {
408
+ const locatorArg = getArgList(call).find((a) => a['@_id'] === 'locator');
409
+ if (locatorArg) {
410
+ const locatorNode = locatorArg['value'];
411
+ if (locatorNode != null) {
412
+ const valClass = locatorNode['@_class'];
413
+ if (valClass !== 'uiLocator') {
414
+ issues.push({
415
+ rule_id: 'UI-LOCATOR-001',
416
+ severity: 'ERROR',
417
+ message: `"${stepName}" locator argument uses class="${valClass ?? '(missing)'}" — must be class="uiLocator".`,
418
+ applies_to: 'apiCall',
419
+ suggestion: 'Emit the locator as: <value class="uiLocator" uri="sf:ui:locator:..."/>. ' +
420
+ 'In provar_testcase_generate the "locator" attribute is converted automatically.',
421
+ });
422
+ }
423
+ }
424
+ }
425
+ }
426
+ // SETVALUES-STRUCTURE-001 (mirrors quality-hub-agents SETVALUES-STRUCTURE-001):
427
+ // SetValues values argument must use class="valueList" with <namedValues> children.
428
+ // A plain string value causes an immediate ClassCastException at runtime.
429
+ if (apiId.includes('SetValues') && !apiId.includes('AssertValues')) {
430
+ const valuesArg = getArgList(call).find((a) => a['@_id'] === 'values');
431
+ if (valuesArg) {
432
+ const valuesNode = valuesArg['value'];
433
+ if (valuesNode != null) {
434
+ const valClass = valuesNode['@_class'];
435
+ if (valClass !== 'valueList') {
436
+ issues.push({
437
+ rule_id: 'SETVALUES-STRUCTURE-001',
438
+ severity: 'ERROR',
439
+ message: `SetValues step "${stepName}" values argument uses class="${valClass ?? '(missing)'}" — must use class="valueList" with <namedValues> children.`,
440
+ applies_to: 'apiCall',
441
+ suggestion: 'Wrap variable assignments in: <value class="valueList" mutable="Mutable"><namedValues>' +
442
+ '<namedValue name="varName"><value class="value" valueClass="string">value</value></namedValue>' +
443
+ '</namedValues></value>. In provar_testcase_generate pass each variable as a flat key/value pair ' +
444
+ 'in attributes — the generator builds the valueList structure automatically.',
445
+ });
446
+ }
447
+ }
448
+ }
449
+ }
450
+ // ASSERT-001: AssertValues using UI namedValues format instead of variable format
451
+ if (apiId.includes('AssertValues')) {
452
+ const hasValuesArg = getArgList(call).some((a) => a['@_id'] === 'values');
453
+ if (hasValuesArg) {
454
+ issues.push({
455
+ rule_id: 'ASSERT-001',
456
+ severity: 'WARNING',
457
+ message: `AssertValues step "${stepName}" uses namedValues format (argument id="values") — designed for UI element attribute assertions. For Apex/SOQL result or variable comparisons this silently passes as null=null.`,
458
+ applies_to: 'apiCall',
459
+ suggestion: 'Use separate expectedValue, actualValue, and comparisonType arguments for variable or Apex result comparisons.',
460
+ });
461
+ }
462
+ }
205
463
  }
206
464
  function finalize(issues, testCaseId, testCaseName, stepCount, xmlContent, testName) {
207
465
  const errorCount = issues.filter((i) => i.severity === 'ERROR').length;
@@ -222,6 +480,9 @@ function finalize(issues, testCaseId, testCaseName, stepCount, xmlContent, testN
222
480
  issues,
223
481
  best_practices_violations: bp.violations,
224
482
  best_practices_rules_evaluated: bp.rules_evaluated,
483
+ // validation_source is set by the caller (MCP tool handler or direct callers).
484
+ // Default to 'local' here so the pure validateTestCase() function is self-contained.
485
+ validation_source: 'local',
225
486
  };
226
487
  }
227
488
  //# sourceMappingURL=testCaseValidate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"testCaseValidate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseValidate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testCaseValidate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseValidate.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { ServerConfig } from '../server.js';
3
+ export declare function registerTestPlanCreate(server: McpServer, config: ServerConfig): void;
3
4
  export declare function registerTestPlanAddInstance(server: McpServer, config: ServerConfig): void;
4
5
  export declare function registerTestPlanCreateSuite(server: McpServer, config: ServerConfig): void;
5
6
  export declare function registerTestPlanRemoveInstance(server: McpServer, config: ServerConfig): void;