@provartesting/provardx-cli 1.5.0-dev.2 → 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.
- package/README.md +163 -12
- package/bin/mcp-start.js +74 -0
- package/lib/commands/provar/auth/clear.d.ts +7 -0
- package/lib/commands/provar/auth/clear.js +36 -0
- package/lib/commands/provar/auth/clear.js.map +1 -0
- package/lib/commands/provar/auth/login.d.ts +10 -0
- package/lib/commands/provar/auth/login.js +90 -0
- package/lib/commands/provar/auth/login.js.map +1 -0
- package/lib/commands/provar/auth/rotate.d.ts +7 -0
- package/lib/commands/provar/auth/rotate.js +42 -0
- package/lib/commands/provar/auth/rotate.js.map +1 -0
- package/lib/commands/provar/auth/status.d.ts +7 -0
- package/lib/commands/provar/auth/status.js +107 -0
- package/lib/commands/provar/auth/status.js.map +1 -0
- package/lib/commands/provar/mcp/start.d.ts +2 -0
- package/lib/commands/provar/mcp/start.js +14 -1
- package/lib/commands/provar/mcp/start.js.map +1 -1
- package/lib/mcp/docs/NITROX_CATALOG_SOURCE.json +6 -0
- package/lib/mcp/docs/NITROX_COMPONENT_CATALOG.md +2001 -0
- package/lib/mcp/docs/PROVAR_TEST_STEP_REFERENCE.md +1430 -0
- package/lib/mcp/docs/PROVAR_TOOL_GUIDE.md +175 -0
- package/lib/mcp/licensing/algasClient.js +14 -5
- package/lib/mcp/licensing/algasClient.js.map +1 -1
- package/lib/mcp/licensing/ideDetection.d.ts +0 -12
- package/lib/mcp/licensing/ideDetection.js +1 -73
- package/lib/mcp/licensing/ideDetection.js.map +1 -1
- package/lib/mcp/licensing/licenseCache.js +7 -1
- package/lib/mcp/licensing/licenseCache.js.map +1 -1
- package/lib/mcp/licensing/licenseValidator.d.ts +3 -3
- package/lib/mcp/licensing/licenseValidator.js +11 -4
- package/lib/mcp/licensing/licenseValidator.js.map +1 -1
- package/lib/mcp/prompts/guidePrompts.d.ts +4 -0
- package/lib/mcp/prompts/guidePrompts.js +324 -0
- package/lib/mcp/prompts/guidePrompts.js.map +1 -0
- package/lib/mcp/prompts/index.d.ts +2 -0
- package/lib/mcp/prompts/index.js +23 -0
- package/lib/mcp/prompts/index.js.map +1 -0
- package/lib/mcp/prompts/loopPrompts.d.ts +6 -0
- package/lib/mcp/prompts/loopPrompts.js +435 -0
- package/lib/mcp/prompts/loopPrompts.js.map +1 -0
- package/lib/mcp/prompts/migrationPrompts.d.ts +4 -0
- package/lib/mcp/prompts/migrationPrompts.js +207 -0
- package/lib/mcp/prompts/migrationPrompts.js.map +1 -0
- package/lib/mcp/rules/provar_best_practices_rules.json +256 -544
- package/lib/mcp/security/pathPolicy.d.ts +5 -0
- package/lib/mcp/security/pathPolicy.js +58 -3
- package/lib/mcp/security/pathPolicy.js.map +1 -1
- package/lib/mcp/server.d.ts +17 -0
- package/lib/mcp/server.js +151 -6
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tools/antTools.d.ts +15 -0
- package/lib/mcp/tools/antTools.js +347 -170
- package/lib/mcp/tools/antTools.js.map +1 -1
- package/lib/mcp/tools/automationTools.d.ts +18 -8
- package/lib/mcp/tools/automationTools.js +332 -176
- package/lib/mcp/tools/automationTools.js.map +1 -1
- package/lib/mcp/tools/bestPracticesEngine.js +161 -23
- package/lib/mcp/tools/bestPracticesEngine.js.map +1 -1
- package/lib/mcp/tools/connectionTools.d.ts +4 -0
- package/lib/mcp/tools/connectionTools.js +172 -0
- package/lib/mcp/tools/connectionTools.js.map +1 -0
- package/lib/mcp/tools/defectTools.d.ts +1 -1
- package/lib/mcp/tools/defectTools.js +56 -50
- package/lib/mcp/tools/defectTools.js.map +1 -1
- package/lib/mcp/tools/hierarchyValidate.d.ts +1 -1
- package/lib/mcp/tools/hierarchyValidate.js +127 -42
- package/lib/mcp/tools/hierarchyValidate.js.map +1 -1
- package/lib/mcp/tools/nitroXTools.d.ts +23 -0
- package/lib/mcp/tools/nitroXTools.js +823 -0
- package/lib/mcp/tools/nitroXTools.js.map +1 -0
- package/lib/mcp/tools/pageObjectGenerate.js +132 -57
- package/lib/mcp/tools/pageObjectGenerate.js.map +1 -1
- package/lib/mcp/tools/pageObjectValidate.js +136 -46
- package/lib/mcp/tools/pageObjectValidate.js.map +1 -1
- package/lib/mcp/tools/projectInspect.js +51 -30
- package/lib/mcp/tools/projectInspect.js.map +1 -1
- package/lib/mcp/tools/projectValidateFromPath.js +70 -49
- package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
- package/lib/mcp/tools/propertiesTools.d.ts +2 -0
- package/lib/mcp/tools/propertiesTools.js +332 -78
- package/lib/mcp/tools/propertiesTools.js.map +1 -1
- package/lib/mcp/tools/qualityHubApiTools.d.ts +3 -0
- package/lib/mcp/tools/qualityHubApiTools.js +138 -0
- package/lib/mcp/tools/qualityHubApiTools.js.map +1 -0
- package/lib/mcp/tools/qualityHubTools.js +219 -70
- package/lib/mcp/tools/qualityHubTools.js.map +1 -1
- package/lib/mcp/tools/rcaTools.d.ts +3 -2
- package/lib/mcp/tools/rcaTools.js +189 -56
- package/lib/mcp/tools/rcaTools.js.map +1 -1
- package/lib/mcp/tools/sfSpawn.d.ts +25 -3
- package/lib/mcp/tools/sfSpawn.js +154 -6
- package/lib/mcp/tools/sfSpawn.js.map +1 -1
- package/lib/mcp/tools/testCaseGenerate.js +226 -78
- package/lib/mcp/tools/testCaseGenerate.js.map +1 -1
- package/lib/mcp/tools/testCaseStepTools.d.ts +4 -0
- package/lib/mcp/tools/testCaseStepTools.js +226 -0
- package/lib/mcp/tools/testCaseStepTools.js.map +1 -0
- package/lib/mcp/tools/testCaseValidate.d.ts +11 -0
- package/lib/mcp/tools/testCaseValidate.js +300 -44
- package/lib/mcp/tools/testCaseValidate.js.map +1 -1
- package/lib/mcp/tools/testPlanTools.d.ts +1 -0
- package/lib/mcp/tools/testPlanTools.js +299 -59
- package/lib/mcp/tools/testPlanTools.js.map +1 -1
- package/lib/mcp/tools/testPlanValidate.js +56 -18
- package/lib/mcp/tools/testPlanValidate.js.map +1 -1
- package/lib/mcp/tools/testSuiteValidate.js +37 -11
- package/lib/mcp/tools/testSuiteValidate.js.map +1 -1
- package/lib/mcp/update/updateChecker.d.ts +14 -0
- package/lib/mcp/update/updateChecker.js +228 -0
- package/lib/mcp/update/updateChecker.js.map +1 -0
- package/lib/services/auth/credentials.d.ts +21 -0
- package/lib/services/auth/credentials.js +75 -0
- package/lib/services/auth/credentials.js.map +1 -0
- package/lib/services/auth/loginFlow.d.ts +68 -0
- package/lib/services/auth/loginFlow.js +216 -0
- package/lib/services/auth/loginFlow.js.map +1 -0
- package/lib/services/projectValidation.d.ts +5 -2
- package/lib/services/projectValidation.js +83 -31
- package/lib/services/projectValidation.js.map +1 -1
- package/lib/services/qualityHub/client.d.ts +161 -0
- package/lib/services/qualityHub/client.js +226 -0
- package/lib/services/qualityHub/client.js.map +1 -0
- package/messages/sf.provar.auth.clear.md +16 -0
- package/messages/sf.provar.auth.login.md +31 -0
- package/messages/sf.provar.auth.rotate.md +23 -0
- package/messages/sf.provar.auth.status.md +16 -0
- package/messages/sf.provar.mcp.start.md +83 -48
- package/oclif.manifest.json +325 -28
- 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.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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', '
|
|
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
|
|
41
|
-
|
|
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', '
|
|
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',
|
|
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',
|
|
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,7 +213,8 @@ 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',
|
|
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>.',
|
|
@@ -103,30 +228,7 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
103
228
|
const tcId = tc['@_id'] ?? null;
|
|
104
229
|
const tcName = tc['@_name'] ?? null;
|
|
105
230
|
const tcGuid = tc['@_guid'];
|
|
106
|
-
|
|
107
|
-
issues.push({
|
|
108
|
-
rule_id: 'TC_010', severity: 'ERROR',
|
|
109
|
-
message: 'testCase missing required id attribute.',
|
|
110
|
-
applies_to: 'testCase',
|
|
111
|
-
suggestion: 'Add id attribute to testCase element.',
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
if (!tcGuid) {
|
|
115
|
-
issues.push({
|
|
116
|
-
rule_id: 'TC_011', severity: 'ERROR',
|
|
117
|
-
message: 'testCase missing required guid attribute.',
|
|
118
|
-
applies_to: 'testCase',
|
|
119
|
-
suggestion: 'Add guid attribute (UUID v4) to testCase element.',
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
else if (!UUID_V4_RE.test(tcGuid)) {
|
|
123
|
-
issues.push({
|
|
124
|
-
rule_id: 'TC_012', severity: 'ERROR',
|
|
125
|
-
message: `testCase guid "${tcGuid}" is not a valid UUID v4.`,
|
|
126
|
-
applies_to: 'testCase',
|
|
127
|
-
suggestion: 'Generate a proper UUID v4 for the guid attribute.',
|
|
128
|
-
});
|
|
129
|
-
}
|
|
231
|
+
checkTestCaseIdAndGuid(tcId, tcGuid, issues);
|
|
130
232
|
// TC_013 (registryId) is intentionally not checked here — registryId is a
|
|
131
233
|
// Salesforce Quality Hub record ID assigned when a test case is registered in
|
|
132
234
|
// the QH org. Local project files will never have this attribute, so checking
|
|
@@ -134,13 +236,24 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
134
236
|
// TC_020: <steps> element
|
|
135
237
|
if (!('steps' in tc)) {
|
|
136
238
|
issues.push({
|
|
137
|
-
rule_id: 'TC_020',
|
|
239
|
+
rule_id: 'TC_020',
|
|
240
|
+
severity: 'ERROR',
|
|
138
241
|
message: 'testCase missing <steps> element.',
|
|
139
242
|
applies_to: 'testCase',
|
|
140
243
|
suggestion: 'Wrap all step elements in a <steps> element.',
|
|
141
244
|
});
|
|
142
245
|
return finalize(issues, tcId, tcName, 0, xmlContent, testName);
|
|
143
246
|
}
|
|
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
|
+
}
|
|
144
257
|
// Same self-closing guard for <steps/> → fast-xml-parser yields ''
|
|
145
258
|
const rawSteps = tc['steps'];
|
|
146
259
|
const steps = rawSteps !== null && typeof rawSteps === 'object' ? rawSteps : {};
|
|
@@ -151,8 +264,53 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
151
264
|
for (const call of apiCalls) {
|
|
152
265
|
validateApiCall(call, issues);
|
|
153
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
|
+
}
|
|
154
302
|
return finalize(issues, tcId, tcName, apiCalls.length, xmlContent, testName);
|
|
155
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
|
+
}
|
|
156
314
|
function validateApiCall(call, issues) {
|
|
157
315
|
const callGuid = call['@_guid'];
|
|
158
316
|
const apiId = call['@_apiId'];
|
|
@@ -161,7 +319,8 @@ function validateApiCall(call, issues) {
|
|
|
161
319
|
const label = apiId ? ` "${apiId}"` : '';
|
|
162
320
|
if (!callGuid) {
|
|
163
321
|
issues.push({
|
|
164
|
-
rule_id: 'TC_030',
|
|
322
|
+
rule_id: 'TC_030',
|
|
323
|
+
severity: 'ERROR',
|
|
165
324
|
message: `apiCall${label} missing guid attribute.`,
|
|
166
325
|
applies_to: 'apiCall',
|
|
167
326
|
suggestion: 'Add a UUID v4 guid to each apiCall.',
|
|
@@ -169,15 +328,17 @@ function validateApiCall(call, issues) {
|
|
|
169
328
|
}
|
|
170
329
|
else if (!UUID_V4_RE.test(callGuid)) {
|
|
171
330
|
issues.push({
|
|
172
|
-
rule_id: 'TC_031',
|
|
331
|
+
rule_id: 'TC_031',
|
|
332
|
+
severity: 'ERROR',
|
|
173
333
|
message: `apiCall${label} guid "${callGuid}" is not a valid UUID v4.`,
|
|
174
334
|
applies_to: 'apiCall',
|
|
175
|
-
suggestion: '
|
|
335
|
+
suggestion: 'Replace with a valid UUID v4 — e.g. crypto.randomUUID(). The 4th segment must begin with 8, 9, a, or b.',
|
|
176
336
|
});
|
|
177
337
|
}
|
|
178
338
|
if (!apiId) {
|
|
179
339
|
issues.push({
|
|
180
|
-
rule_id: 'TC_032',
|
|
340
|
+
rule_id: 'TC_032',
|
|
341
|
+
severity: 'ERROR',
|
|
181
342
|
message: 'apiCall missing apiId attribute.',
|
|
182
343
|
applies_to: 'apiCall',
|
|
183
344
|
suggestion: 'Add apiId attribute (e.g., UiConnect, ApexSoqlQuery).',
|
|
@@ -185,7 +346,8 @@ function validateApiCall(call, issues) {
|
|
|
185
346
|
}
|
|
186
347
|
if (!name) {
|
|
187
348
|
issues.push({
|
|
188
|
-
rule_id: 'TC_033',
|
|
349
|
+
rule_id: 'TC_033',
|
|
350
|
+
severity: 'WARNING',
|
|
189
351
|
message: `apiCall${label} missing name attribute.`,
|
|
190
352
|
applies_to: 'apiCall',
|
|
191
353
|
suggestion: 'Add a descriptive name attribute.',
|
|
@@ -193,7 +355,8 @@ function validateApiCall(call, issues) {
|
|
|
193
355
|
}
|
|
194
356
|
if (!testItemId) {
|
|
195
357
|
issues.push({
|
|
196
|
-
rule_id: 'TC_034',
|
|
358
|
+
rule_id: 'TC_034',
|
|
359
|
+
severity: 'ERROR',
|
|
197
360
|
message: `apiCall${label} missing testItemId attribute.`,
|
|
198
361
|
applies_to: 'apiCall',
|
|
199
362
|
suggestion: 'Add sequential testItemId (1, 2, 3...).',
|
|
@@ -201,12 +364,102 @@ function validateApiCall(call, issues) {
|
|
|
201
364
|
}
|
|
202
365
|
else if (!/^\d+$/.test(testItemId)) {
|
|
203
366
|
issues.push({
|
|
204
|
-
rule_id: 'TC_035',
|
|
367
|
+
rule_id: 'TC_035',
|
|
368
|
+
severity: 'ERROR',
|
|
205
369
|
message: `apiCall${label} testItemId "${testItemId}" must be a whole number.`,
|
|
206
370
|
applies_to: 'apiCall',
|
|
207
371
|
suggestion: 'Use sequential integers for testItemId.',
|
|
208
372
|
});
|
|
209
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
|
+
}
|
|
210
463
|
}
|
|
211
464
|
function finalize(issues, testCaseId, testCaseName, stepCount, xmlContent, testName) {
|
|
212
465
|
const errorCount = issues.filter((i) => i.severity === 'ERROR').length;
|
|
@@ -227,6 +480,9 @@ function finalize(issues, testCaseId, testCaseName, stepCount, xmlContent, testN
|
|
|
227
480
|
issues,
|
|
228
481
|
best_practices_violations: bp.violations,
|
|
229
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',
|
|
230
486
|
};
|
|
231
487
|
}
|
|
232
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;
|