@sun-asterisk/sungen 3.2.28 → 3.2.30
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/dist/capabilities/discover.d.ts +29 -0
- package/dist/capabilities/discover.d.ts.map +1 -1
- package/dist/capabilities/discover.js +144 -10
- package/dist/capabilities/discover.js.map +1 -1
- package/dist/capabilities/registry.d.ts +18 -0
- package/dist/capabilities/registry.d.ts.map +1 -1
- package/dist/capabilities/registry.js +25 -0
- package/dist/capabilities/registry.js.map +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +9 -0
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/capability.js +1 -1
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/delivery.d.ts.map +1 -1
- package/dist/cli/commands/delivery.js +2 -1
- package/dist/cli/commands/delivery.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +6 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/inspect.js +1 -1
- package/dist/cli/commands/inspect.js.map +1 -1
- package/dist/cli/commands/results-merge.d.ts.map +1 -1
- package/dist/cli/commands/results-merge.js +9 -2
- package/dist/cli/commands/results-merge.js.map +1 -1
- package/dist/cli/commands/results-sanitize.d.ts +24 -0
- package/dist/cli/commands/results-sanitize.d.ts.map +1 -0
- package/dist/cli/commands/results-sanitize.js +126 -0
- package/dist/cli/commands/results-sanitize.js.map +1 -0
- package/dist/cli/commands/script-check.d.ts.map +1 -1
- package/dist/cli/commands/script-check.js +3 -1
- package/dist/cli/commands/script-check.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +3 -0
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/dashboard/templates/index.html +1 -1
- package/dist/exporters/api-testcase-formatter.d.ts +3 -6
- package/dist/exporters/api-testcase-formatter.d.ts.map +1 -1
- package/dist/exporters/api-testcase-formatter.js +7 -10
- package/dist/exporters/api-testcase-formatter.js.map +1 -1
- package/dist/exporters/feature-parser.d.ts +1 -1
- package/dist/exporters/feature-parser.js +1 -1
- package/dist/exporters/matrix/build.d.ts.map +1 -1
- package/dist/exporters/matrix/build.js +18 -3
- package/dist/exporters/matrix/build.js.map +1 -1
- package/dist/exporters/matrix/item-labels.d.ts +35 -0
- package/dist/exporters/matrix/item-labels.d.ts.map +1 -0
- package/dist/exporters/matrix/item-labels.js +90 -0
- package/dist/exporters/matrix/item-labels.js.map +1 -0
- package/dist/exporters/matrix/render-coverage-sheet.d.ts +14 -0
- package/dist/exporters/matrix/render-coverage-sheet.d.ts.map +1 -0
- package/dist/exporters/matrix/render-coverage-sheet.js +162 -0
- package/dist/exporters/matrix/render-coverage-sheet.js.map +1 -0
- package/dist/exporters/matrix/render-csv.d.ts.map +1 -1
- package/dist/exporters/matrix/render-csv.js +3 -1
- package/dist/exporters/matrix/render-csv.js.map +1 -1
- package/dist/exporters/matrix/render-overview-sheet.d.ts +20 -0
- package/dist/exporters/matrix/render-overview-sheet.d.ts.map +1 -0
- package/dist/exporters/matrix/render-overview-sheet.js +32 -0
- package/dist/exporters/matrix/render-overview-sheet.js.map +1 -0
- package/dist/exporters/matrix/render-testcase-sheet.d.ts +30 -0
- package/dist/exporters/matrix/render-testcase-sheet.d.ts.map +1 -0
- package/dist/exporters/matrix/render-testcase-sheet.js +156 -0
- package/dist/exporters/matrix/render-testcase-sheet.js.map +1 -0
- package/dist/exporters/matrix/render-xlsx.d.ts +41 -31
- package/dist/exporters/matrix/render-xlsx.d.ts.map +1 -1
- package/dist/exporters/matrix/render-xlsx.js +72 -425
- package/dist/exporters/matrix/render-xlsx.js.map +1 -1
- package/dist/exporters/matrix/result-totals.d.ts +23 -0
- package/dist/exporters/matrix/result-totals.d.ts.map +1 -0
- package/dist/exporters/matrix/result-totals.js +21 -0
- package/dist/exporters/matrix/result-totals.js.map +1 -0
- package/dist/exporters/matrix/testcase-summary-band.d.ts +30 -0
- package/dist/exporters/matrix/testcase-summary-band.d.ts.map +1 -0
- package/dist/exporters/matrix/testcase-summary-band.js +71 -0
- package/dist/exporters/matrix/testcase-summary-band.js.map +1 -0
- package/dist/exporters/matrix/wording.d.ts.map +1 -1
- package/dist/exporters/matrix/wording.js +13 -0
- package/dist/exporters/matrix/wording.js.map +1 -1
- package/dist/exporters/matrix/xlsx-cells.d.ts +38 -0
- package/dist/exporters/matrix/xlsx-cells.d.ts.map +1 -0
- package/dist/exporters/matrix/xlsx-cells.js +52 -0
- package/dist/exporters/matrix/xlsx-cells.js.map +1 -0
- package/dist/exporters/qa-env-secret-denylist.js +2 -2
- package/dist/exporters/qa-env-secret-denylist.js.map +1 -1
- package/dist/exporters/report-path-sanitizer.d.ts +38 -0
- package/dist/exporters/report-path-sanitizer.d.ts.map +1 -0
- package/dist/exporters/report-path-sanitizer.js +137 -0
- package/dist/exporters/report-path-sanitizer.js.map +1 -0
- package/dist/exporters/result-variants.d.ts.map +1 -1
- package/dist/exporters/result-variants.js +2 -1
- package/dist/exporters/result-variants.js.map +1 -1
- package/dist/exporters/sensitive-key.d.ts +31 -0
- package/dist/exporters/sensitive-key.d.ts.map +1 -0
- package/dist/exporters/sensitive-key.js +50 -0
- package/dist/exporters/sensitive-key.js.map +1 -0
- package/dist/exporters/test-data-resolver.d.ts +4 -1
- package/dist/exporters/test-data-resolver.d.ts.map +1 -1
- package/dist/exporters/test-data-resolver.js +12 -2
- package/dist/exporters/test-data-resolver.js.map +1 -1
- package/dist/exporters/xlsx-report-builder.d.ts +12 -1
- package/dist/exporters/xlsx-report-builder.d.ts.map +1 -1
- package/dist/exporters/xlsx-report-builder.js +10 -2
- package/dist/exporters/xlsx-report-builder.js.map +1 -1
- package/dist/generators/gherkin-parser/index.d.ts +10 -0
- package/dist/generators/gherkin-parser/index.d.ts.map +1 -1
- package/dist/generators/gherkin-parser/index.js +20 -12
- package/dist/generators/gherkin-parser/index.js.map +1 -1
- package/dist/generators/gherkin-parser/parent-scope-clause.d.ts +54 -0
- package/dist/generators/gherkin-parser/parent-scope-clause.d.ts.map +1 -0
- package/dist/generators/gherkin-parser/parent-scope-clause.js +109 -0
- package/dist/generators/gherkin-parser/parent-scope-clause.js.map +1 -0
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts +23 -18
- package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/appium/appium-adapter.d.ts +4 -19
- package/dist/generators/test-generator/adapters/appium/appium-adapter.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/appium/appium-adapter.js.map +1 -1
- package/dist/generators/test-generator/adapters/appium/os-support.d.ts +53 -0
- package/dist/generators/test-generator/adapters/appium/os-support.d.ts.map +1 -0
- package/dist/generators/test-generator/adapters/appium/os-support.js +200 -0
- package/dist/generators/test-generator/adapters/appium/os-support.js.map +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/after-all.hbs +18 -0
- package/dist/generators/test-generator/adapters/appium/templates/after-each.hbs +18 -0
- package/dist/generators/test-generator/adapters/appium/templates/before-all.hbs +18 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/alert-fill-action.hbs +9 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/capture-variable.hbs +24 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-at-position-action.hbs +1 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/click-element-with-text.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/double-click-action.hbs +7 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/frame-enter-action.hbs +3 -6
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/hover-action.hbs +6 -2
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/hover-element-with-text.hbs +4 -3
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/table-paginate-action.hbs +3 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/actions/unknown-element-action.hbs +9 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/have-value-assertion.hbs +34 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +14 -6
- package/dist/generators/test-generator/adapters/appium/templates/steps/assertions/visible-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/go-back-action.hbs +21 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/long-press-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/pinch-zoom-action.hbs +4 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/gestures/set-geolocation-action.hbs +16 -0
- package/dist/generators/test-generator/adapters/appium/templates/steps/partials/locator.hbs +9 -1
- package/dist/generators/test-generator/adapters/appium/templates/test-file.hbs +62 -23
- package/dist/generators/test-generator/adapters/index.d.ts +1 -1
- package/dist/generators/test-generator/adapters/index.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts +4 -19
- package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/playwright-adapter.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/after-all.hbs +19 -1
- package/dist/generators/test-generator/adapters/playwright/templates/after-each.hbs +18 -0
- package/dist/generators/test-generator/adapters/playwright/templates/before-all.hbs +19 -1
- package/dist/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/check-action.hbs +6 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/click-at-position-action.hbs +23 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/expand-action.hbs +8 -8
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/fill-editor-action.hbs +7 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row-nth.hbs +7 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +7 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-paginate-action.hbs +5 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/uncheck-action.hbs +3 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/unknown-element-action.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-page.hbs +18 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-assertion.hbs +32 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-element.hbs +5 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +5 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +13 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +2 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +2 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/selected-assertion.hbs +21 -3
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/state-with-filter-assertion.hbs +20 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-match-data.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +4 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +12 -4
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +14 -2
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +3 -3
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/checked-opts.hbs +8 -0
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +8 -8
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-nth.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/id.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/testid.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +8 -8
- package/dist/generators/test-generator/adapters/playwright/templates/test-file.hbs +10 -8
- package/dist/generators/test-generator/code-generator.d.ts +37 -0
- package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
- package/dist/generators/test-generator/code-generator.js +165 -40
- package/dist/generators/test-generator/code-generator.js.map +1 -1
- package/dist/generators/test-generator/diagnostics.d.ts +116 -6
- package/dist/generators/test-generator/diagnostics.d.ts.map +1 -1
- package/dist/generators/test-generator/diagnostics.js +115 -5
- package/dist/generators/test-generator/diagnostics.js.map +1 -1
- package/dist/generators/test-generator/patterns/index.d.ts +57 -11
- package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/index.js +163 -21
- package/dist/generators/test-generator/patterns/index.js.map +1 -1
- package/dist/generators/test-generator/patterns/types.d.ts +8 -0
- package/dist/generators/test-generator/patterns/types.d.ts.map +1 -1
- package/dist/generators/test-generator/patterns/with-parent-scope.d.ts +18 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.d.ts.map +1 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.js +40 -0
- package/dist/generators/test-generator/patterns/with-parent-scope.js.map +1 -0
- package/dist/generators/test-generator/step-mapper.d.ts +103 -10
- package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
- package/dist/generators/test-generator/step-mapper.js +266 -45
- package/dist/generators/test-generator/step-mapper.js.map +1 -1
- package/dist/generators/test-generator/template-engine.d.ts +4 -19
- package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
- package/dist/generators/test-generator/template-engine.js +17 -12
- package/dist/generators/test-generator/template-engine.js.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.d.ts +7 -0
- package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.js +19 -2
- package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/dialog-scope-identity.d.ts +41 -0
- package/dist/generators/test-generator/utils/dialog-scope-identity.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/dialog-scope-identity.js +61 -0
- package/dist/generators/test-generator/utils/dialog-scope-identity.js.map +1 -0
- package/dist/generators/test-generator/utils/escape-js-string.d.ts +17 -0
- package/dist/generators/test-generator/utils/escape-js-string.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/escape-js-string.js +29 -0
- package/dist/generators/test-generator/utils/escape-js-string.js.map +1 -0
- package/dist/generators/test-generator/utils/nearest-match.d.ts +24 -0
- package/dist/generators/test-generator/utils/nearest-match.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/nearest-match.js +56 -0
- package/dist/generators/test-generator/utils/nearest-match.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.d.ts +58 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.js +119 -0
- package/dist/generators/test-generator/utils/selector-entry-fields.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.d.ts +25 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.js +54 -0
- package/dist/generators/test-generator/utils/selector-entry-walk.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.d.ts +59 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.js +91 -0
- package/dist/generators/test-generator/utils/selector-nth-validation.js.map +1 -0
- package/dist/generators/test-generator/utils/selector-resolver.d.ts +53 -2
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +273 -27
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-type-validation.d.ts +51 -0
- package/dist/generators/test-generator/utils/selector-type-validation.d.ts.map +1 -0
- package/dist/generators/test-generator/utils/selector-type-validation.js +77 -0
- package/dist/generators/test-generator/utils/selector-type-validation.js.map +1 -0
- package/dist/harness/audit.d.ts +3 -1
- package/dist/harness/audit.d.ts.map +1 -1
- package/dist/harness/audit.js +51 -28
- package/dist/harness/audit.js.map +1 -1
- package/dist/harness/capability-plan.d.ts +4 -0
- package/dist/harness/capability-plan.d.ts.map +1 -1
- package/dist/harness/capability-plan.js +32 -2
- package/dist/harness/capability-plan.js.map +1 -1
- package/dist/harness/catalog/drivers.yaml +1 -1
- package/dist/harness/catalog/universal-viewpoints.yaml +145 -0
- package/dist/harness/data-driven-lint.d.ts.map +1 -1
- package/dist/harness/data-driven-lint.js +217 -33
- package/dist/harness/data-driven-lint.js.map +1 -1
- package/dist/harness/parse.d.ts +6 -0
- package/dist/harness/parse.d.ts.map +1 -1
- package/dist/harness/parse.js +1 -1
- package/dist/harness/parse.js.map +1 -1
- package/dist/harness/repair.d.ts.map +1 -1
- package/dist/harness/repair.js +8 -1
- package/dist/harness/repair.js.map +1 -1
- package/dist/harness/script-check.d.ts +2 -2
- package/dist/harness/script-check.d.ts.map +1 -1
- package/dist/harness/script-check.js +186 -25
- package/dist/harness/script-check.js.map +1 -1
- package/dist/harness/sensors.d.ts +48 -0
- package/dist/harness/sensors.d.ts.map +1 -1
- package/dist/harness/sensors.js +26 -1
- package/dist/harness/sensors.js.map +1 -1
- package/dist/harness/viewpoint-ledger.d.ts +10 -0
- package/dist/harness/viewpoint-ledger.d.ts.map +1 -1
- package/dist/harness/viewpoint-ledger.js +23 -2
- package/dist/harness/viewpoint-ledger.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/project-initializer.d.ts +6 -0
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +16 -0
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/report-sanitize-reporter-install.d.ts +24 -0
- package/dist/orchestrator/report-sanitize-reporter-install.d.ts.map +1 -0
- package/dist/orchestrator/report-sanitize-reporter-install.js +161 -0
- package/dist/orchestrator/report-sanitize-reporter-install.js.map +1 -0
- package/dist/orchestrator/templates/ai-src/commands/delivery.md +4 -3
- package/dist/orchestrator/templates/ai-src/commands/run-test.md +9 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-api-coverage-model/SKILL.md +10 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +14 -5
- package/dist/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +62 -3
- package/dist/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +126 -11
- package/dist/orchestrator/templates/ai-src/skills/sungen-mobile-gestures/SKILL.md +16 -1
- package/dist/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md +12 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +19 -5
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +88 -2
- package/dist/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +62 -5
- package/dist/orchestrator/templates/ai-src/skills/sungen-test-design-techniques/SKILL.md +13 -0
- package/dist/orchestrator/templates/ai-src/skills/sungen-viewpoint/SKILL.md +59 -10
- package/dist/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-f-mobile-native.md +419 -0
- package/dist/orchestrator/templates/playwright.config.ts +7 -0
- package/dist/orchestrator/templates/readme.md +1 -1
- package/dist/orchestrator/templates/specs-checked-state.d.ts +83 -0
- package/dist/orchestrator/templates/specs-checked-state.d.ts.map +1 -0
- package/dist/orchestrator/templates/specs-checked-state.js +261 -0
- package/dist/orchestrator/templates/specs-checked-state.js.map +1 -0
- package/dist/orchestrator/templates/specs-checked-state.ts +324 -0
- package/dist/orchestrator/templates/specs-pw-shape-reporter.ts +0 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.d.ts +36 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.d.ts.map +1 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.js +155 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.js.map +1 -0
- package/dist/orchestrator/templates/specs-report-path-sanitize-reporter.ts +142 -0
- package/dist/orchestrator/templates/specs-url-assert.d.ts +50 -25
- package/dist/orchestrator/templates/specs-url-assert.d.ts.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.js +65 -24
- package/dist/orchestrator/templates/specs-url-assert.js.map +1 -1
- package/dist/orchestrator/templates/specs-url-assert.ts +101 -28
- package/dist/orchestrator/templates/wdio.conf.ts +105 -1
- package/dist/utils/selector-types.d.ts +43 -1
- package/dist/utils/selector-types.d.ts.map +1 -1
- package/dist/utils/selector-types.js +51 -7
- package/dist/utils/selector-types.js.map +1 -1
- package/package.json +3 -3
- package/src/capabilities/discover.ts +146 -10
- package/src/capabilities/registry.ts +30 -0
- package/src/cli/commands/audit.ts +9 -0
- package/src/cli/commands/capability.ts +1 -1
- package/src/cli/commands/delivery.ts +2 -1
- package/src/cli/commands/generate.ts +5 -2
- package/src/cli/commands/inspect.ts +1 -1
- package/src/cli/commands/results-merge.ts +9 -2
- package/src/cli/commands/results-sanitize.ts +98 -0
- package/src/cli/commands/script-check.ts +3 -1
- package/src/cli/commands/update.ts +3 -0
- package/src/dashboard/templates/index.html +1 -1
- package/src/exporters/api-testcase-formatter.ts +5 -7
- package/src/exporters/feature-parser.ts +1 -1
- package/src/exporters/matrix/build.ts +17 -3
- package/src/exporters/matrix/item-labels.ts +78 -0
- package/src/exporters/matrix/render-coverage-sheet.ts +170 -0
- package/src/exporters/matrix/render-csv.ts +3 -1
- package/src/exporters/matrix/render-overview-sheet.ts +51 -0
- package/src/exporters/matrix/render-testcase-sheet.ts +178 -0
- package/src/exporters/matrix/render-xlsx.ts +67 -448
- package/src/exporters/matrix/result-totals.ts +37 -0
- package/src/exporters/matrix/testcase-summary-band.ts +74 -0
- package/src/exporters/matrix/wording.ts +13 -0
- package/src/exporters/matrix/xlsx-cells.ts +56 -0
- package/src/exporters/qa-env-secret-denylist.ts +1 -1
- package/src/exporters/report-path-sanitizer.ts +144 -0
- package/src/exporters/result-variants.ts +2 -1
- package/src/exporters/sensitive-key.ts +48 -0
- package/src/exporters/test-data-resolver.ts +12 -2
- package/src/exporters/xlsx-report-builder.ts +16 -2
- package/src/generators/gherkin-parser/index.ts +22 -11
- package/src/generators/gherkin-parser/parent-scope-clause.ts +130 -0
- package/src/generators/test-generator/adapters/adapter-interface.ts +25 -3
- package/src/generators/test-generator/adapters/appium/appium-adapter.ts +4 -4
- package/src/generators/test-generator/adapters/appium/os-support.ts +176 -0
- package/src/generators/test-generator/adapters/appium/templates/after-all.hbs +18 -0
- package/src/generators/test-generator/adapters/appium/templates/after-each.hbs +18 -0
- package/src/generators/test-generator/adapters/appium/templates/before-all.hbs +18 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/alert-fill-action.hbs +9 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/capture-variable.hbs +24 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-at-position-action.hbs +1 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/click-element-with-text.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/double-click-action.hbs +7 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/frame-enter-action.hbs +3 -6
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/hover-action.hbs +6 -2
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/hover-element-with-text.hbs +4 -3
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/table-paginate-action.hbs +3 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/actions/unknown-element-action.hbs +9 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/have-value-assertion.hbs +34 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/label-value-assertion.hbs +14 -6
- package/src/generators/test-generator/adapters/appium/templates/steps/assertions/visible-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/go-back-action.hbs +21 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/long-press-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/pinch-zoom-action.hbs +4 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/gestures/set-geolocation-action.hbs +16 -0
- package/src/generators/test-generator/adapters/appium/templates/steps/partials/locator.hbs +9 -1
- package/src/generators/test-generator/adapters/appium/templates/test-file.hbs +62 -23
- package/src/generators/test-generator/adapters/index.ts +1 -1
- package/src/generators/test-generator/adapters/playwright/playwright-adapter.ts +4 -4
- package/src/generators/test-generator/adapters/playwright/templates/after-all.hbs +19 -1
- package/src/generators/test-generator/adapters/playwright/templates/after-each.hbs +18 -0
- package/src/generators/test-generator/adapters/playwright/templates/before-all.hbs +19 -1
- package/src/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/check-action.hbs +6 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/click-at-position-action.hbs +23 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/expand-action.hbs +8 -8
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/fill-editor-action.hbs +7 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row-nth.hbs +7 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +7 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-paginate-action.hbs +5 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/uncheck-action.hbs +3 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/unknown-element-action.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/actions/wait-for-page.hbs +18 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-assertion.hbs +32 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/all-contain-element.hbs +5 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/checked-assertion.hbs +5 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/column-cell-assertion.hbs +13 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/contain-text-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-role-variable-assertion.hbs +2 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/disabled-with-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/have-text-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-role-variable-assertion.hbs +2 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/hidden-with-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/not-checked-assertion.hbs +2 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/selected-assertion.hbs +21 -3
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/state-with-filter-assertion.hbs +20 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-match-data.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +4 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +12 -4
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +14 -2
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-role-variable-assertion.hbs +3 -3
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-variable-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/checked-opts.hbs +8 -0
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +8 -8
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-nth.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/id.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-strategies/testid.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +8 -8
- package/src/generators/test-generator/adapters/playwright/templates/test-file.hbs +10 -8
- package/src/generators/test-generator/code-generator.ts +181 -46
- package/src/generators/test-generator/diagnostics.ts +117 -6
- package/src/generators/test-generator/patterns/index.ts +175 -24
- package/src/generators/test-generator/patterns/types.ts +8 -0
- package/src/generators/test-generator/patterns/with-parent-scope.ts +41 -0
- package/src/generators/test-generator/step-mapper.ts +277 -43
- package/src/generators/test-generator/template-engine.ts +21 -21
- package/src/generators/test-generator/utils/data-resolver.ts +23 -2
- package/src/generators/test-generator/utils/dialog-scope-identity.ts +71 -0
- package/src/generators/test-generator/utils/escape-js-string.ts +24 -0
- package/src/generators/test-generator/utils/nearest-match.ts +55 -0
- package/src/generators/test-generator/utils/selector-entry-fields.ts +131 -0
- package/src/generators/test-generator/utils/selector-entry-walk.ts +58 -0
- package/src/generators/test-generator/utils/selector-nth-validation.ts +99 -0
- package/src/generators/test-generator/utils/selector-resolver.ts +333 -28
- package/src/generators/test-generator/utils/selector-type-validation.ts +87 -0
- package/src/harness/audit.ts +55 -30
- package/src/harness/capability-plan.ts +33 -1
- package/src/harness/catalog/drivers.yaml +1 -1
- package/src/harness/catalog/universal-viewpoints.yaml +145 -0
- package/src/harness/data-driven-lint.ts +192 -32
- package/src/harness/parse.ts +7 -1
- package/src/harness/repair.ts +8 -1
- package/src/harness/script-check.ts +186 -21
- package/src/harness/sensors.ts +75 -1
- package/src/harness/viewpoint-ledger.ts +26 -5
- package/src/index.ts +7 -0
- package/src/orchestrator/project-initializer.ts +17 -0
- package/src/orchestrator/report-sanitize-reporter-install.ts +109 -0
- package/src/orchestrator/templates/ai-src/commands/delivery.md +4 -3
- package/src/orchestrator/templates/ai-src/commands/run-test.md +9 -1
- package/src/orchestrator/templates/ai-src/skills/sungen-api-coverage-model/SKILL.md +10 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-delivery/SKILL.md +14 -5
- package/src/orchestrator/templates/ai-src/skills/sungen-error-mapping/SKILL.md +62 -3
- package/src/orchestrator/templates/ai-src/skills/sungen-gherkin-syntax/SKILL.md +126 -11
- package/src/orchestrator/templates/ai-src/skills/sungen-mobile-gestures/SKILL.md +16 -1
- package/src/orchestrator/templates/ai-src/skills/sungen-selector-fix/SKILL.md +12 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-selector-keys/SKILL.md +19 -5
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-generation/SKILL.md +88 -2
- package/src/orchestrator/templates/ai-src/skills/sungen-tc-review/SKILL.md +62 -5
- package/src/orchestrator/templates/ai-src/skills/sungen-test-design-techniques/SKILL.md +13 -0
- package/src/orchestrator/templates/ai-src/skills/sungen-viewpoint/SKILL.md +59 -10
- package/src/orchestrator/templates/ai-src/skills/sungen-viewpoint/group-f-mobile-native.md +419 -0
- package/src/orchestrator/templates/playwright.config.ts +7 -0
- package/src/orchestrator/templates/readme.md +1 -1
- package/src/orchestrator/templates/specs-checked-state.ts +324 -0
- package/src/orchestrator/templates/specs-pw-shape-reporter.ts +0 -0
- package/src/orchestrator/templates/specs-report-path-sanitize-reporter.ts +142 -0
- package/src/orchestrator/templates/specs-url-assert.ts +101 -28
- package/src/orchestrator/templates/wdio.conf.ts +105 -1
- package/src/utils/selector-types.ts +54 -5
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Cell-text derivation shared by the XLSX and CSV matrix renderers — the
|
|
4
|
+
* parent-row summaries (mode, result, coverage) and the small formatters that
|
|
5
|
+
* turn model arrays into readable cell content.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.itemModeLabel = itemModeLabel;
|
|
9
|
+
exports.itemResultLabel = itemResultLabel;
|
|
10
|
+
exports.coverageSummary = coverageSummary;
|
|
11
|
+
exports.isoDate = isoDate;
|
|
12
|
+
exports.numbered = numbered;
|
|
13
|
+
exports.expectedWithVerification = expectedWithVerification;
|
|
14
|
+
exports.variantTypeLabel = variantTypeLabel;
|
|
15
|
+
/** Mode is a coverage dimension: mixed items show both counts. */
|
|
16
|
+
function itemModeLabel(item) {
|
|
17
|
+
if (item.mode === 'mixed') {
|
|
18
|
+
const auto = item.variants.filter((v) => v.mode === 'auto').length;
|
|
19
|
+
return `Auto ${auto} · Manual ${item.variants.length - auto}`;
|
|
20
|
+
}
|
|
21
|
+
return item.mode === 'manual' ? 'Manual' : 'Auto';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parent roll-up label. It must NEVER be exactly one of the variant state words
|
|
25
|
+
* (`Passed`/`Failed`/`Blocked`/`Pending`/`N/A`) — the summary band counts the
|
|
26
|
+
* Result column with exact-match COUNTIF over parent AND child rows, so a parent
|
|
27
|
+
* reading plain "Pending" was counted as an extra pending variant (109 instead
|
|
28
|
+
* of 77 on st-login).
|
|
29
|
+
*/
|
|
30
|
+
function itemResultLabel(item) {
|
|
31
|
+
const { passed, failed, blocked, na } = item.resultCounts;
|
|
32
|
+
const eff = item.variants.length - na;
|
|
33
|
+
const suffix = na > 0 ? ` · ${na} N/A` : '';
|
|
34
|
+
if (item.result === 'na')
|
|
35
|
+
return 'All N/A';
|
|
36
|
+
if (item.result === 'failed')
|
|
37
|
+
return `${passed}/${eff} Passed · ${failed} Failed${suffix}`;
|
|
38
|
+
if (item.result === 'blocked')
|
|
39
|
+
return `${passed}/${eff} Passed · ${blocked} Blocked${suffix}`;
|
|
40
|
+
return `${passed}/${eff} Passed${suffix}`;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Compact coverage summary for the parent row. A declared `dimensions:` digest
|
|
44
|
+
* wins ("15 variants — required ×3 · format ×9 …"); otherwise a single variant
|
|
45
|
+
* shows its condition and a group falls back to its variant REFS. Concatenating
|
|
46
|
+
* every variant's full title turned this cell into an 800-character paragraph.
|
|
47
|
+
*
|
|
48
|
+
* On a projected item (the Auto / Manual split) the count reflects the variants
|
|
49
|
+
* present in THAT sheet — a mixed item reads "1 variant" on each side, never
|
|
50
|
+
* the item's full total.
|
|
51
|
+
*/
|
|
52
|
+
function coverageSummary(item) {
|
|
53
|
+
const n = item.variants.length;
|
|
54
|
+
const head = `${n} variant${n === 1 ? '' : 's'}:`;
|
|
55
|
+
if (item.dimensions)
|
|
56
|
+
return `${head} ${item.dimensions}`;
|
|
57
|
+
if (n === 1)
|
|
58
|
+
return `${head} ${item.variants[0].condition}`;
|
|
59
|
+
return `${head} ${item.variants.map((v) => v.ref).join(' · ')}`;
|
|
60
|
+
}
|
|
61
|
+
/** ISO date (2026-08-04) — unambiguous across locales (review §9). */
|
|
62
|
+
function isoDate(startTime) {
|
|
63
|
+
if (!startTime)
|
|
64
|
+
return '';
|
|
65
|
+
const d = new Date(startTime);
|
|
66
|
+
if (isNaN(d.getTime()))
|
|
67
|
+
return '';
|
|
68
|
+
return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
|
|
69
|
+
}
|
|
70
|
+
function numbered(lines, start = 1) {
|
|
71
|
+
if (lines.length === 0)
|
|
72
|
+
return '';
|
|
73
|
+
if (lines.length === 1 && start === 1)
|
|
74
|
+
return lines[0];
|
|
75
|
+
return lines.map((l, i) => `${start + i}. ${l}`).join('\n');
|
|
76
|
+
}
|
|
77
|
+
/** Expected cell = observable outcomes; the HOW moves under a separate heading. */
|
|
78
|
+
function expectedWithVerification(oracle, verification) {
|
|
79
|
+
const expected = numbered(oracle);
|
|
80
|
+
if (verification.length === 0)
|
|
81
|
+
return expected;
|
|
82
|
+
return `${expected}\nVerification method: ${verification.join(' ')}`;
|
|
83
|
+
}
|
|
84
|
+
/** The Testcase type cell (column K) — mode plus why it is what it is. */
|
|
85
|
+
function variantTypeLabel(v) {
|
|
86
|
+
if (v.mode === 'manual')
|
|
87
|
+
return `Manual${v.manualReason ? ` (${v.manualReason})` : ''}`;
|
|
88
|
+
return v.mocked ? 'Auto · Mocked' : 'Auto';
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=item-labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item-labels.js","sourceRoot":"","sources":["../../../src/exporters/matrix/item-labels.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sheet 4 — Coverage: requirement coverage (id ↔ items ↔ status), the
|
|
3
|
+
* target × category grid (with explicit `—` gaps), the mock-verified case
|
|
4
|
+
* tracker, dispositions, and the generation manifest.
|
|
5
|
+
*
|
|
6
|
+
* Reports on the WHOLE model — it is deliberately not split by execution mode,
|
|
7
|
+
* because a requirement is covered or not regardless of who runs the case.
|
|
8
|
+
*
|
|
9
|
+
* Moved out of `render-xlsx.ts` unchanged when the workbook grew to four sheets.
|
|
10
|
+
*/
|
|
11
|
+
import * as ExcelJS from 'exceljs';
|
|
12
|
+
import { MatrixModel } from './types';
|
|
13
|
+
export declare function addCoverageSheet(wb: ExcelJS.Workbook, model: MatrixModel, sungenVersion?: string): void;
|
|
14
|
+
//# sourceMappingURL=render-coverage-sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-coverage-sheet.d.ts","sourceRoot":"","sources":["../../../src/exporters/matrix/render-coverage-sheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,WAAW,EAAe,MAAM,SAAS,CAAC;AAMnD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAqJvG"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sheet 4 — Coverage: requirement coverage (id ↔ items ↔ status), the
|
|
4
|
+
* target × category grid (with explicit `—` gaps), the mock-verified case
|
|
5
|
+
* tracker, dispositions, and the generation manifest.
|
|
6
|
+
*
|
|
7
|
+
* Reports on the WHOLE model — it is deliberately not split by execution mode,
|
|
8
|
+
* because a requirement is covered or not regardless of who runs the case.
|
|
9
|
+
*
|
|
10
|
+
* Moved out of `render-xlsx.ts` unchanged when the workbook grew to four sheets.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.addCoverageSheet = addCoverageSheet;
|
|
14
|
+
const xlsx_report_builder_1 = require("../xlsx-report-builder");
|
|
15
|
+
const build_1 = require("./build");
|
|
16
|
+
const result_totals_1 = require("./result-totals");
|
|
17
|
+
const xlsx_cells_1 = require("./xlsx-cells");
|
|
18
|
+
const CATEGORY_ORDER = ['normal', 'abnormal', 'security', 'nfr'];
|
|
19
|
+
function addCoverageSheet(wb, model, sungenVersion) {
|
|
20
|
+
const ws = wb.addWorksheet('Coverage');
|
|
21
|
+
ws.columns = [
|
|
22
|
+
{ width: 3 }, { width: 22 }, { width: 18 }, { width: 16 }, { width: 16 }, { width: 16 },
|
|
23
|
+
{ width: 16 }, { width: 44 },
|
|
24
|
+
];
|
|
25
|
+
(0, xlsx_report_builder_1.renderReportHeaderBand)(wb, ws, `${model.unit.toUpperCase()} COVERAGE OVERVIEW`, sungenVersion, model.formNo);
|
|
26
|
+
(0, xlsx_cells_1.draftBanner)(ws, model);
|
|
27
|
+
let rowIdx = 7;
|
|
28
|
+
// --- Performance budget (#569) — advisory: config (qa/perf.yaml) vs measured runs.
|
|
29
|
+
if (model.perf) {
|
|
30
|
+
const p = model.perf;
|
|
31
|
+
(0, xlsx_cells_1.dataCell)(ws.getRow(rowIdx).getCell(2), 'Performance budget', { bold: true });
|
|
32
|
+
rowIdx++;
|
|
33
|
+
const r = ws.getRow(rowIdx);
|
|
34
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(2), `p${p.percentile} ${p.metric.replace('_ms', ' time')}`);
|
|
35
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(3), p.pass ? 'PASS' : 'OVER BUDGET', { bold: true });
|
|
36
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(4), `measured ${p.measuredMs}ms`);
|
|
37
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(5), `budget ${p.budgetMs}ms`);
|
|
38
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(6), `${p.samples} runs`);
|
|
39
|
+
if (!p.pass && p.slowest.length)
|
|
40
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(8), `slowest: ${p.slowest.map((x) => `${x.ms}ms ${x.title.slice(0, 40)}`).join(' · ')}`);
|
|
41
|
+
rowIdx += 2;
|
|
42
|
+
}
|
|
43
|
+
// --- External Dependency Tracking (#580, ISTQB system-test practice): every case that
|
|
44
|
+
// ran against a MOCK is listed centrally. Its Result stays in the canonical vocabulary
|
|
45
|
+
// (the roll-up formulas depend on it); THIS table is where "Pass (Mocked) ≠ Pass (Real)"
|
|
46
|
+
// is visible — a case verified only against mocks is not Done until re-verified real.
|
|
47
|
+
{
|
|
48
|
+
const mockedVars = model.items.flatMap((it) => it.variants.filter((v) => v.mocked).map((v) => ({ it, v })));
|
|
49
|
+
if (mockedVars.length > 0) {
|
|
50
|
+
(0, xlsx_cells_1.dataCell)(ws.getRow(rowIdx).getCell(2), 'External Dependency Tracking — mock-verified cases (Pass here = Pass (Mocked), not Pass (Real))', { bold: true });
|
|
51
|
+
rowIdx++;
|
|
52
|
+
const hd = ws.getRow(rowIdx);
|
|
53
|
+
(0, xlsx_cells_1.dataCell)(hd.getCell(2), 'Variant');
|
|
54
|
+
(0, xlsx_cells_1.dataCell)(hd.getCell(3), 'Mocked dependency');
|
|
55
|
+
(0, xlsx_cells_1.dataCell)(hd.getCell(4), 'Delivery item');
|
|
56
|
+
(0, xlsx_cells_1.dataCell)(hd.getCell(5), 'Result');
|
|
57
|
+
(0, xlsx_cells_1.dataCell)(hd.getCell(8), 'Real-environment re-verify');
|
|
58
|
+
rowIdx++;
|
|
59
|
+
for (const { it, v } of mockedVars) {
|
|
60
|
+
const r = ws.getRow(rowIdx);
|
|
61
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(2), v.ref);
|
|
62
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(3), (v.mockDeps ?? []).join(', ') || '(scenario-level @mock)');
|
|
63
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(4), it.id);
|
|
64
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(5), (0, build_1.variantState)(v));
|
|
65
|
+
(0, xlsx_cells_1.dataCell)(r.getCell(8), '');
|
|
66
|
+
rowIdx++;
|
|
67
|
+
}
|
|
68
|
+
rowIdx++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// --- Requirement coverage (review §6): every requirement id gets ONE explicit status.
|
|
72
|
+
if (model.requirements.length > 0) {
|
|
73
|
+
(0, xlsx_cells_1.dataCell)(ws.getRow(rowIdx).getCell(2), 'Requirement coverage — every id has an explicit status', { bold: true });
|
|
74
|
+
rowIdx += 1;
|
|
75
|
+
const rh = ws.getRow(rowIdx);
|
|
76
|
+
ws.mergeCells(rowIdx, 4, rowIdx, 6);
|
|
77
|
+
(0, xlsx_cells_1.headerCell)(rh.getCell(2), 'Requirement');
|
|
78
|
+
(0, xlsx_cells_1.headerCell)(rh.getCell(3), 'Status');
|
|
79
|
+
(0, xlsx_cells_1.headerCell)(rh.getCell(4), 'Delivery items');
|
|
80
|
+
(0, xlsx_cells_1.headerCell)(rh.getCell(7), 'Variants');
|
|
81
|
+
(0, xlsx_cells_1.headerCell)(rh.getCell(8), 'Note');
|
|
82
|
+
rowIdx += 1;
|
|
83
|
+
for (const r of model.requirements) {
|
|
84
|
+
const row = ws.getRow(rowIdx++);
|
|
85
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(2), r.id, { bold: true });
|
|
86
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(3), r.status, {
|
|
87
|
+
center: true,
|
|
88
|
+
...(r.status === 'gap' ? { fill: xlsx_cells_1.GAP_FILL, bold: true } : {}),
|
|
89
|
+
});
|
|
90
|
+
ws.mergeCells(rowIdx - 1, 4, rowIdx - 1, 6);
|
|
91
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(4), r.items.join(', '));
|
|
92
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(7), r.variantCount > 0 ? String(r.variantCount) : '', { center: true });
|
|
93
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(8), r.note);
|
|
94
|
+
}
|
|
95
|
+
rowIdx += 1;
|
|
96
|
+
}
|
|
97
|
+
// --- Target × category grid ---
|
|
98
|
+
(0, xlsx_cells_1.dataCell)(ws.getRow(rowIdx).getCell(2), 'Coverage matrix — delivery items (coverage variants) per target × category', { bold: true });
|
|
99
|
+
rowIdx += 1;
|
|
100
|
+
const gridHeader = ws.getRow(rowIdx++);
|
|
101
|
+
(0, xlsx_cells_1.headerCell)(gridHeader.getCell(2), 'Target');
|
|
102
|
+
CATEGORY_ORDER.forEach((cat, i) => (0, xlsx_cells_1.headerCell)(gridHeader.getCell(3 + i), cat));
|
|
103
|
+
(0, xlsx_cells_1.headerCell)(gridHeader.getCell(3 + CATEGORY_ORDER.length), 'Total');
|
|
104
|
+
const targets = Array.from(new Set(model.items.map((i) => i.target)));
|
|
105
|
+
for (const target of targets) {
|
|
106
|
+
const row = ws.getRow(rowIdx++);
|
|
107
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(2), target, { bold: true });
|
|
108
|
+
let totalItems = 0;
|
|
109
|
+
let totalVariants = 0;
|
|
110
|
+
CATEGORY_ORDER.forEach((cat, i) => {
|
|
111
|
+
const cell = row.getCell(3 + i);
|
|
112
|
+
const items = model.items.filter((it) => it.target === target && it.category === cat);
|
|
113
|
+
const variants = items.reduce((a, it) => a + it.variants.length, 0);
|
|
114
|
+
totalItems += items.length;
|
|
115
|
+
totalVariants += variants;
|
|
116
|
+
// `—` is an explicit statement: this target × category cell has NO coverage.
|
|
117
|
+
(0, xlsx_cells_1.dataCell)(cell, items.length === 0 ? '—' : `${items.length} (${variants})`, {
|
|
118
|
+
center: true,
|
|
119
|
+
...(items.length === 0 ? { fill: xlsx_cells_1.GAP_FILL } : {}),
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(3 + CATEGORY_ORDER.length), `${totalItems} (${totalVariants})`, { center: true, bold: true });
|
|
123
|
+
}
|
|
124
|
+
// --- Dispositions ---
|
|
125
|
+
if (model.dispositions.length > 0) {
|
|
126
|
+
rowIdx += 1;
|
|
127
|
+
(0, xlsx_cells_1.dataCell)(ws.getRow(rowIdx).getCell(2), 'Not in the matrix (explicit dispositions)', { bold: true });
|
|
128
|
+
rowIdx += 1;
|
|
129
|
+
const dh = ws.getRow(rowIdx++);
|
|
130
|
+
['Source', 'Disposition', 'Reason', 'Title'].forEach((l, i) => (0, xlsx_cells_1.headerCell)(dh.getCell(2 + i), l));
|
|
131
|
+
for (const d of model.dispositions) {
|
|
132
|
+
const row = ws.getRow(rowIdx++);
|
|
133
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(2), d.vpId);
|
|
134
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(3), d.as, { center: true });
|
|
135
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(4), d.reason);
|
|
136
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(5), d.title);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// --- Manifest ---
|
|
140
|
+
rowIdx += 1;
|
|
141
|
+
(0, xlsx_cells_1.dataCell)(ws.getRow(rowIdx).getCell(2), 'Generation manifest', { bold: true });
|
|
142
|
+
rowIdx += 1;
|
|
143
|
+
const m = model.manifest;
|
|
144
|
+
const manifestRows = [
|
|
145
|
+
['Unit', m.unit],
|
|
146
|
+
['Review state (design approval)', m.approvalState],
|
|
147
|
+
['Test outcome', (0, result_totals_1.formatTestOutcome)((0, result_totals_1.resultTotals)(model.items))],
|
|
148
|
+
['Delivery items', String(m.itemCount)],
|
|
149
|
+
['Coverage variants', String(m.variantCount)],
|
|
150
|
+
['Source fingerprint', m.sourceFingerprint],
|
|
151
|
+
['Map fingerprint', m.mapFingerprint],
|
|
152
|
+
['Transformer version', m.transformerVersion],
|
|
153
|
+
['Max variants / item (warn)', String(m.thresholds.maxVariantsPerItem)],
|
|
154
|
+
];
|
|
155
|
+
for (const [k, v] of manifestRows) {
|
|
156
|
+
const row = ws.getRow(rowIdx++);
|
|
157
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(2), k, { bold: true, fill: xlsx_cells_1.SOFT_BLUE });
|
|
158
|
+
ws.mergeCells(rowIdx - 1, 3, rowIdx - 1, 7);
|
|
159
|
+
(0, xlsx_cells_1.dataCell)(row.getCell(3), v);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=render-coverage-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-coverage-sheet.js","sourceRoot":"","sources":["../../../src/exporters/matrix/render-coverage-sheet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-csv.d.ts","sourceRoot":"","sources":["../../../src/exporters/matrix/render-csv.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"render-csv.d.ts","sourceRoot":"","sources":["../../../src/exporters/matrix/render-csv.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAqBtC,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAmE1D"}
|
|
@@ -11,6 +11,7 @@ const api_testcase_formatter_1 = require("../api-testcase-formatter");
|
|
|
11
11
|
const playwright_report_parser_1 = require("../playwright-report-parser");
|
|
12
12
|
const build_1 = require("./build");
|
|
13
13
|
const render_xlsx_1 = require("./render-xlsx");
|
|
14
|
+
const result_totals_1 = require("./result-totals");
|
|
14
15
|
const HEADERS = [
|
|
15
16
|
'Level', 'ID', 'Target', 'Test Intent / Condition', 'Category', 'Priority',
|
|
16
17
|
'Precondition', 'Coverage / Test Data', 'Action / Trigger', 'Expected Result',
|
|
@@ -33,7 +34,8 @@ function renderMatrixCsv(model) {
|
|
|
33
34
|
const BOM = '\ufeff'; // Excel compatibility (Vietnamese/Japanese content)
|
|
34
35
|
const lines = [];
|
|
35
36
|
lines.push(`# Test Case & Coverage Matrix — ${model.unit}`);
|
|
36
|
-
|
|
37
|
+
// Two different facts, two different words: the map's design REVIEW state, and the runs' OUTCOME.
|
|
38
|
+
lines.push(`# delivery items: ${model.manifest.itemCount} · coverage variants: ${model.manifest.variantCount} · review: ${model.manifest.approvalState} (design) · test outcome: ${(0, result_totals_1.formatTestOutcome)((0, result_totals_1.resultTotals)(model.items))}`);
|
|
37
39
|
lines.push(HEADERS.map(esc).join(','));
|
|
38
40
|
for (const item of model.items) {
|
|
39
41
|
lines.push([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render-csv.js","sourceRoot":"","sources":["../../../src/exporters/matrix/render-csv.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;
|
|
1
|
+
{"version":3,"file":"render-csv.js","sourceRoot":"","sources":["../../../src/exporters/matrix/render-csv.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sheet 1 — Overview: the roll-up table over the Auto and Manual sheets.
|
|
3
|
+
*
|
|
4
|
+
* Thin adapter. The table itself is `addOverviewSheet` in the shared report
|
|
5
|
+
* builder — the same one the legacy path uses — so both delivery formats show
|
|
6
|
+
* the customer one identical summary. All this module does is turn the matrix
|
|
7
|
+
* model plus the per-sheet item projections into the summary shape it wants.
|
|
8
|
+
*
|
|
9
|
+
* Every count in that table is a LIVE reference into the detail sheet's band
|
|
10
|
+
* (`'Auto'!D7`), never a frozen number, so it recomputes when QA edits results.
|
|
11
|
+
*/
|
|
12
|
+
import * as ExcelJS from 'exceljs';
|
|
13
|
+
import { DeliveryItem, MatrixModel } from './types';
|
|
14
|
+
/** One detail sheet: its tab name and the items projected onto it. */
|
|
15
|
+
export interface SheetProjection {
|
|
16
|
+
sheetName: string;
|
|
17
|
+
items: DeliveryItem[];
|
|
18
|
+
}
|
|
19
|
+
export declare function addMatrixOverviewSheet(wb: ExcelJS.Workbook, model: MatrixModel, sheets: SheetProjection[], sungenVersion?: string): void;
|
|
20
|
+
//# sourceMappingURL=render-overview-sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-overview-sheet.d.ts","sourceRoot":"","sources":["../../../src/exporters/matrix/render-overview-sheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGpD,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAiBD,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,OAAO,CAAC,QAAQ,EACpB,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,eAAe,EAAE,EACzB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI,CAON"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Sheet 1 — Overview: the roll-up table over the Auto and Manual sheets.
|
|
4
|
+
*
|
|
5
|
+
* Thin adapter. The table itself is `addOverviewSheet` in the shared report
|
|
6
|
+
* builder — the same one the legacy path uses — so both delivery formats show
|
|
7
|
+
* the customer one identical summary. All this module does is turn the matrix
|
|
8
|
+
* model plus the per-sheet item projections into the summary shape it wants.
|
|
9
|
+
*
|
|
10
|
+
* Every count in that table is a LIVE reference into the detail sheet's band
|
|
11
|
+
* (`'Auto'!D7`), never a frozen number, so it recomputes when QA edits results.
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.addMatrixOverviewSheet = addMatrixOverviewSheet;
|
|
15
|
+
const xlsx_report_builder_1 = require("../xlsx-report-builder");
|
|
16
|
+
const result_totals_1 = require("./result-totals");
|
|
17
|
+
/**
|
|
18
|
+
* `total` counts VARIANTS only — parent rows are delivery items, not executable
|
|
19
|
+
* cases. It must match what the detail band's `C7=COUNTA(K14:K…)` counts, since
|
|
20
|
+
* a cached value and the live formula beside it have to tell one story. See
|
|
21
|
+
* `testcase-summary-band.ts` for why the count anchors on column K.
|
|
22
|
+
*/
|
|
23
|
+
function summaryOf(unit, items) {
|
|
24
|
+
// The Overview form has no Blocked column: a blocked variant stays inside `Remain` (total − passed − N/A),
|
|
25
|
+
// exactly as the sheet's live band counts it.
|
|
26
|
+
const t = (0, result_totals_1.resultTotals)(items);
|
|
27
|
+
return { screen: unit, total: t.total, passed: t.passed, failed: t.failed, pending: t.pending, na: t.na };
|
|
28
|
+
}
|
|
29
|
+
function addMatrixOverviewSheet(wb, model, sheets, sungenVersion) {
|
|
30
|
+
(0, xlsx_report_builder_1.addOverviewSheet)(wb, sheets.map((s) => ({ sheetName: s.sheetName, summary: summaryOf(model.unit, s.items) })), sungenVersion, { titleLabel: `${model.unit.toUpperCase()} TEST CASE & COVERAGE MATRIX`, formNo: model.formNo });
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=render-overview-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-overview-sheet.js","sourceRoot":"","sources":["../../../src/exporters/matrix/render-overview-sheet.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AA4BH,wDAYC;AArCD,gEAA0D;AAE1D,mDAA+C;AAQ/C;;;;;GAKG;AACH,SAAS,SAAS,CAAC,IAAY,EAAE,KAAqB;IAGpD,2GAA2G;IAC3G,8CAA8C;IAC9C,MAAM,CAAC,GAAG,IAAA,4BAAY,EAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5G,CAAC;AAED,SAAgB,sBAAsB,CACpC,EAAoB,EACpB,KAAkB,EAClB,MAAyB,EACzB,aAAsB;IAEtB,IAAA,sCAAgB,EACd,EAAE,EACF,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EACxF,aAAa,EACb,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,8BAA8B,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAChG,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One BM-2-901-13 testcase sheet of the matrix workbook (Auto or Manual).
|
|
3
|
+
*
|
|
4
|
+
* Layout is the company template, cell for cell: masthead rows 1-4, the summary
|
|
5
|
+
* band on rows 6/7/8, the `*: Mandatory` legend on row 12, the 16 column headers
|
|
6
|
+
* `A..P` on row 13, and data from row 14.
|
|
7
|
+
*
|
|
8
|
+
* Two row levels: one parent row per delivery item, each followed by its variant
|
|
9
|
+
* sub-rows on Excel outline level 1 — the sub-row is where source traceability
|
|
10
|
+
* (VP-id), test data and the manual result/evidence entry live (review B-05/B-06).
|
|
11
|
+
* Variant Result cells carry the state dropdown; the parent Result is a live
|
|
12
|
+
* formula over its children, so a parent can never contradict its variants even
|
|
13
|
+
* after QA edits results by hand.
|
|
14
|
+
*/
|
|
15
|
+
import * as ExcelJS from 'exceljs';
|
|
16
|
+
import { DeliveryItem, MatrixModel } from './types';
|
|
17
|
+
/** Column headers on row 13 — `A..P`, matching the template exactly. */
|
|
18
|
+
export declare const TESTCASE_HEADERS: string[];
|
|
19
|
+
export declare const HEADER_ROW = 13;
|
|
20
|
+
/** Column L — the one the band's COUNTIFs and the parent roll-ups read. */
|
|
21
|
+
export declare const RESULT_COL = 12;
|
|
22
|
+
/**
|
|
23
|
+
* Append one testcase sheet holding `items` (already projected onto this sheet's
|
|
24
|
+
* execution mode). Always called for both Auto and Manual, even when one side is
|
|
25
|
+
* empty: Overview then always has exactly two rows, and QA has somewhere to add
|
|
26
|
+
* hand-written cases. An empty sheet's band reads 0 and its percentages resolve
|
|
27
|
+
* through IFERROR — never `#DIV/0!`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function addTestcaseSheet(wb: ExcelJS.Workbook, sheetName: string, model: MatrixModel, items: DeliveryItem[], sungenVersion?: string): void;
|
|
30
|
+
//# sourceMappingURL=render-testcase-sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-testcase-sheet.d.ts","sourceRoot":"","sources":["../../../src/exporters/matrix/render-testcase-sheet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAKnC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAOpD,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,UAK5B,CAAC;AAKF,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,2EAA2E;AAC3E,eAAO,MAAM,UAAU,KAAK,CAAC;AAqE7B;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,OAAO,CAAC,QAAQ,EACpB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,YAAY,EAAE,EACrB,aAAa,CAAC,EAAE,MAAM,GACrB,IAAI,CAuDN"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* One BM-2-901-13 testcase sheet of the matrix workbook (Auto or Manual).
|
|
4
|
+
*
|
|
5
|
+
* Layout is the company template, cell for cell: masthead rows 1-4, the summary
|
|
6
|
+
* band on rows 6/7/8, the `*: Mandatory` legend on row 12, the 16 column headers
|
|
7
|
+
* `A..P` on row 13, and data from row 14.
|
|
8
|
+
*
|
|
9
|
+
* Two row levels: one parent row per delivery item, each followed by its variant
|
|
10
|
+
* sub-rows on Excel outline level 1 — the sub-row is where source traceability
|
|
11
|
+
* (VP-id), test data and the manual result/evidence entry live (review B-05/B-06).
|
|
12
|
+
* Variant Result cells carry the state dropdown; the parent Result is a live
|
|
13
|
+
* formula over its children, so a parent can never contradict its variants even
|
|
14
|
+
* after QA edits results by hand.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.RESULT_COL = exports.HEADER_ROW = exports.TESTCASE_HEADERS = void 0;
|
|
18
|
+
exports.addTestcaseSheet = addTestcaseSheet;
|
|
19
|
+
const xlsx_report_builder_1 = require("../xlsx-report-builder");
|
|
20
|
+
const api_testcase_formatter_1 = require("../api-testcase-formatter");
|
|
21
|
+
const playwright_report_parser_1 = require("../playwright-report-parser");
|
|
22
|
+
const build_1 = require("./build");
|
|
23
|
+
const xlsx_cells_1 = require("./xlsx-cells");
|
|
24
|
+
const testcase_summary_band_1 = require("./testcase-summary-band");
|
|
25
|
+
const item_labels_1 = require("./item-labels");
|
|
26
|
+
/** Column headers on row 13 — `A..P`, matching the template exactly. */
|
|
27
|
+
exports.TESTCASE_HEADERS = [
|
|
28
|
+
'ID*', 'Target', 'Test Intent / Condition', 'Category', 'Priority', 'Precondition',
|
|
29
|
+
'Coverage / Test Data', 'Action / Trigger*', 'Expected results*', 'Trace', 'Testcase type',
|
|
30
|
+
'Test Result*', 'Executed Date*', 'Test Executor*', 'Test Environment',
|
|
31
|
+
'Note\n(Test evidence, DefectID, Actual result)',
|
|
32
|
+
];
|
|
33
|
+
/** Column widths `A..P`, from the template (H widened — Action / Trigger is the longest cell). */
|
|
34
|
+
const COLUMN_WIDTHS = [20, 12.5, 15.38, 16.25, 17, 25.51, 24.88, 50, 41, 12, 13.5, 15.88, 13.5, 16.5, 23, 29];
|
|
35
|
+
exports.HEADER_ROW = 13;
|
|
36
|
+
/** Column L — the one the band's COUNTIFs and the parent roll-ups read. */
|
|
37
|
+
exports.RESULT_COL = 12;
|
|
38
|
+
/** Variant sub-row — only what distinguishes it from its parent (review GAP-01). */
|
|
39
|
+
function variantValues(item, v, model) {
|
|
40
|
+
return [
|
|
41
|
+
v.ref,
|
|
42
|
+
'',
|
|
43
|
+
v.condition,
|
|
44
|
+
'', '',
|
|
45
|
+
(0, item_labels_1.numbered)(item.preconditionDeltas[v.ref] ?? []),
|
|
46
|
+
(0, item_labels_1.numbered)(v.data),
|
|
47
|
+
// Only the steps after the parent's shared prefix, numbered so the parent's
|
|
48
|
+
// steps + these read as one continuous procedure.
|
|
49
|
+
(0, item_labels_1.numbered)(item.triggerDeltas[v.ref] ?? [], item.trigger.length + 1),
|
|
50
|
+
(0, item_labels_1.expectedWithVerification)(v.oracle, v.verification),
|
|
51
|
+
v.traces.join(', '),
|
|
52
|
+
(0, item_labels_1.variantTypeLabel)(v),
|
|
53
|
+
(0, build_1.variantState)(v),
|
|
54
|
+
(0, item_labels_1.isoDate)(v.result?.startTime),
|
|
55
|
+
'',
|
|
56
|
+
'',
|
|
57
|
+
// Redact BEFORE clipping — same denylist as the testcases CSV Note column.
|
|
58
|
+
v.result?.error ? (0, playwright_report_parser_1.clipNoteField)((0, api_testcase_formatter_1.redactSecrets)(String(v.result.error), model.secretValues)) : '',
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Live parent roll-up over the child Result cells — precedence
|
|
63
|
+
* failed → blocked → pending → partial → passed. N/A variants leave the
|
|
64
|
+
* denominator (review GAP-06): eff = n − COUNTIF(N/A); all-N/A → "All N/A".
|
|
65
|
+
* The range covers only the children present in THIS sheet, so a mixed item's
|
|
66
|
+
* two parent rows legitimately report two different numbers.
|
|
67
|
+
*/
|
|
68
|
+
function rollUpFormula(n, firstChild, lastChild) {
|
|
69
|
+
const rng = `L${firstChild}:L${lastChild}`;
|
|
70
|
+
const EFF = `(${n}-COUNTIF(${rng},"N/A"))`;
|
|
71
|
+
const NA = `IF(COUNTIF(${rng},"N/A")>0," · "&COUNTIF(${rng},"N/A")&" N/A","")`;
|
|
72
|
+
return (`IF(COUNTIF(${rng},"Failed")>0,COUNTIF(${rng},"Passed")&"/"&${EFF}&" Passed · "&COUNTIF(${rng},"Failed")&" Failed"&${NA},` +
|
|
73
|
+
`IF(COUNTIF(${rng},"Blocked")>0,COUNTIF(${rng},"Passed")&"/"&${EFF}&" Passed · "&COUNTIF(${rng},"Blocked")&" Blocked"&${NA},` +
|
|
74
|
+
`IF(${EFF}=0,"All N/A",` +
|
|
75
|
+
`COUNTIF(${rng},"Passed")&"/"&${EFF}&" Passed"&${NA})))`);
|
|
76
|
+
}
|
|
77
|
+
/** Parent row — only values genuinely COMMON to the whole item (review M-04). */
|
|
78
|
+
function parentValues(item, formula) {
|
|
79
|
+
return [
|
|
80
|
+
item.id,
|
|
81
|
+
item.target,
|
|
82
|
+
item.intent,
|
|
83
|
+
item.category,
|
|
84
|
+
item.priority,
|
|
85
|
+
(0, item_labels_1.numbered)(item.precondition),
|
|
86
|
+
(0, item_labels_1.coverageSummary)(item),
|
|
87
|
+
// The shared leading steps; each variant's remaining steps sit on its sub-row.
|
|
88
|
+
(0, item_labels_1.numbered)(item.trigger),
|
|
89
|
+
item.oracle,
|
|
90
|
+
item.traces.join(', '),
|
|
91
|
+
// K (Testcase type) stays blank on a parent — it is not an executable case.
|
|
92
|
+
'',
|
|
93
|
+
{ formula, result: (0, item_labels_1.itemResultLabel)(item) },
|
|
94
|
+
'',
|
|
95
|
+
'',
|
|
96
|
+
'',
|
|
97
|
+
item.review === 'proposed' ? 'REVIEW REQUIRED' : '',
|
|
98
|
+
];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Append one testcase sheet holding `items` (already projected onto this sheet's
|
|
102
|
+
* execution mode). Always called for both Auto and Manual, even when one side is
|
|
103
|
+
* empty: Overview then always has exactly two rows, and QA has somewhere to add
|
|
104
|
+
* hand-written cases. An empty sheet's band reads 0 and its percentages resolve
|
|
105
|
+
* through IFERROR — never `#DIV/0!`.
|
|
106
|
+
*/
|
|
107
|
+
function addTestcaseSheet(wb, sheetName, model, items, sungenVersion) {
|
|
108
|
+
const ws = wb.addWorksheet(sheetName);
|
|
109
|
+
ws.properties.outlineLevelRow = 1;
|
|
110
|
+
ws.columns = COLUMN_WIDTHS.map((width) => ({ width }));
|
|
111
|
+
(0, xlsx_report_builder_1.renderReportHeaderBand)(wb, ws, `${model.unit.toUpperCase()} TEST CASE & COVERAGE MATRIX`, sungenVersion, model.formNo);
|
|
112
|
+
(0, xlsx_cells_1.draftBanner)(ws, model);
|
|
113
|
+
(0, testcase_summary_band_1.addSummaryBand)(ws, items);
|
|
114
|
+
const legend = ws.getCell('A12');
|
|
115
|
+
legend.value = '*: Mandatory';
|
|
116
|
+
legend.font = { italic: true, size: 10, name: xlsx_report_builder_1.ARIAL_FONT, color: { argb: 'FF808080' } };
|
|
117
|
+
const hr = ws.getRow(exports.HEADER_ROW);
|
|
118
|
+
hr.height = 38;
|
|
119
|
+
exports.TESTCASE_HEADERS.forEach((label, i) => (0, xlsx_cells_1.headerCell)(hr.getCell(1 + i), label));
|
|
120
|
+
let rowIdx = exports.HEADER_ROW + 1;
|
|
121
|
+
for (const item of items) {
|
|
122
|
+
const parentRowIdx = rowIdx++;
|
|
123
|
+
// Variant sub-rows FIRST — the parent's formula needs their cell range.
|
|
124
|
+
const firstChild = rowIdx;
|
|
125
|
+
for (const v of item.variants) {
|
|
126
|
+
const vr = ws.getRow(rowIdx++);
|
|
127
|
+
vr.outlineLevel = 1;
|
|
128
|
+
variantValues(item, v, model).forEach((val, i) => (0, xlsx_cells_1.dataCell)(vr.getCell(1 + i), val, { center: i === 10 }));
|
|
129
|
+
// Manual-execution entry: constrain the Result cell to the known states.
|
|
130
|
+
vr.getCell(exports.RESULT_COL).dataValidation = {
|
|
131
|
+
type: 'list', allowBlank: true, formulae: [`"${xlsx_cells_1.RESULT_STATES}"`],
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
const pr = ws.getRow(parentRowIdx);
|
|
135
|
+
const values = parentValues(item, rollUpFormula(item.variants.length, firstChild, rowIdx - 1));
|
|
136
|
+
values.forEach((v, i) => (0, xlsx_cells_1.dataCell)(pr.getCell(1 + i), v, {
|
|
137
|
+
bold: true,
|
|
138
|
+
fill: xlsx_cells_1.SOFT_BLUE,
|
|
139
|
+
center: i === 3 || i === 4,
|
|
140
|
+
...(i === 15 && item.review === 'proposed' ? { color: xlsx_cells_1.DRAFT_RED } : {}),
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
const lastRow = Math.max(rowIdx - 1, exports.HEADER_ROW);
|
|
144
|
+
ws.autoFilter = { from: { row: exports.HEADER_ROW, column: 1 }, to: { row: lastRow, column: 16 } };
|
|
145
|
+
ws.views = [{ state: 'frozen', xSplit: 0, ySplit: exports.HEADER_ROW }];
|
|
146
|
+
// Print: landscape, fit width only (never squash all rows into one page),
|
|
147
|
+
// repeat the masthead + band + header rows on every page (review GAP-08).
|
|
148
|
+
ws.pageSetup = {
|
|
149
|
+
orientation: 'landscape',
|
|
150
|
+
fitToPage: true,
|
|
151
|
+
fitToWidth: 1,
|
|
152
|
+
fitToHeight: 0,
|
|
153
|
+
printTitlesRow: `1:${exports.HEADER_ROW}`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=render-testcase-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-testcase-sheet.js","sourceRoot":"","sources":["../../../src/exporters/matrix/render-testcase-sheet.ts"],"names":[],"mappings":"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"}
|