You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**DATA-001** — `testCase` declares a `<dataTable>` element. CLI standalone execution does not bind CSV column variables; steps using variable references will resolve to null. Use `SetValues` (Test scope) steps instead, or add the test to a test plan.
438
+
-**ASSERT-001** — An `AssertValues` step uses the `argument id="values"` (namedValues) format, which is designed for UI element attribute assertions. For Apex/SOQL result or variable comparisons this silently passes as `null=null`. Use separate `expectedValue`, `actualValue`, and `comparisonType` arguments instead.
439
+
436
440
---
437
441
438
442
### `provar.testsuite.validate`
@@ -938,7 +942,9 @@ Triggers a Provar Automation test run using the currently loaded properties file
The `stdout` field is filtered before returning: Java schema-validator lines (`com.networknt.schema.*`) and stale logger-lock `SEVERE` warnings are stripped. If any lines were suppressed, `output_lines_suppressed` contains the count and a note is appended to `stdout`. Use `provar.testrun.rca` to inspect the full raw JUnit output.
Salesforce DML error categories (`SALESFORCE_*`) represent test-data failures — they appear in `failures[].root_cause_category` but are **not** included in `infrastructure_issues`.
// DATA-001: <dataTable> binding is silently ignored in standalone CLI execution
274
+
if('dataTable'intc&&tc['dataTable']!=null){
275
+
issues.push({
276
+
rule_id: 'DATA-001',
277
+
severity: 'WARNING',
278
+
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.',
279
+
applies_to: 'testCase',
280
+
suggestion: 'Use SetValues (Test scope) steps to bind data for standalone CLI execution, or add this test case to a test plan.',
281
+
});
282
+
}
283
+
273
284
// Same self-closing guard for <steps/> → fast-xml-parser yields ''
274
285
constrawSteps=tc['steps'];
275
286
conststeps: Record<string,unknown>=
@@ -307,7 +318,7 @@ function validateApiCall(call: Record<string, unknown>, issues: ValidationIssue[
307
318
severity: 'ERROR',
308
319
message: `apiCall${label} guid "${callGuid}" is not a valid UUID v4.`,
309
320
applies_to: 'apiCall',
310
-
suggestion: 'Use proper UUID v4 format.',
321
+
suggestion: 'Replace with a valid UUID v4 — e.g. crypto.randomUUID(). The 4th segment must begin with 8, 9, a, or b.',
311
322
});
312
323
}
313
324
if(!apiId){
@@ -345,6 +356,29 @@ function validateApiCall(call: Record<string, unknown>, issues: ValidationIssue[
345
356
suggestion: 'Use sequential integers for testItemId.',
346
357
});
347
358
}
359
+
360
+
// ASSERT-001: AssertValues using UI namedValues format instead of variable format
message: `AssertValues step "${name??'(unnamed)'}" 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.`,
376
+
applies_to: 'apiCall',
377
+
suggestion: 'Use separate expectedValue, actualValue, and comparisonType arguments for variable or Apex result comparisons.',
0 commit comments