@provartesting/provardx-cli 1.5.0-dev.2 → 1.5.1
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 +187 -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 +334 -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 +18 -0
- package/lib/mcp/server.js +232 -19
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tools/antTools.d.ts +15 -0
- package/lib/mcp/tools/antTools.js +369 -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 +333 -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 +242 -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 +61 -50
- package/lib/mcp/tools/defectTools.js.map +1 -1
- package/lib/mcp/tools/descHelper.d.ts +5 -0
- package/lib/mcp/tools/descHelper.js +14 -0
- package/lib/mcp/tools/descHelper.js.map +1 -0
- 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 +863 -0
- package/lib/mcp/tools/nitroXTools.js.map +1 -0
- package/lib/mcp/tools/pageObjectGenerate.js +150 -57
- package/lib/mcp/tools/pageObjectGenerate.js.map +1 -1
- package/lib/mcp/tools/pageObjectValidate.js +143 -46
- package/lib/mcp/tools/pageObjectValidate.js.map +1 -1
- package/lib/mcp/tools/projectInspect.js +79 -32
- package/lib/mcp/tools/projectInspect.js.map +1 -1
- package/lib/mcp/tools/projectValidateFromPath.js +185 -58
- package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
- package/lib/mcp/tools/propertiesTools.d.ts +2 -0
- package/lib/mcp/tools/propertiesTools.js +358 -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 +139 -0
- package/lib/mcp/tools/qualityHubApiTools.js.map +1 -0
- package/lib/mcp/tools/qualityHubTools.js +292 -72
- package/lib/mcp/tools/qualityHubTools.js.map +1 -1
- package/lib/mcp/tools/rcaTools.d.ts +3 -2
- package/lib/mcp/tools/rcaTools.js +194 -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 +285 -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 +244 -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 +381 -46
- package/lib/mcp/tools/testCaseValidate.js.map +1 -1
- package/lib/mcp/tools/testPlanTools.d.ts +1 -0
- package/lib/mcp/tools/testPlanTools.js +316 -59
- package/lib/mcp/tools/testPlanTools.js.map +1 -1
- package/lib/mcp/tools/testPlanValidate.js +114 -23
- package/lib/mcp/tools/testPlanValidate.js.map +1 -1
- package/lib/mcp/tools/testSuiteValidate.js +130 -15
- 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/mcp/utils/detailLevel.d.ts +9 -0
- package/lib/mcp/utils/detailLevel.js +20 -0
- package/lib/mcp/utils/detailLevel.js.map +1 -0
- package/lib/mcp/utils/fieldMask.d.ts +17 -0
- package/lib/mcp/utils/fieldMask.js +75 -0
- package/lib/mcp/utils/fieldMask.js.map +1 -0
- package/lib/mcp/utils/tokenMeta.d.ts +40 -0
- package/lib/mcp/utils/tokenMeta.js +90 -0
- package/lib/mcp/utils/tokenMeta.js.map +1 -0
- package/lib/mcp/utils/validationDiff.d.ts +57 -0
- package/lib/mcp/utils/validationDiff.js +191 -0
- package/lib/mcp/utils/validationDiff.js.map +1 -0
- package/lib/mcp/utils/validationScore.d.ts +15 -0
- package/lib/mcp/utils/validationScore.js +31 -0
- package/lib/mcp/utils/validationScore.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 +35 -12
|
@@ -13,6 +13,7 @@ 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
15
|
import { validateTestCase } from './testCaseValidate.js';
|
|
16
|
+
import { desc } from './descHelper.js';
|
|
16
17
|
// ── Shorthand → fully-qualified API ID map ────────────────────────────────────
|
|
17
18
|
// Provar runtime requires fully-qualified IDs. Shorthand forms are accepted here
|
|
18
19
|
// and expanded automatically before writing XML.
|
|
@@ -54,6 +55,14 @@ function buildStepWarnings(steps) {
|
|
|
54
55
|
'To assert SOQL results use either: (a) a ForEach loop over the result list with AssertValues inside, ' +
|
|
55
56
|
'or (b) a SetValues step to extract a specific field into a named variable, then assert that variable.');
|
|
56
57
|
}
|
|
58
|
+
// D7: Cleanup steps placed after a potential failure point are skipped when stopOnError=false.
|
|
59
|
+
if (resolvedIds.includes(SHORTHAND_TO_FQID['ApexDeleteObject'] ?? '')) {
|
|
60
|
+
warnings.push('ApexDeleteObject detected (likely cleanup): with stopOnError=false Provar skips all steps after ' +
|
|
61
|
+
'the first failure, so cleanup steps placed at the end of the test will NOT run when an earlier ' +
|
|
62
|
+
'step fails — leaving orphaned records in the org. ' +
|
|
63
|
+
'Wrap cleanup in a Provar TearDown callable, or place create/delete inside the same UiWithScreen ' +
|
|
64
|
+
'clause so both run as a unit regardless of failure.');
|
|
65
|
+
}
|
|
57
66
|
return warnings;
|
|
58
67
|
}
|
|
59
68
|
// ── Schema ────────────────────────────────────────────────────────────────────
|
|
@@ -69,58 +78,150 @@ const StepSchema = z.object({
|
|
|
69
78
|
attributes: z
|
|
70
79
|
.record(z.string())
|
|
71
80
|
.default({})
|
|
72
|
-
.describe('Step argument values as key/value pairs. Written as <arguments><argument id="key"><value .../></argument></arguments
|
|
73
|
-
'inside the <apiCall> element — the format Provar runtime requires. ' +
|
|
81
|
+
.describe('Step argument values as key/value pairs. Written as <arguments><argument id="key"><value .../></argument></arguments>. ' +
|
|
74
82
|
'Do NOT rely on XML attributes on <apiCall>; the runtime silently ignores them. ' +
|
|
75
|
-
'
|
|
83
|
+
'Special value conventions (applied automatically by the generator): ' +
|
|
84
|
+
'(1) Variable references: wrap the name in braces, e.g. "{MyVar}" → emitted as class="variable" <path element="MyVar"/>. ' +
|
|
85
|
+
' Dotted paths are also supported: "{Obj.Field}" → two <path> elements. ' +
|
|
86
|
+
'(2) SetValues: pass each variable name and its value as a flat key/value pair; ' +
|
|
87
|
+
' the generator wraps them in <value class="valueList"><namedValues>...</namedValues></value> automatically. ' +
|
|
88
|
+
' Example: { "testCaseName": "TC_New", "testType": "Acceptance testing" } ' +
|
|
89
|
+
'(3) AssertValues: pass assertion arguments as flat key/value pairs; emitted as flat <argument> elements, NOT wrapped in valueList/namedValues. ' +
|
|
90
|
+
'(4) target argument (UiWithScreen / UiWithRow): pass the sf:ui:target or ui:pageobject:target URI; ' +
|
|
91
|
+
' emitted as class="uiTarget" uri="...". ' +
|
|
92
|
+
'(5) locator argument (UiDoAction / UiAssert): pass the locator URI; emitted as class="uiLocator" uri="...". ' +
|
|
93
|
+
'All other string values use class="value" valueClass="string".'),
|
|
76
94
|
});
|
|
77
95
|
const TOOL_DESCRIPTION = [
|
|
96
|
+
// ── Construction contract (READ FIRST — PDX-482) ──────────────────────────────
|
|
97
|
+
// The PDX-479 regression happened when authoring guidance steered agents toward
|
|
98
|
+
// a per-step construction pattern via repeated step_edit calls. These three
|
|
99
|
+
// lines make the single-call contract authoritative at the call site so it
|
|
100
|
+
// outweighs any conflicting prompt/resource guidance and survives doc drift.
|
|
101
|
+
'Construction pattern: pass the FULL step tree in a single call via the steps[] array.',
|
|
102
|
+
'Do NOT call this tool with an empty steps[] and then append via provar_testcase_step_edit — that pattern drops scenarios, flattens nesting, and produces inconsistent step types.',
|
|
103
|
+
'provar_testcase_step_edit is for AMENDING an existing validated test case (single-step add, attribute fix, debug edit), not for CONSTRUCTING one from scratch. If you find yourself about to call this tool with steps=[] intending to add steps in subsequent tool calls, stop and assemble the full step list first.',
|
|
104
|
+
// ── Existing description (unchanged below) ───────────────────────────────────
|
|
78
105
|
'Generate a Provar XML test case skeleton with proper UUID v4 guids, sequential testItemId values, and <steps> structure.',
|
|
79
106
|
'Returns XML content. Writes to disk only when dry_run=false.',
|
|
107
|
+
'Generated structure: <?xml version="1.0" encoding="UTF-8" standalone="no"?> with <testCase guid="..." id="1" registryId="..."> (id is always the integer literal "1" as required by the Provar runtime), a <summary/> child, then <steps>.',
|
|
108
|
+
'URI-aware generation: use target_uri to control the XML nesting structure.',
|
|
109
|
+
' - sf:ui:target (or omit target_uri) → flat Salesforce XML structure (existing behaviour).',
|
|
110
|
+
' - ui:pageobject:target?pageId=pageobjects.PageClass → wraps all steps in a UiWithScreen element targeting that non-SF page object.',
|
|
80
111
|
'API IDs: shorthand forms (e.g. UiConnect, ApexSoqlQuery) are automatically expanded to fully-qualified IDs required by the Provar runtime.',
|
|
81
112
|
'Step arguments: attributes are emitted as <arguments><argument id="..."><value .../></argument></arguments> — the only format the Provar runtime processes.',
|
|
82
113
|
'Shorthand XML attributes on <apiCall> are silently ignored at runtime; always supply arguments via the attributes map.',
|
|
114
|
+
'ApexSoqlQuery argument IDs: soqlQuery (the SOQL SELECT statement), resultListName (binds result list to a variable), apexConnectionName (named connection), resultScope (optional).',
|
|
83
115
|
'Data-driven note: <dataTable> only iterates rows when the test case runs via a test plan instance (.testinstance).',
|
|
84
116
|
'Running directly via the provardx testCase property resolves all data table variables as null.',
|
|
85
|
-
'Use
|
|
117
|
+
'Use provar_testplan_add-instance to wire into a plan for data-driven execution.',
|
|
86
118
|
'ApexReadObject requires field names in attributes; omitting them produces MALFORMED_QUERY. Prefer ApexSoqlQuery.',
|
|
87
119
|
'AssertValues on SOQL results: index paths like "ResultList[0].Field" are not supported.',
|
|
88
120
|
'Use ForEach to iterate the result list, or SetValues to extract a field into a variable first.',
|
|
89
|
-
'
|
|
121
|
+
'SetValues: pass named variable values as flat key/value pairs in attributes; ' +
|
|
122
|
+
'the generator wraps them in <value class="valueList"><namedValues>...</namedValues></value> automatically.',
|
|
123
|
+
'AssertValues: pass assertion values as flat key/value argument pairs; emitted as flat arguments, NOT wrapped in namedValues. ' +
|
|
124
|
+
'If AssertValues uses namedValues-shaped content, validation reports warning ASSERT-001.',
|
|
125
|
+
'Variable references: pass values as "{VarName}" (braces); emitted as class="variable" <path element="VarName"/>.',
|
|
126
|
+
'target argument (UiWithScreen/UiWithRow): pass the URI value; emitted as class="uiTarget" uri="...".',
|
|
127
|
+
'locator argument (UiDoAction/UiAssert): pass the URI value; emitted as class="uiLocator" uri="...".',
|
|
128
|
+
'Edit page objects: action=Edit targets require a compiled page object for the SF object. ' +
|
|
129
|
+
'If none exists in the project page-objects directory, the locator binding will fail at runtime. ' +
|
|
130
|
+
'For objects without a compiled Edit page object, use inline edit instead: sfIleActivate to activate the field, ' +
|
|
131
|
+
'set the value, then SaveEdit binding on the Record view screen.',
|
|
132
|
+
'Provar IDE warning: opening a generated test case in Provar IDE injects empty <argument id="..."/> elements for known parameter IDs. ' +
|
|
133
|
+
'If the empty element appears after a populated one, the empty version wins at runtime. ' +
|
|
134
|
+
'Always check for and remove duplicate empty arguments after any IDE open/save cycle before re-running.',
|
|
135
|
+
'Cleanup warning: ApexDeleteObject steps near end of test will be skipped if an earlier step fails (stopOnError=false). Use a TearDown callable.',
|
|
136
|
+
'Validation: when validate_after_edit=true (default) the response includes a validation field and returns TESTCASE_INVALID if the generated XML fails structural checks.',
|
|
137
|
+
'Grounding: call provar_qualityhub_examples_retrieve before generating to get corpus examples for the scenario — correct XML structure for the step types you need.',
|
|
138
|
+
'If the response has count: 0 with a warning field (API unavailable or not configured), fall back: read the provar://docs/step-reference MCP resource for step types and attribute formats, then continue.',
|
|
90
139
|
].join(' ');
|
|
91
140
|
export function registerTestCaseGenerate(server, config) {
|
|
92
|
-
server.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
.string()
|
|
110
|
-
|
|
111
|
-
|
|
141
|
+
server.registerTool('provar_testcase_generate', {
|
|
142
|
+
// PDX-484: carry the construct-vs-amend contract into the `title:` field
|
|
143
|
+
// because many MCP clients (Claude Desktop tool-picker chips, Cursor audit
|
|
144
|
+
// pane, inline tool-call references in chat threads) render only the title.
|
|
145
|
+
// Without the "(full steps in one call)" suffix an agent that reads only
|
|
146
|
+
// the title surface gets zero PDX-479 protection. Length: 43 chars —
|
|
147
|
+
// well under the ~50 char comfort threshold for the clients we test.
|
|
148
|
+
title: 'Generate Test Case (full steps in one call)',
|
|
149
|
+
description: desc(TOOL_DESCRIPTION,
|
|
150
|
+
// PDX-482: the compact form must also carry the construction contract,
|
|
151
|
+
// otherwise PROVAR_MCP_SCHEMA_MODE=compact is a regression highway —
|
|
152
|
+
// the LLM would see a contract-free one-liner and could fall back to
|
|
153
|
+
// the multi-call pattern that caused PDX-479.
|
|
154
|
+
'Generate a Provar test case in ONE call with the FULL steps[] tree. ' +
|
|
155
|
+
'Do NOT call with steps=[] then append via provar_testcase_step_edit ' +
|
|
156
|
+
'(step_edit is for AMENDING existing test cases, not for CONSTRUCTING new ones).'),
|
|
157
|
+
inputSchema: {
|
|
158
|
+
test_case_name: z.string().describe(desc('Test case name (human-readable label)', 'string, test case name')),
|
|
159
|
+
steps: z
|
|
160
|
+
.array(StepSchema)
|
|
161
|
+
.default([])
|
|
162
|
+
.describe(desc('Ordered list of test steps. Pass the COMPLETE step tree for the test case in a single call — ' +
|
|
163
|
+
'do not call this tool with an empty array intending to append via provar_testcase_step_edit ' +
|
|
164
|
+
'(that pattern is for amendments only and produces structurally invalid test cases when used to construct).', 'array, optional; FULL ordered step tree in one call')),
|
|
165
|
+
target_uri: z
|
|
166
|
+
.string()
|
|
167
|
+
.optional()
|
|
168
|
+
.describe(desc('Page object URI that determines the XML nesting structure. ' +
|
|
169
|
+
'Omit or use "sf:ui:target" for Salesforce targets (flat structure). ' +
|
|
170
|
+
'Use "ui:pageobject:target?pageId=pageobjects.PageClass" for non-SF page objects — ' +
|
|
171
|
+
'steps are wrapped in a UiWithScreen element targeting that class.', 'string, optional; sf:ui:target (SF) or ui:pageobject:target?pageId=... (non-SF)')),
|
|
172
|
+
output_path: z
|
|
173
|
+
.string()
|
|
174
|
+
.optional()
|
|
175
|
+
.describe(desc('Suggested file path for the .xml file (returned in response)', 'string, optional; output .xml file path')),
|
|
176
|
+
overwrite: z
|
|
177
|
+
.boolean()
|
|
178
|
+
.default(false)
|
|
179
|
+
.describe(desc('Overwrite if output_path file already exists', 'bool, optional; overwrite if exists')),
|
|
180
|
+
dry_run: z
|
|
181
|
+
.boolean()
|
|
182
|
+
.default(true)
|
|
183
|
+
.describe(desc('true = return XML only (default); false = write to output_path', 'bool, optional; default true, skip write')),
|
|
184
|
+
validate_after_edit: z
|
|
185
|
+
.boolean()
|
|
186
|
+
.default(true)
|
|
187
|
+
.describe(desc('Run structural validation after generation (default: true). ' +
|
|
188
|
+
'Returns TESTCASE_INVALID error if the generated XML fails validation. ' +
|
|
189
|
+
'Set false to skip validation and omit the validation field from the response.', 'bool, optional; default true, validate after generation')),
|
|
190
|
+
idempotency_key: z
|
|
191
|
+
.string()
|
|
192
|
+
.optional()
|
|
193
|
+
.describe(desc('Caller-provided key echoed back for deduplication tracking', 'string, optional; deduplication key echoed in response')),
|
|
194
|
+
},
|
|
112
195
|
}, (input) => {
|
|
113
196
|
const requestId = makeRequestId();
|
|
114
|
-
log('info', '
|
|
197
|
+
log('info', 'provar_testcase_generate', {
|
|
115
198
|
requestId,
|
|
116
199
|
test_case_name: input.test_case_name,
|
|
117
200
|
dry_run: input.dry_run,
|
|
201
|
+
target_uri: input.target_uri,
|
|
118
202
|
});
|
|
203
|
+
// Runtime guard for the multi-call construction pattern: rejects the exact
|
|
204
|
+
// shape that produces a contract-violating skeleton on disk — empty steps[]
|
|
205
|
+
// + non-dry-run + persistence target. Other empty-steps shapes (dry-run
|
|
206
|
+
// preview, no output_path) remain allowed.
|
|
207
|
+
if (input.steps.length === 0 && !input.dry_run && input.output_path) {
|
|
208
|
+
const err = makeError('STEPS_REQUIRED', 'provar_testcase_generate was called with an empty steps[] array and a target output_path. ' +
|
|
209
|
+
'Constructing a test case requires the full step tree in a single call; ' +
|
|
210
|
+
'an empty payload on the write path would produce a skeleton-only file.', requestId, false, {
|
|
211
|
+
suggestion: 'Pass the FULL step tree to provar_testcase_generate in a single call. ' +
|
|
212
|
+
'provar_testcase_step_edit is for amending an already-validated test case ' +
|
|
213
|
+
'(single-step add, attribute fix, debug edit), not for constructing one from scratch. ' +
|
|
214
|
+
'If you genuinely want a skeleton for inspection, set dry_run=true.',
|
|
215
|
+
});
|
|
216
|
+
log('warn', 'provar_testcase_generate: STEPS_REQUIRED', {
|
|
217
|
+
requestId,
|
|
218
|
+
output_path: input.output_path,
|
|
219
|
+
});
|
|
220
|
+
return { isError: true, content: [{ type: 'text', text: JSON.stringify(err) }] };
|
|
221
|
+
}
|
|
119
222
|
try {
|
|
120
223
|
const xmlContent = buildTestCaseXml(input);
|
|
121
|
-
const filePath = input.output_path
|
|
122
|
-
? path.resolve(input.output_path)
|
|
123
|
-
: undefined;
|
|
224
|
+
const filePath = input.output_path ? path.resolve(input.output_path) : undefined;
|
|
124
225
|
let written = false;
|
|
125
226
|
if (filePath && !input.dry_run) {
|
|
126
227
|
assertPathAllowed(filePath, config.allowedPaths);
|
|
@@ -131,19 +232,11 @@ export function registerTestCaseGenerate(server, config) {
|
|
|
131
232
|
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
132
233
|
fs.writeFileSync(filePath, xmlContent, 'utf-8');
|
|
133
234
|
written = true;
|
|
134
|
-
log('info', '
|
|
235
|
+
log('info', 'provar_testcase_generate: wrote file', { requestId, filePath });
|
|
135
236
|
}
|
|
136
237
|
const warnings = buildStepWarnings(input.steps);
|
|
137
|
-
const
|
|
138
|
-
const
|
|
139
|
-
is_valid: validationFull.is_valid,
|
|
140
|
-
validity_score: validationFull.validity_score,
|
|
141
|
-
quality_score: validationFull.quality_score,
|
|
142
|
-
error_count: validationFull.error_count,
|
|
143
|
-
warning_count: validationFull.warning_count,
|
|
144
|
-
issues: validationFull.issues,
|
|
145
|
-
};
|
|
146
|
-
const result = {
|
|
238
|
+
const runValidation = input.validate_after_edit !== false;
|
|
239
|
+
const baseResult = {
|
|
147
240
|
requestId,
|
|
148
241
|
xml_content: xmlContent,
|
|
149
242
|
file_path: filePath,
|
|
@@ -151,71 +244,185 @@ export function registerTestCaseGenerate(server, config) {
|
|
|
151
244
|
dry_run: input.dry_run,
|
|
152
245
|
step_count: input.steps.length,
|
|
153
246
|
idempotency_key: input.idempotency_key,
|
|
154
|
-
validation: validationSlim,
|
|
155
247
|
...(warnings.length > 0 ? { warnings } : {}),
|
|
156
248
|
};
|
|
249
|
+
if (runValidation) {
|
|
250
|
+
const validationFull = validateTestCase(xmlContent, input.test_case_name);
|
|
251
|
+
const validationSlim = {
|
|
252
|
+
is_valid: validationFull.is_valid,
|
|
253
|
+
validity_score: validationFull.validity_score,
|
|
254
|
+
quality_score: validationFull.quality_score,
|
|
255
|
+
error_count: validationFull.error_count,
|
|
256
|
+
warning_count: validationFull.warning_count,
|
|
257
|
+
issues: validationFull.issues,
|
|
258
|
+
};
|
|
259
|
+
if (!validationFull.is_valid) {
|
|
260
|
+
const errResult = makeError('TESTCASE_INVALID', `Generated test case failed structural validation (${validationFull.error_count} error(s)). See details.validation.`, requestId, false, { validation: validationSlim });
|
|
261
|
+
log('warn', 'provar_testcase_generate: TESTCASE_INVALID', { requestId });
|
|
262
|
+
return { isError: true, content: [{ type: 'text', text: JSON.stringify(errResult) }] };
|
|
263
|
+
}
|
|
264
|
+
const result = { ...baseResult, validation: validationSlim };
|
|
265
|
+
return {
|
|
266
|
+
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
267
|
+
structuredContent: result,
|
|
268
|
+
};
|
|
269
|
+
}
|
|
157
270
|
return {
|
|
158
|
-
content: [{ type: 'text', text: JSON.stringify(
|
|
159
|
-
structuredContent:
|
|
271
|
+
content: [{ type: 'text', text: JSON.stringify(baseResult) }],
|
|
272
|
+
structuredContent: baseResult,
|
|
160
273
|
};
|
|
161
274
|
}
|
|
162
275
|
catch (err) {
|
|
163
276
|
const error = err;
|
|
164
|
-
const errResult = makeError(error instanceof PathPolicyError ? error.code :
|
|
165
|
-
log('error', '
|
|
277
|
+
const errResult = makeError(error instanceof PathPolicyError ? error.code : error.code ?? 'GENERATE_ERROR', error.message, requestId, false);
|
|
278
|
+
log('error', 'provar_testcase_generate failed', { requestId, error: error.message });
|
|
166
279
|
return { isError: true, content: [{ type: 'text', text: JSON.stringify(errResult) }] };
|
|
167
280
|
}
|
|
168
281
|
});
|
|
169
282
|
}
|
|
170
283
|
// ── XML builder ───────────────────────────────────────────────────────────────
|
|
171
|
-
|
|
284
|
+
// F1/F3: build class="compound" for strings that mix literal text with {VarName} tokens.
|
|
285
|
+
function buildCompoundValue(val, indent) {
|
|
286
|
+
const i = `${indent} `;
|
|
287
|
+
const parts = [];
|
|
288
|
+
const tokenRe = /\{([\w.]+)\}/g;
|
|
289
|
+
let last = 0;
|
|
290
|
+
let m;
|
|
291
|
+
while ((m = tokenRe.exec(val)) !== null) {
|
|
292
|
+
const before = val.slice(last, m.index);
|
|
293
|
+
if (before)
|
|
294
|
+
parts.push(`${i}<value valueClass="string">${escapeXmlContent(before)}</value>`);
|
|
295
|
+
const pathElements = m[1]
|
|
296
|
+
.split('.')
|
|
297
|
+
.map((p) => `${i} <path element="${escapeXmlAttr(p)}"/>`)
|
|
298
|
+
.join('\n');
|
|
299
|
+
parts.push(`${i}<variable>\n${pathElements}\n${i}</variable>`);
|
|
300
|
+
last = m.index + m[0].length;
|
|
301
|
+
}
|
|
302
|
+
const tail = val.slice(last);
|
|
303
|
+
if (tail)
|
|
304
|
+
parts.push(`${i}<value valueClass="string">${escapeXmlContent(tail)}</value>`);
|
|
305
|
+
return `${indent}<value class="compound">\n${i}<parts>\n${parts.join('\n')}\n${i}</parts>\n${indent}</value>`;
|
|
306
|
+
}
|
|
307
|
+
// Build the <value> element for a single argument (D2/D4/F1 aware).
|
|
308
|
+
// inNamedValues: when true (inside SetValues namedValues), skip uiTarget/uiLocator dispatch.
|
|
309
|
+
// apiId: resolved API ID used to restrict key-name dispatch to the correct UI APIs.
|
|
310
|
+
function buildArgumentValue(key, val, indent, inNamedValues = false, apiId = '') {
|
|
311
|
+
// D4: {VarName} or {Obj.Field} → class="variable" with <path> elements.
|
|
312
|
+
const varMatch = /^\{([\w.]+)\}$/.exec(val);
|
|
313
|
+
if (varMatch) {
|
|
314
|
+
const pathElements = varMatch[1]
|
|
315
|
+
.split('.')
|
|
316
|
+
.map((p) => `${indent} <path element="${escapeXmlAttr(p)}"/>`)
|
|
317
|
+
.join('\n');
|
|
318
|
+
return `${indent}<value class="variable">\n${pathElements}\n${indent}</value>`;
|
|
319
|
+
}
|
|
320
|
+
// F1/F3: {VarName} embedded in surrounding text → class="compound" with <parts>.
|
|
321
|
+
if (/\{[\w.]+\}/.test(val)) {
|
|
322
|
+
return buildCompoundValue(val, indent);
|
|
323
|
+
}
|
|
324
|
+
if (!inNamedValues) {
|
|
325
|
+
// D2: 'target' argument → class="uiTarget" (only for UiWithScreen / UiWithRow).
|
|
326
|
+
if (key === 'target' && (apiId.includes('UiWithScreen') || apiId.includes('UiWithRow'))) {
|
|
327
|
+
return `${indent}<value class="uiTarget" uri="${escapeXmlAttr(val)}"/>`;
|
|
328
|
+
}
|
|
329
|
+
// D2: 'locator' argument → class="uiLocator" (only for UiDoAction / UiAssert).
|
|
330
|
+
if (key === 'locator' && (apiId.includes('UiDoAction') || apiId.includes('UiAssert'))) {
|
|
331
|
+
return `${indent}<value class="uiLocator" uri="${escapeXmlAttr(val)}"/>`;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
return `${indent}<value class="value" valueClass="string">${escapeXmlContent(val)}</value>`;
|
|
335
|
+
}
|
|
336
|
+
function buildArgumentsXml(attributes, baseIndent = ' ', apiId = '') {
|
|
172
337
|
const entries = Object.entries(attributes);
|
|
173
338
|
if (entries.length === 0)
|
|
174
339
|
return '';
|
|
175
340
|
const argLines = entries
|
|
176
|
-
.map(([k, v]) =>
|
|
177
|
-
|
|
178
|
-
'
|
|
341
|
+
.map(([k, v]) => {
|
|
342
|
+
const valueXml = buildArgumentValue(k, v, `${baseIndent} `, false, apiId);
|
|
343
|
+
return `${baseIndent}<argument id="${escapeXmlAttr(k)}">\n` + valueXml + '\n' + `${baseIndent}</argument>`;
|
|
344
|
+
})
|
|
179
345
|
.join('\n');
|
|
180
|
-
return `\n
|
|
346
|
+
return `\n${baseIndent}<arguments>\n${argLines}\n${baseIndent}</arguments>\n${baseIndent.slice(0, -2)}`;
|
|
347
|
+
}
|
|
348
|
+
// D3: SetValues — all attributes become <namedValues> under a single 'values' argument.
|
|
349
|
+
function buildSetValuesXml(attributes, baseIndent) {
|
|
350
|
+
const entries = Object.entries(attributes);
|
|
351
|
+
if (entries.length === 0)
|
|
352
|
+
return '';
|
|
353
|
+
const i = (n) => baseIndent + ' '.repeat(n);
|
|
354
|
+
const namedValueLines = entries
|
|
355
|
+
.map(([name, val]) => {
|
|
356
|
+
const valueXml = buildArgumentValue(name, val, `${i(3)} `, true);
|
|
357
|
+
return `${i(3)}<namedValue name="${escapeXmlAttr(name)}">\n${valueXml}\n${i(3)}</namedValue>`;
|
|
358
|
+
})
|
|
359
|
+
.join('\n');
|
|
360
|
+
return (`\n${i(0)}<arguments>\n` +
|
|
361
|
+
`${i(0)}<argument id="values">\n` +
|
|
362
|
+
`${i(1)}<value class="valueList" mutable="Mutable">\n` +
|
|
363
|
+
`${i(2)}<namedValues>\n` +
|
|
364
|
+
namedValueLines +
|
|
365
|
+
'\n' +
|
|
366
|
+
`${i(2)}</namedValues>\n` +
|
|
367
|
+
`${i(1)}</value>\n` +
|
|
368
|
+
`${i(0)}</argument>\n` +
|
|
369
|
+
`${i(0)}</arguments>\n` +
|
|
370
|
+
`${baseIndent.slice(0, -2)}`);
|
|
371
|
+
}
|
|
372
|
+
function buildFlatStepXml(step, testItemId, indent) {
|
|
373
|
+
const guid = randomUUID();
|
|
374
|
+
const resolvedApiId = resolveApiId(step.api_id);
|
|
375
|
+
const baseIndent = indent + ' ';
|
|
376
|
+
// Use SetValues structure for any SetValues API (string-match mirrors the validator).
|
|
377
|
+
const argumentsXml = resolvedApiId.includes('SetValues')
|
|
378
|
+
? buildSetValuesXml(step.attributes, baseIndent)
|
|
379
|
+
: buildArgumentsXml(step.attributes, baseIndent, resolvedApiId);
|
|
380
|
+
if (argumentsXml) {
|
|
381
|
+
return (`${indent}<apiCall guid="${guid}" apiId="${escapeXmlAttr(resolvedApiId)}"` +
|
|
382
|
+
` name="${escapeXmlAttr(step.name)}" testItemId="${testItemId}">${argumentsXml}</apiCall>`);
|
|
383
|
+
}
|
|
384
|
+
return (`${indent}<apiCall guid="${guid}" apiId="${escapeXmlAttr(resolvedApiId)}"` +
|
|
385
|
+
` name="${escapeXmlAttr(step.name)}" testItemId="${testItemId}"/>`);
|
|
181
386
|
}
|
|
182
387
|
function buildTestCaseXml(input) {
|
|
183
|
-
const testCaseId = input.test_case_id ?? randomUUID();
|
|
184
388
|
const testCaseGuid = randomUUID();
|
|
185
389
|
const registryId = randomUUID();
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
.join('\n');
|
|
200
|
-
return ('<?xml version="1.0" encoding="UTF-8"?>\n' +
|
|
201
|
-
`<testCase id="${testCaseId}" guid="${testCaseGuid}" registryId="${registryId}"` +
|
|
202
|
-
` name="${escapeXmlAttr(input.test_case_name)}">\n` +
|
|
390
|
+
let stepLines;
|
|
391
|
+
const isNonSf = !!input.target_uri && input.target_uri.startsWith('ui:');
|
|
392
|
+
if (isNonSf && input.target_uri) {
|
|
393
|
+
stepLines = buildUiWithScreenXml(input.steps, input.target_uri);
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
const lines = input.steps.map((step, i) => buildFlatStepXml(step, i + 1, ' ')).join('\n');
|
|
397
|
+
stepLines = lines || ' <!-- TODO: Add test steps here -->';
|
|
398
|
+
}
|
|
399
|
+
// Provar requires: standalone="no", id="1" (integer literal), no name attr, <summary/> before <steps>.
|
|
400
|
+
return ('<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n' +
|
|
401
|
+
`<testCase guid="${testCaseGuid}" id="1" registryId="${registryId}">\n` +
|
|
402
|
+
' <summary/>\n' +
|
|
203
403
|
' <steps>\n' +
|
|
204
|
-
|
|
404
|
+
stepLines +
|
|
205
405
|
'\n </steps>\n' +
|
|
206
406
|
'</testCase>\n');
|
|
207
407
|
}
|
|
408
|
+
function buildUiWithScreenXml(steps, targetUri) {
|
|
409
|
+
const wrapperGuid = randomUUID();
|
|
410
|
+
const wrapperApiId = resolveApiId('UiWithScreen');
|
|
411
|
+
// Inner steps use testItemIds starting at 3; the substeps clause itself occupies testItemId=2
|
|
412
|
+
const innerLines = steps.map((step, i) => buildFlatStepXml(step, i + 3, ' ')).join('\n');
|
|
413
|
+
const stepsContent = innerLines ? `\n${innerLines}\n ` : '';
|
|
414
|
+
const clausesXml = '\n <clauses>\n' +
|
|
415
|
+
' <clause name="substeps" testItemId="2">\n' +
|
|
416
|
+
` <steps>${stepsContent}</steps>\n` +
|
|
417
|
+
' </clause>\n' +
|
|
418
|
+
' </clauses>\n ';
|
|
419
|
+
return (` <apiCall guid="${wrapperGuid}" apiId="${wrapperApiId}"` +
|
|
420
|
+
` name="With page" testItemId="1">${buildArgumentsXml({ target: targetUri }, ' ', wrapperApiId).trimEnd()}${clausesXml}</apiCall>`);
|
|
421
|
+
}
|
|
208
422
|
function escapeXmlAttr(value) {
|
|
209
|
-
return value
|
|
210
|
-
.replace(/&/g, '&')
|
|
211
|
-
.replace(/"/g, '"')
|
|
212
|
-
.replace(/</g, '<')
|
|
213
|
-
.replace(/>/g, '>');
|
|
423
|
+
return value.replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
|
|
214
424
|
}
|
|
215
425
|
function escapeXmlContent(value) {
|
|
216
|
-
return value
|
|
217
|
-
.replace(/&/g, '&')
|
|
218
|
-
.replace(/</g, '<')
|
|
219
|
-
.replace(/>/g, '>');
|
|
426
|
+
return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
220
427
|
}
|
|
221
428
|
//# sourceMappingURL=testCaseGenerate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testCaseGenerate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseGenerate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testCaseGenerate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseGenerate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import type { ServerConfig } from '../server.js';
|
|
3
|
+
export declare function registerTestCaseStepEdit(server: McpServer, config: ServerConfig): void;
|
|
4
|
+
export declare function registerAllTestCaseStepTools(server: McpServer, config: ServerConfig): void;
|