create-appraisejs 0.3.1-alpha.0 ā 0.3.1-alpha.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 +17 -17
- package/dist/cli.e2e.test.d.ts +2 -2
- package/dist/cli.e2e.test.js +74 -72
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -2
- package/dist/config.test.js +64 -64
- package/dist/copy-template.test.d.ts +2 -2
- package/dist/copy-template.test.js +70 -70
- package/dist/download-repo.test.d.ts +2 -2
- package/dist/download-repo.test.js +15 -13
- package/dist/install.test.d.ts +2 -2
- package/dist/install.test.js +115 -114
- package/dist/prepare-template-utils.d.ts.map +1 -1
- package/dist/prepare-template-utils.js.map +1 -1
- package/dist/prompts.d.ts.map +1 -1
- package/dist/prompts.js +2 -2
- package/dist/prompts.js.map +1 -1
- package/dist/prompts.test.d.ts +2 -2
- package/dist/prompts.test.js +54 -54
- package/dist/sync-templates-utils.d.ts.map +1 -1
- package/dist/sync-templates-utils.js +1 -5
- package/dist/sync-templates-utils.js.map +1 -1
- package/package.json +1 -1
- package/templates/blank/.editorconfig +11 -0
- package/templates/blank/.gitattributes +21 -0
- package/templates/blank/.gitconfig.appraise +14 -0
- package/templates/blank/.prettierrc +13 -0
- package/templates/blank/.vscode/settings.json +2 -0
- package/templates/blank/README.md +12 -12
- package/templates/blank/components.json +24 -24
- package/templates/blank/cucumber.mjs +16 -16
- package/templates/blank/e2e/README.md +56 -0
- package/templates/blank/e2e/apply-migrations.mjs +76 -0
- package/templates/blank/e2e/appraise-smoke.spec.ts +78 -0
- package/templates/blank/e2e/authoring.spec.ts +53 -0
- package/templates/blank/e2e/crud-configuration.spec.ts +138 -0
- package/templates/blank/e2e/crud-tests.spec.ts +76 -0
- package/templates/blank/e2e/helpers/forms.ts +186 -0
- package/templates/blank/e2e/helpers/navigation.ts +27 -0
- package/templates/blank/e2e/helpers/table.ts +45 -0
- package/templates/blank/e2e/helpers/test-data.ts +549 -0
- package/templates/blank/e2e/helpers/ui.ts +41 -0
- package/templates/blank/e2e/navigation.spec.ts +101 -0
- package/templates/blank/e2e/runs-and-reports.spec.ts +82 -0
- package/templates/blank/e2e/settings-sync.spec.ts +39 -0
- package/templates/blank/e2e/start-server.mjs +61 -0
- package/templates/blank/eslint.config.mjs +4 -4
- package/templates/blank/gitignore +0 -3
- package/templates/blank/next-env.d.ts +1 -1
- package/templates/blank/package-lock.json +58 -102
- package/templates/blank/package.json +10 -9
- package/templates/blank/packages/cucumber-runtime/package.json +13 -13
- package/templates/blank/packages/cucumber-runtime/src/cache.util.ts +93 -93
- package/templates/blank/packages/cucumber-runtime/src/cli.ts +77 -68
- package/templates/blank/packages/cucumber-runtime/src/environment.util.ts +21 -21
- package/templates/blank/packages/cucumber-runtime/src/executor.ts +32 -32
- package/templates/blank/packages/cucumber-runtime/src/index.ts +17 -17
- package/templates/blank/packages/cucumber-runtime/src/locator.util.ts +234 -234
- package/templates/blank/packages/cucumber-runtime/src/parameter-types.ts +7 -7
- package/templates/blank/packages/cucumber-runtime/src/random-data.util.ts +35 -35
- package/templates/blank/packages/cucumber-runtime/src/types.ts +13 -13
- package/templates/blank/packages/cucumber-runtime/src/world.ts +44 -44
- package/templates/blank/packages/cucumber-runtime/tsconfig.json +11 -11
- package/templates/blank/packages/locator-picker-companion/dist/cli.js +1 -1
- package/templates/blank/packages/locator-picker-companion/dist/index.d.ts +3 -3
- package/templates/blank/packages/locator-picker-companion/dist/index.js +3 -3
- package/templates/blank/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
- package/templates/blank/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
- package/templates/blank/packages/locator-picker-companion/dist/selector-generator.js +233 -229
- package/templates/blank/packages/locator-picker-companion/src/cli.ts +1 -7
- package/templates/blank/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
- package/templates/blank/packages/locator-picker-companion/src/launcher.ts +1 -3
- package/templates/blank/packages/locator-picker-companion/src/session-file.ts +4 -15
- package/templates/blank/packages/locator-picker-companion/src/types.ts +1 -8
- package/templates/blank/playwright.config.ts +46 -0
- package/templates/blank/postcss.config.mjs +8 -8
- package/templates/blank/prisma/dev.db +0 -0
- package/templates/blank/scripts/configure-git-line-endings.mjs +91 -0
- package/templates/blank/scripts/install-template-step.ts +5 -1
- package/templates/blank/scripts/lib/step-matcher.test.ts +3 -3
- package/templates/blank/scripts/lib/step-matcher.ts +5 -1
- package/templates/blank/scripts/lib/template-step-installer.test.ts +4 -2
- package/templates/blank/scripts/lib/template-step-installer.ts +16 -4
- package/templates/blank/scripts/lib/template-step-registry.test.ts +1 -1
- package/templates/blank/scripts/lib/template-step-registry.ts +4 -1
- package/templates/blank/scripts/run-fallow-commit.mjs +4 -6
- package/templates/blank/scripts/sync-all.ts +7 -6
- package/templates/blank/scripts/sync-appraise-base-template.ts +84 -77
- package/templates/blank/scripts/sync-environments.ts +47 -44
- package/templates/blank/scripts/sync-locator-groups.ts +67 -76
- package/templates/blank/scripts/sync-locators.ts +50 -53
- package/templates/blank/scripts/sync-modules.ts +42 -42
- package/templates/blank/scripts/sync-tags.ts +51 -51
- package/templates/blank/scripts/sync-template-step-groups.ts +34 -32
- package/templates/blank/scripts/sync-template-steps.ts +97 -97
- package/templates/blank/scripts/sync-test-cases.ts +65 -74
- package/templates/blank/scripts/sync-test-suites.ts +85 -80
- package/templates/blank/src/actions/server-action-boundary.test.ts +1 -7
- package/templates/blank/src/actions/settings/sync-actions.ts +3 -1
- package/templates/blank/src/actions/tags/tag-actions.ts +1 -7
- package/templates/blank/src/actions/template-test-case/template-test-case-actions.ts +3 -1
- package/templates/blank/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/blank/src/app/(base)/environments/environment-form.tsx +3 -2
- package/templates/blank/src/app/(base)/environments/environment-helpers.ts +4 -1
- package/templates/blank/src/app/(base)/layout.tsx +10 -10
- package/templates/blank/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
- package/templates/blank/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/blank/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/blank/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/blank/src/app/(base)/locator-groups/page.tsx +9 -19
- package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
- package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
- package/templates/blank/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
- package/templates/blank/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
- package/templates/blank/src/app/(base)/locators/locator-file-sync.ts +1 -5
- package/templates/blank/src/app/(base)/locators/locator-helpers.ts +2 -12
- package/templates/blank/src/app/(base)/locators/locator-table-columns.tsx +59 -60
- package/templates/blank/src/app/(base)/modules/module-form.tsx +3 -1
- package/templates/blank/src/app/(base)/reports/overview-chart.tsx +49 -49
- package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
- package/templates/blank/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
- package/templates/blank/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
- package/templates/blank/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
- package/templates/blank/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
- package/templates/blank/src/app/(base)/tags/tag-form.test.tsx +2 -10
- package/templates/blank/src/app/(base)/tags/tag-form.tsx +5 -3
- package/templates/blank/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/blank/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/blank/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/blank/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
- package/templates/blank/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
- package/templates/blank/src/app/(base)/template-steps/paramChip.tsx +6 -10
- package/templates/blank/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
- package/templates/blank/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
- package/templates/blank/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
- package/templates/blank/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
- package/templates/blank/src/app/(base)/template-steps/template-step-types.ts +1 -5
- package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
- package/templates/blank/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
- package/templates/blank/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/blank/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/blank/src/app/(base)/test-cases/create/page.tsx +1 -5
- package/templates/blank/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
- package/templates/blank/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
- package/templates/blank/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
- package/templates/blank/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
- package/templates/blank/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
- package/templates/blank/src/app/(base)/test-cases/test-case-form.tsx +63 -78
- package/templates/blank/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
- package/templates/blank/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
- package/templates/blank/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
- package/templates/blank/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
- package/templates/blank/src/app/api/test-runs/[runId]/download/route.ts +1 -4
- package/templates/blank/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
- package/templates/blank/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/blank/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/blank/src/components/data-visualization/info-card.tsx +56 -70
- package/templates/blank/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/blank/src/components/diagram/add-node-prompt-node.tsx +1 -1
- package/templates/blank/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
- package/templates/blank/src/components/diagram/dynamic-parameters.test.tsx +4 -1
- package/templates/blank/src/components/diagram/dynamic-parameters.tsx +0 -1
- package/templates/blank/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
- package/templates/blank/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
- package/templates/blank/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
- package/templates/blank/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
- package/templates/blank/src/components/diagram/flow-diagram-node-search.tsx +65 -65
- package/templates/blank/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
- package/templates/blank/src/components/diagram/flow-diagram-view.tsx +1 -7
- package/templates/blank/src/components/diagram/flow-node-data-helpers.ts +1 -1
- package/templates/blank/src/components/diagram/node-form-fields-content.tsx +9 -2
- package/templates/blank/src/components/diagram/node-form-helpers.test.ts +3 -1
- package/templates/blank/src/components/diagram/node-form-helpers.ts +1 -4
- package/templates/blank/src/components/diagram/node-form-template-step-selection.ts +1 -4
- package/templates/blank/src/components/diagram/node-form.test.tsx +25 -0
- package/templates/blank/src/components/diagram/node-form.tsx +2 -12
- package/templates/blank/src/components/diagram/options-header-node.test.tsx +4 -1
- package/templates/blank/src/components/diagram/options-header-node.tsx +140 -130
- package/templates/blank/src/components/diagram/use-flow-diagram.ts +1 -2
- package/templates/blank/src/components/form/error-message.tsx +7 -7
- package/templates/blank/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/blank/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/blank/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/blank/src/components/navigation/entity-search-command.tsx +3 -9
- package/templates/blank/src/components/navigation/nav-link.tsx +60 -60
- package/templates/blank/src/components/test-case/test-case-form-helpers.test.ts +1 -5
- package/templates/blank/src/components/test-case/test-case-form-helpers.ts +1 -5
- package/templates/blank/src/components/test-case/test-case-picker-helpers.ts +8 -7
- package/templates/blank/src/components/test-case/test-case-picker.tsx +2 -6
- package/templates/blank/src/components/test-run/log-viewer.test.tsx +25 -0
- package/templates/blank/src/components/test-run/log-viewer.tsx +2 -2
- package/templates/blank/src/components/test-run/test-run-details-guards.ts +10 -1
- package/templates/blank/src/components/test-run/test-run-details.test.tsx +9 -19
- package/templates/blank/src/components/test-run/use-log-viewer.ts +2 -8
- package/templates/blank/src/components/test-run/use-test-run-header.ts +1 -4
- package/templates/blank/src/components/test-suite/test-suite-picker.tsx +1 -1
- package/templates/blank/src/components/theme/theme-provider.tsx +7 -1
- package/templates/blank/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/blank/src/components/typography/page-header.tsx +7 -7
- package/templates/blank/src/components/ui/chart.tsx +2 -8
- package/templates/blank/src/components/ui/command.tsx +2 -5
- package/templates/blank/src/components/ui/data-table-column-header.tsx +3 -3
- package/templates/blank/src/components/ui/data-table.test.tsx +1 -8
- package/templates/blank/src/components/ui/dialog.tsx +1 -4
- package/templates/blank/src/components/ui/select.tsx +2 -2
- package/templates/blank/src/components/ui/separator.tsx +5 -1
- package/templates/blank/src/components/ui/skeleton.tsx +7 -7
- package/templates/blank/src/components/ui/table.tsx +1 -1
- package/templates/blank/src/components/ui/toaster.tsx +26 -26
- package/templates/blank/src/components/ui/tooltip.tsx +1 -1
- package/templates/blank/src/constants/form-opts/locator-group-form-opts.ts +1 -1
- package/templates/blank/src/lib/locator-group-file-utils.ts +5 -1
- package/templates/blank/src/lib/locator-picker/session-manager.ts +1 -2
- package/templates/blank/src/lib/metrics/metric-calculator.test.ts +105 -6
- package/templates/blank/src/lib/metrics/metric-calculator.ts +39 -40
- package/templates/blank/src/lib/sync/sync-executor.ts +1 -4
- package/templates/blank/src/lib/sync/sync-pending-counts.test.ts +201 -7
- package/templates/blank/src/lib/sync/sync-pending-counts.ts +81 -13
- package/templates/blank/src/lib/template-automation-paths.ts +1 -1
- package/templates/blank/src/lib/template-sync-utils.d.ts +14 -7
- package/templates/blank/src/lib/test-case-utils.ts +6 -6
- package/templates/blank/src/lib/test-run/log-formatter.ts +82 -83
- package/templates/blank/src/lib/test-run/report-parser.ts +352 -352
- package/templates/blank/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/blank/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/blank/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/blank/src/lib/utils/template-step-file-generator.ts +5 -3
- package/templates/blank/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
- package/templates/blank/src/services/dashboard/dashboard-service.test.ts +28 -1
- package/templates/blank/src/services/dashboard/dashboard-service.ts +2 -0
- package/templates/blank/src/services/locator/locator-service.test.ts +1 -3
- package/templates/blank/src/services/locator/locator-service.ts +3 -1
- package/templates/blank/src/services/locator/locator-sync-utils.test.ts +1 -4
- package/templates/blank/src/services/module/module-service.ts +1 -4
- package/templates/blank/src/services/report/report-service.test.ts +70 -6
- package/templates/blank/src/services/report/report-service.ts +52 -9
- package/templates/blank/src/services/shared/errors.ts +2 -4
- package/templates/blank/src/services/template-step/template-step-service.ts +3 -1
- package/templates/blank/src/services/template-step-group/template-step-group-service.ts +3 -1
- package/templates/blank/src/services/test-case/test-case-service.ts +0 -5
- package/templates/blank/src/services/test-run/test-run-service.test.ts +3 -6
- package/templates/blank/src/services/test-run/test-run-service.ts +12 -7
- package/templates/blank/src/services/test-suite/test-suite-service.test.ts +1 -5
- package/templates/blank/src/services/test-suite/test-suite-service.ts +2 -4
- package/templates/blank/src/types/form/actionHandler.ts +1 -5
- package/templates/blank/tsconfig.json +8 -8
- package/templates/default/packages/locator-picker-companion/dist/cli.d.ts +1 -1
- package/templates/default/packages/locator-picker-companion/dist/cli.js +313 -279
- package/templates/default/packages/locator-picker-companion/dist/index.d.ts +3 -3
- package/templates/default/packages/locator-picker-companion/dist/index.js +3 -3
- package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.d.ts +1 -1
- package/templates/default/packages/locator-picker-companion/dist/injected-picker-script.js +526 -481
- package/templates/default/packages/locator-picker-companion/dist/launcher.d.ts +13 -10
- package/templates/default/packages/locator-picker-companion/dist/launcher.js +47 -48
- package/templates/default/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
- package/templates/default/packages/locator-picker-companion/dist/selector-generator.js +233 -229
- package/templates/default/packages/locator-picker-companion/dist/session-file.d.ts +30 -22
- package/templates/default/packages/locator-picker-companion/dist/session-file.js +116 -104
- package/templates/default/packages/locator-picker-companion/dist/types.d.ts +25 -25
- package/templates/default/packages/locator-picker-companion/dist/types.js +1 -1
- package/templates/starter/.editorconfig +11 -0
- package/templates/starter/.gitattributes +21 -0
- package/templates/starter/.gitconfig.appraise +14 -0
- package/templates/starter/.prettierrc +13 -0
- package/templates/starter/.vscode/settings.json +2 -0
- package/templates/starter/README.md +12 -12
- package/templates/starter/automation/steps/actions/click.step.ts +56 -58
- package/templates/starter/automation/steps/actions/hover.step.ts +25 -27
- package/templates/starter/automation/steps/actions/input.step.ts +85 -108
- package/templates/starter/automation/steps/actions/navigation.step.ts +67 -70
- package/templates/starter/automation/steps/actions/random_data.step.ts +149 -143
- package/templates/starter/automation/steps/actions/store.step.ts +69 -1
- package/templates/starter/automation/steps/actions/wait.step.ts +84 -1
- package/templates/starter/automation/steps/validations/active_state_assertion.step.ts +28 -30
- package/templates/starter/automation/steps/validations/navigation_assertion.step.ts +20 -22
- package/templates/starter/automation/steps/validations/text_assertion.step.ts +67 -107
- package/templates/starter/automation/steps/validations/visibility_assertion.step.ts +24 -26
- package/templates/starter/components.json +24 -24
- package/templates/starter/cucumber.mjs +16 -16
- package/templates/starter/e2e/README.md +56 -0
- package/templates/starter/e2e/apply-migrations.mjs +76 -0
- package/templates/starter/e2e/appraise-smoke.spec.ts +78 -0
- package/templates/starter/e2e/authoring.spec.ts +53 -0
- package/templates/starter/e2e/crud-configuration.spec.ts +138 -0
- package/templates/starter/e2e/crud-tests.spec.ts +76 -0
- package/templates/starter/e2e/helpers/forms.ts +186 -0
- package/templates/starter/e2e/helpers/navigation.ts +27 -0
- package/templates/starter/e2e/helpers/table.ts +45 -0
- package/templates/starter/e2e/helpers/test-data.ts +549 -0
- package/templates/starter/e2e/helpers/ui.ts +41 -0
- package/templates/starter/e2e/navigation.spec.ts +101 -0
- package/templates/starter/e2e/runs-and-reports.spec.ts +82 -0
- package/templates/starter/e2e/settings-sync.spec.ts +39 -0
- package/templates/starter/e2e/start-server.mjs +61 -0
- package/templates/starter/eslint.config.mjs +4 -4
- package/templates/starter/gitignore +0 -3
- package/templates/starter/next-env.d.ts +1 -1
- package/templates/starter/package-lock.json +58 -102
- package/templates/starter/package.json +10 -9
- package/templates/starter/packages/cucumber-runtime/package.json +13 -13
- package/templates/starter/packages/cucumber-runtime/src/cache.util.ts +93 -93
- package/templates/starter/packages/cucumber-runtime/src/cli.ts +77 -68
- package/templates/starter/packages/cucumber-runtime/src/environment.util.ts +21 -21
- package/templates/starter/packages/cucumber-runtime/src/executor.ts +32 -32
- package/templates/starter/packages/cucumber-runtime/src/index.ts +17 -17
- package/templates/starter/packages/cucumber-runtime/src/locator.util.ts +234 -234
- package/templates/starter/packages/cucumber-runtime/src/parameter-types.ts +7 -7
- package/templates/starter/packages/cucumber-runtime/src/random-data.util.ts +35 -35
- package/templates/starter/packages/cucumber-runtime/src/types.ts +13 -13
- package/templates/starter/packages/cucumber-runtime/src/world.ts +44 -44
- package/templates/starter/packages/cucumber-runtime/tsconfig.json +11 -11
- package/templates/starter/packages/locator-picker-companion/dist/cli.js +1 -1
- package/templates/starter/packages/locator-picker-companion/dist/index.d.ts +3 -3
- package/templates/starter/packages/locator-picker-companion/dist/index.js +3 -3
- package/templates/starter/packages/locator-picker-companion/dist/injected-picker-script.js +13 -3
- package/templates/starter/packages/locator-picker-companion/dist/selector-generator.d.ts +6 -3
- package/templates/starter/packages/locator-picker-companion/dist/selector-generator.js +233 -229
- package/templates/starter/packages/locator-picker-companion/src/cli.ts +1 -7
- package/templates/starter/packages/locator-picker-companion/src/injected-picker-script.ts +26 -5
- package/templates/starter/packages/locator-picker-companion/src/launcher.ts +1 -3
- package/templates/starter/packages/locator-picker-companion/src/session-file.ts +4 -15
- package/templates/starter/packages/locator-picker-companion/src/types.ts +1 -8
- package/templates/starter/playwright.config.ts +46 -0
- package/templates/starter/postcss.config.mjs +8 -8
- package/templates/starter/prisma/dev.db +0 -0
- package/templates/starter/scripts/configure-git-line-endings.mjs +91 -0
- package/templates/starter/scripts/install-template-step.ts +5 -1
- package/templates/starter/scripts/lib/step-matcher.test.ts +3 -3
- package/templates/starter/scripts/lib/step-matcher.ts +5 -1
- package/templates/starter/scripts/lib/template-step-installer.test.ts +4 -2
- package/templates/starter/scripts/lib/template-step-installer.ts +16 -4
- package/templates/starter/scripts/lib/template-step-registry.test.ts +1 -1
- package/templates/starter/scripts/lib/template-step-registry.ts +4 -1
- package/templates/starter/scripts/run-fallow-commit.mjs +4 -6
- package/templates/starter/scripts/sync-all.ts +7 -6
- package/templates/starter/scripts/sync-appraise-base-template.ts +84 -77
- package/templates/starter/scripts/sync-environments.ts +47 -44
- package/templates/starter/scripts/sync-locator-groups.ts +67 -76
- package/templates/starter/scripts/sync-locators.ts +50 -53
- package/templates/starter/scripts/sync-modules.ts +42 -42
- package/templates/starter/scripts/sync-tags.ts +51 -51
- package/templates/starter/scripts/sync-template-step-groups.ts +34 -32
- package/templates/starter/scripts/sync-template-steps.ts +97 -97
- package/templates/starter/scripts/sync-test-cases.ts +65 -74
- package/templates/starter/scripts/sync-test-suites.ts +85 -80
- package/templates/starter/src/actions/server-action-boundary.test.ts +1 -7
- package/templates/starter/src/actions/settings/sync-actions.ts +3 -1
- package/templates/starter/src/actions/tags/tag-actions.ts +1 -7
- package/templates/starter/src/actions/template-test-case/template-test-case-actions.ts +3 -1
- package/templates/starter/src/app/(base)/environments/create/page.tsx +28 -28
- package/templates/starter/src/app/(base)/environments/environment-form.tsx +3 -2
- package/templates/starter/src/app/(base)/environments/environment-helpers.ts +4 -1
- package/templates/starter/src/app/(base)/layout.tsx +10 -10
- package/templates/starter/src/app/(base)/locator-groups/locator-group-form.tsx +5 -3
- package/templates/starter/src/app/(base)/locator-groups/locator-group-table-columns.tsx +77 -77
- package/templates/starter/src/app/(base)/locator-groups/locator-group-table.tsx +28 -28
- package/templates/starter/src/app/(base)/locator-groups/modify/[id]/page.tsx +46 -46
- package/templates/starter/src/app/(base)/locator-groups/page.tsx +9 -19
- package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-helpers.test.ts +3 -6
- package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-response.ts +22 -5
- package/templates/starter/src/app/(base)/locators/create/create-locator-workspace-state.ts +5 -1
- package/templates/starter/src/app/(base)/locators/create/use-locator-workspace.ts +7 -2
- package/templates/starter/src/app/(base)/locators/locator-file-sync.ts +1 -5
- package/templates/starter/src/app/(base)/locators/locator-helpers.ts +2 -12
- package/templates/starter/src/app/(base)/locators/locator-table-columns.tsx +59 -60
- package/templates/starter/src/app/(base)/modules/module-form.tsx +3 -1
- package/templates/starter/src/app/(base)/reports/overview-chart.tsx +49 -49
- package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table-columns.tsx +114 -115
- package/templates/starter/src/app/(base)/reports/test-cases/test-cases-metric-table.tsx +27 -27
- package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table-columns.tsx +80 -79
- package/templates/starter/src/app/(base)/reports/test-suites/test-suites-metric-table.tsx +29 -27
- package/templates/starter/src/app/(base)/settings/settings-sync-panel-helpers.test.tsx +4 -6
- package/templates/starter/src/app/(base)/settings/settings-sync-panel.tsx +22 -23
- package/templates/starter/src/app/(base)/tags/tag-form.test.tsx +2 -10
- package/templates/starter/src/app/(base)/tags/tag-form.tsx +5 -3
- package/templates/starter/src/app/(base)/tags/tag-table-columns.tsx +63 -63
- package/templates/starter/src/app/(base)/tags/tag-table.tsx +29 -29
- package/templates/starter/src/app/(base)/template-step-groups/create/page.tsx +28 -28
- package/templates/starter/src/app/(base)/template-step-groups/template-step-group-form.tsx +3 -1
- package/templates/starter/src/app/(base)/template-step-groups/template-step-group-helpers.ts +4 -1
- package/templates/starter/src/app/(base)/template-steps/paramChip.tsx +6 -10
- package/templates/starter/src/app/(base)/template-steps/template-step-form-helpers.ts +4 -2
- package/templates/starter/src/app/(base)/template-steps/template-step-helpers.test.ts +19 -1
- package/templates/starter/src/app/(base)/template-steps/template-step-helpers.ts +1 -5
- package/templates/starter/src/app/(base)/template-steps/template-step-row-guards.ts +1 -5
- package/templates/starter/src/app/(base)/template-steps/template-step-types.ts +1 -5
- package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.test.ts +4 -1
- package/templates/starter/src/app/(base)/template-test-cases/create-template-test-case-page-data.ts +1 -2
- package/templates/starter/src/app/(base)/template-test-cases/modify/[id]/page.tsx +1 -0
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-flow.test.tsx +0 -1
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-form.tsx +3 -1
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table-columns.tsx +76 -76
- package/templates/starter/src/app/(base)/template-test-cases/template-test-case-table.tsx +32 -32
- package/templates/starter/src/app/(base)/test-cases/create/page.tsx +1 -5
- package/templates/starter/src/app/(base)/test-cases/create-from-template/create-from-template-selection-helpers.ts +1 -4
- package/templates/starter/src/app/(base)/test-cases/create-from-template/page.test.tsx +2 -2
- package/templates/starter/src/app/(base)/test-cases/inline-tag-creation-dialog.tsx +1 -7
- package/templates/starter/src/app/(base)/test-cases/inline-test-suite-creation-dialog.tsx +1 -7
- package/templates/starter/src/app/(base)/test-cases/modify/[id]/page.tsx +1 -5
- package/templates/starter/src/app/(base)/test-cases/test-case-form.tsx +63 -78
- package/templates/starter/src/app/(base)/test-cases/test-case-route-helpers.test.ts +2 -7
- package/templates/starter/src/app/(base)/test-suites/editable-test-suite-helpers.ts +1 -6
- package/templates/starter/src/app/(base)/test-suites/test-suite-form.test.tsx +2 -10
- package/templates/starter/src/app/(dashboard-components)/data-card-grid.tsx +10 -10
- package/templates/starter/src/app/api/test-runs/[runId]/download/route.ts +1 -4
- package/templates/starter/src/app/api/test-runs/[runId]/trace/[testCaseId]/route.test.ts +18 -9
- package/templates/starter/src/assets/icons/empty-tube.tsx +23 -23
- package/templates/starter/src/assets/icons/tube-plus.tsx +29 -29
- package/templates/starter/src/components/data-visualization/info-card.tsx +56 -70
- package/templates/starter/src/components/data-visualization/info-grid.tsx +22 -22
- package/templates/starter/src/components/diagram/add-node-prompt-node.tsx +1 -1
- package/templates/starter/src/components/diagram/dynamic-parameters-helpers.ts +4 -3
- package/templates/starter/src/components/diagram/dynamic-parameters.test.tsx +4 -1
- package/templates/starter/src/components/diagram/dynamic-parameters.tsx +0 -1
- package/templates/starter/src/components/diagram/flow-diagram-block-dialog.test.tsx +26 -0
- package/templates/starter/src/components/diagram/flow-diagram-block-dialog.tsx +3 -1
- package/templates/starter/src/components/diagram/flow-diagram-connection-guards.ts +24 -6
- package/templates/starter/src/components/diagram/flow-diagram-helpers.test.ts +27 -0
- package/templates/starter/src/components/diagram/flow-diagram-node-search.tsx +65 -65
- package/templates/starter/src/components/diagram/flow-diagram-toolbar.tsx +1 -3
- package/templates/starter/src/components/diagram/flow-diagram-view.tsx +1 -7
- package/templates/starter/src/components/diagram/flow-node-data-helpers.ts +1 -1
- package/templates/starter/src/components/diagram/node-form-fields-content.tsx +9 -2
- package/templates/starter/src/components/diagram/node-form-helpers.test.ts +3 -1
- package/templates/starter/src/components/diagram/node-form-helpers.ts +1 -4
- package/templates/starter/src/components/diagram/node-form-template-step-selection.ts +1 -4
- package/templates/starter/src/components/diagram/node-form.test.tsx +25 -0
- package/templates/starter/src/components/diagram/node-form.tsx +2 -12
- package/templates/starter/src/components/diagram/options-header-node.test.tsx +4 -1
- package/templates/starter/src/components/diagram/options-header-node.tsx +140 -130
- package/templates/starter/src/components/diagram/use-flow-diagram.ts +1 -2
- package/templates/starter/src/components/form/error-message.tsx +7 -7
- package/templates/starter/src/components/loading-skeleton/form/button-skeleton.tsx +8 -8
- package/templates/starter/src/components/loading-skeleton/form/text-input-skeleton.tsx +8 -8
- package/templates/starter/src/components/loading-skeleton/visualization/table-skeleton.tsx +14 -14
- package/templates/starter/src/components/navigation/entity-search-command.tsx +3 -9
- package/templates/starter/src/components/navigation/nav-link.tsx +60 -60
- package/templates/starter/src/components/test-case/test-case-form-helpers.test.ts +1 -5
- package/templates/starter/src/components/test-case/test-case-form-helpers.ts +1 -5
- package/templates/starter/src/components/test-case/test-case-picker-helpers.ts +8 -7
- package/templates/starter/src/components/test-case/test-case-picker.tsx +2 -6
- package/templates/starter/src/components/test-run/log-viewer.test.tsx +25 -0
- package/templates/starter/src/components/test-run/log-viewer.tsx +2 -2
- package/templates/starter/src/components/test-run/test-run-details-guards.ts +10 -1
- package/templates/starter/src/components/test-run/test-run-details.test.tsx +9 -19
- package/templates/starter/src/components/test-run/use-log-viewer.ts +2 -8
- package/templates/starter/src/components/test-run/use-test-run-header.ts +1 -4
- package/templates/starter/src/components/test-suite/test-suite-picker.tsx +1 -1
- package/templates/starter/src/components/theme/theme-provider.tsx +7 -1
- package/templates/starter/src/components/typography/page-header-subtitle.tsx +7 -7
- package/templates/starter/src/components/typography/page-header.tsx +7 -7
- package/templates/starter/src/components/ui/chart.tsx +2 -8
- package/templates/starter/src/components/ui/command.tsx +2 -5
- package/templates/starter/src/components/ui/data-table-column-header.tsx +3 -3
- package/templates/starter/src/components/ui/data-table.test.tsx +1 -8
- package/templates/starter/src/components/ui/dialog.tsx +1 -4
- package/templates/starter/src/components/ui/select.tsx +2 -2
- package/templates/starter/src/components/ui/separator.tsx +5 -1
- package/templates/starter/src/components/ui/skeleton.tsx +7 -7
- package/templates/starter/src/components/ui/table.tsx +1 -1
- package/templates/starter/src/components/ui/toaster.tsx +26 -26
- package/templates/starter/src/components/ui/tooltip.tsx +1 -1
- package/templates/starter/src/constants/form-opts/locator-group-form-opts.ts +1 -1
- package/templates/starter/src/lib/locator-group-file-utils.ts +5 -1
- package/templates/starter/src/lib/locator-picker/session-manager.ts +1 -2
- package/templates/starter/src/lib/metrics/metric-calculator.test.ts +105 -6
- package/templates/starter/src/lib/metrics/metric-calculator.ts +39 -40
- package/templates/starter/src/lib/sync/sync-executor.ts +1 -4
- package/templates/starter/src/lib/sync/sync-pending-counts.test.ts +201 -7
- package/templates/starter/src/lib/sync/sync-pending-counts.ts +81 -13
- package/templates/starter/src/lib/template-automation-paths.ts +1 -1
- package/templates/starter/src/lib/template-sync-utils.d.ts +14 -7
- package/templates/starter/src/lib/test-case-utils.ts +6 -6
- package/templates/starter/src/lib/test-run/log-formatter.ts +82 -83
- package/templates/starter/src/lib/test-run/report-parser.ts +352 -352
- package/templates/starter/src/lib/transformers/gherkin-converter.ts +42 -42
- package/templates/starter/src/lib/transformers/key-to-icon-transformer.tsx +95 -95
- package/templates/starter/src/lib/utils/node-param-validation.ts +81 -81
- package/templates/starter/src/lib/utils/template-step-file-generator.ts +5 -3
- package/templates/starter/src/lib/utils/template-step-file-manager-intelligent.ts +11 -1
- package/templates/starter/src/services/dashboard/dashboard-service.test.ts +28 -1
- package/templates/starter/src/services/dashboard/dashboard-service.ts +2 -0
- package/templates/starter/src/services/locator/locator-service.test.ts +1 -3
- package/templates/starter/src/services/locator/locator-service.ts +3 -1
- package/templates/starter/src/services/locator/locator-sync-utils.test.ts +1 -4
- package/templates/starter/src/services/module/module-service.ts +1 -4
- package/templates/starter/src/services/report/report-service.test.ts +70 -6
- package/templates/starter/src/services/report/report-service.ts +52 -9
- package/templates/starter/src/services/shared/errors.ts +2 -4
- package/templates/starter/src/services/template-step/template-step-service.ts +3 -1
- package/templates/starter/src/services/template-step-group/template-step-group-service.ts +3 -1
- package/templates/starter/src/services/test-case/test-case-service.ts +0 -5
- package/templates/starter/src/services/test-run/test-run-service.test.ts +3 -6
- package/templates/starter/src/services/test-run/test-run-service.ts +12 -7
- package/templates/starter/src/services/test-suite/test-suite-service.test.ts +1 -5
- package/templates/starter/src/services/test-suite/test-suite-service.ts +2 -4
- package/templates/starter/src/types/form/actionHandler.ts +1 -5
- package/templates/starter/tsconfig.json +8 -8
|
@@ -101,9 +101,7 @@ function getEnvironmentIdentityKey(name: string): string {
|
|
|
101
101
|
* Builds Environment objects from JSON content
|
|
102
102
|
* Maps JSON structure to Prisma Environment model
|
|
103
103
|
*/
|
|
104
|
-
function buildEnvironmentObjects(
|
|
105
|
-
jsonContent: Record<string, EnvironmentConfig>,
|
|
106
|
-
): EnvironmentData[] {
|
|
104
|
+
function buildEnvironmentObjects(jsonContent: Record<string, EnvironmentConfig>): EnvironmentData[] {
|
|
107
105
|
const environments: EnvironmentData[] = []
|
|
108
106
|
|
|
109
107
|
for (const [key, config] of Object.entries(jsonContent)) {
|
|
@@ -162,7 +160,14 @@ async function syncEnvironmentsToDatabase(environments: EnvironmentData[]): Prom
|
|
|
162
160
|
// Create a case-insensitive map: normalized name -> actual DB name
|
|
163
161
|
const dbEnvironmentsByNormalizedName = new Map<
|
|
164
162
|
string,
|
|
165
|
-
{
|
|
163
|
+
{
|
|
164
|
+
id: string
|
|
165
|
+
name: string
|
|
166
|
+
baseUrl: string
|
|
167
|
+
apiBaseUrl: string | null
|
|
168
|
+
username: string | null
|
|
169
|
+
password: string | null
|
|
170
|
+
}
|
|
166
171
|
>()
|
|
167
172
|
for (const dbEnv of allDbEnvironments) {
|
|
168
173
|
const normalizedName = getEnvironmentIdentityKey(dbEnv.name)
|
|
@@ -260,46 +265,44 @@ async function syncEnvironmentsToDatabase(environments: EnvironmentData[]): Prom
|
|
|
260
265
|
* Generates and displays sync summary
|
|
261
266
|
*/
|
|
262
267
|
async function main(): Promise<SyncResult> {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
268
|
+
console.log('š Starting environments sync...')
|
|
269
|
+
console.log('This will scan environments.json and sync environments to database.\n')
|
|
270
|
+
|
|
271
|
+
await ensureAutomationWorkspaceReady()
|
|
272
|
+
|
|
273
|
+
// Read environments from file
|
|
274
|
+
console.log('š Reading environments.json...')
|
|
275
|
+
const jsonContent = await readEnvironmentsFromFile()
|
|
276
|
+
const environmentKeys = Object.keys(jsonContent)
|
|
277
|
+
console.log(` Found ${environmentKeys.length} environment(s): ${environmentKeys.join(', ') || 'none'}`)
|
|
278
|
+
|
|
279
|
+
// Build environment objects
|
|
280
|
+
console.log('\nš Building environment objects...')
|
|
281
|
+
const environments = buildEnvironmentObjects(jsonContent)
|
|
282
|
+
console.log(` Built ${environments.length} environment object(s)`)
|
|
283
|
+
|
|
284
|
+
// Sync to database
|
|
285
|
+
console.log('\nā
Syncing environments to database...')
|
|
286
|
+
const result = await syncEnvironmentsToDatabase(environments)
|
|
287
|
+
|
|
288
|
+
printSyncSummary(
|
|
289
|
+
[
|
|
290
|
+
{ label: 'š Environments scanned', value: result.environmentsScanned },
|
|
291
|
+
{ label: 'ā
Environments existing', value: result.environmentsExisting },
|
|
292
|
+
{ label: 'ā Environments created', value: result.environmentsCreated },
|
|
293
|
+
{ label: 'šļø Environments deleted', value: result.environmentsDeleted },
|
|
294
|
+
{ label: 'ā ļø Environments skipped', value: result.environmentsSkipped },
|
|
295
|
+
{ label: 'ā Errors', value: result.errors.length },
|
|
296
|
+
],
|
|
297
|
+
[
|
|
298
|
+
{ title: 'Created environments', items: result.createdEnvironments },
|
|
299
|
+
{ title: 'Existing environments', items: result.existingEnvironments },
|
|
300
|
+
{ title: 'Deleted environments', items: result.deletedEnvironments },
|
|
301
|
+
{ title: 'Skipped environments (have test runs)', items: result.skippedEnvironments },
|
|
302
|
+
{ title: 'Errors', items: result.errors },
|
|
303
|
+
],
|
|
304
|
+
)
|
|
305
|
+
return result
|
|
301
306
|
}
|
|
302
307
|
|
|
303
308
|
runSyncScript(main)
|
|
304
|
-
|
|
305
|
-
|
|
@@ -115,10 +115,7 @@ function buildLocatorMapRouteMap(locatorMap: LocatorMapEntry[]): Map<string, str
|
|
|
115
115
|
* Builds locator groups from filesystem
|
|
116
116
|
* Combines information from locator-map.json and directory structure
|
|
117
117
|
*/
|
|
118
|
-
async function buildLocatorGroupsFromFS(
|
|
119
|
-
baseDir: string,
|
|
120
|
-
locatorMap: LocatorMapEntry[],
|
|
121
|
-
): Promise<LocatorGroupFromFS[]> {
|
|
118
|
+
async function buildLocatorGroupsFromFS(baseDir: string, locatorMap: LocatorMapEntry[]): Promise<LocatorGroupFromFS[]> {
|
|
122
119
|
const locatorGroups: LocatorGroupFromFS[] = []
|
|
123
120
|
const routeMap = buildLocatorMapRouteMap(locatorMap)
|
|
124
121
|
|
|
@@ -201,10 +198,7 @@ async function createOrUpdateLocatorGroup(
|
|
|
201
198
|
/**
|
|
202
199
|
* Syncs locator groups from filesystem to database
|
|
203
200
|
*/
|
|
204
|
-
async function syncLocatorGroupsToDatabase(
|
|
205
|
-
locatorGroups: LocatorGroupFromFS[],
|
|
206
|
-
result: SyncResult,
|
|
207
|
-
): Promise<void> {
|
|
201
|
+
async function syncLocatorGroupsToDatabase(locatorGroups: LocatorGroupFromFS[], result: SyncResult): Promise<void> {
|
|
208
202
|
console.log('\nā
Syncing locator groups to database...')
|
|
209
203
|
|
|
210
204
|
for (const locatorGroup of locatorGroups) {
|
|
@@ -230,10 +224,7 @@ async function syncLocatorGroupsToDatabase(
|
|
|
230
224
|
/**
|
|
231
225
|
* Deletes orphaned locator groups (groups in DB but not in FS)
|
|
232
226
|
*/
|
|
233
|
-
async function deleteOrphanedLocatorGroups(
|
|
234
|
-
fsLocatorGroupNames: Set<string>,
|
|
235
|
-
result: SyncResult,
|
|
236
|
-
): Promise<void> {
|
|
227
|
+
async function deleteOrphanedLocatorGroups(fsLocatorGroupNames: Set<string>, result: SyncResult): Promise<void> {
|
|
237
228
|
console.log('\nš Checking for orphaned locator groups (not in filesystem)...')
|
|
238
229
|
|
|
239
230
|
try {
|
|
@@ -287,72 +278,72 @@ async function deleteOrphanedLocatorGroups(
|
|
|
287
278
|
* Generates and displays sync summary
|
|
288
279
|
*/
|
|
289
280
|
async function main(): Promise<SyncResult> {
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
281
|
+
console.log('š Starting locator groups sync...')
|
|
282
|
+
console.log('This will scan filesystem directories and sync locator groups to database.')
|
|
283
|
+
console.log('Filesystem is the source of truth - locator groups in DB but not in FS will be deleted.\n')
|
|
284
|
+
|
|
285
|
+
const baseDir = process.cwd()
|
|
286
|
+
|
|
287
|
+
// Initialize result
|
|
288
|
+
const result: SyncResult = {
|
|
289
|
+
locatorGroupsScanned: 0,
|
|
290
|
+
locatorGroupsExisting: 0,
|
|
291
|
+
locatorGroupsCreated: 0,
|
|
292
|
+
locatorGroupsUpdated: 0,
|
|
293
|
+
locatorGroupsDeleted: 0,
|
|
294
|
+
errors: [],
|
|
295
|
+
createdLocatorGroups: [],
|
|
296
|
+
updatedLocatorGroups: [],
|
|
297
|
+
deletedLocatorGroups: [],
|
|
298
|
+
}
|
|
308
299
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
300
|
+
// Read locator map
|
|
301
|
+
console.log('š Reading locator-map.json...')
|
|
302
|
+
const locatorMap = await readLocatorMap(baseDir)
|
|
303
|
+
console.log(` Found ${locatorMap.length} entry(ies) in locator map`)
|
|
304
|
+
|
|
305
|
+
// Build locator groups from filesystem
|
|
306
|
+
console.log('\nš Scanning automation/locators directory...')
|
|
307
|
+
const locatorGroups = await buildLocatorGroupsFromFS(baseDir, locatorMap)
|
|
308
|
+
result.locatorGroupsScanned = locatorGroups.length
|
|
309
|
+
console.log(` Found ${locatorGroups.length} locator group(s) in filesystem`)
|
|
310
|
+
|
|
311
|
+
if (locatorGroups.length > 0) {
|
|
312
|
+
console.log('\n Locator groups found:')
|
|
313
|
+
locatorGroups.forEach((group, index) => {
|
|
314
|
+
console.log(` ${index + 1}. ${group.name} (route: ${group.route}, module: ${group.modulePath})`)
|
|
315
|
+
})
|
|
316
|
+
}
|
|
326
317
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
318
|
+
// Sync to database
|
|
319
|
+
await syncLocatorGroupsToDatabase(locatorGroups, result)
|
|
320
|
+
|
|
321
|
+
// Delete orphaned locator groups
|
|
322
|
+
const fsLocatorGroupNames = new Set(locatorGroups.map(g => g.name))
|
|
323
|
+
await deleteOrphanedLocatorGroups(fsLocatorGroupNames, result)
|
|
324
|
+
|
|
325
|
+
printSyncSummary(
|
|
326
|
+
[
|
|
327
|
+
{ label: 'š Locator groups scanned', value: result.locatorGroupsScanned },
|
|
328
|
+
{ label: 'ā
Locator groups existing', value: result.locatorGroupsExisting },
|
|
329
|
+
{ label: 'ā Locator groups created', value: result.locatorGroupsCreated },
|
|
330
|
+
{ label: 'š Locator groups updated', value: result.locatorGroupsUpdated },
|
|
331
|
+
{ label: 'šļø Locator groups deleted', value: result.locatorGroupsDeleted },
|
|
332
|
+
{ label: 'ā Errors', value: result.errors.length },
|
|
333
|
+
],
|
|
334
|
+
[
|
|
335
|
+
{ title: 'Created locator groups', items: result.createdLocatorGroups },
|
|
336
|
+
{ title: 'Updated locator groups', items: result.updatedLocatorGroups },
|
|
337
|
+
{
|
|
338
|
+
title: 'Deleted locator groups',
|
|
339
|
+
items: result.deletedLocatorGroups.map(
|
|
340
|
+
group => `${group.name} (${group.locatorCount} locator(s) cascade deleted)`,
|
|
341
|
+
),
|
|
342
|
+
},
|
|
343
|
+
{ title: 'Errors', items: result.errors },
|
|
344
|
+
],
|
|
345
|
+
)
|
|
346
|
+
return result
|
|
356
347
|
}
|
|
357
348
|
|
|
358
349
|
runSyncScript(main)
|
|
@@ -78,10 +78,7 @@ async function readLocatorFile(filePath: string): Promise<Record<string, string>
|
|
|
78
78
|
/**
|
|
79
79
|
* Finds or creates a LocatorGroup
|
|
80
80
|
*/
|
|
81
|
-
async function findOrCreateLocatorGroup(
|
|
82
|
-
groupName: string,
|
|
83
|
-
moduleId: string,
|
|
84
|
-
): Promise<string> {
|
|
81
|
+
async function findOrCreateLocatorGroup(groupName: string, moduleId: string): Promise<string> {
|
|
85
82
|
// Try to find existing locator group
|
|
86
83
|
const existingGroup = await prisma.locatorGroup.findFirst({
|
|
87
84
|
where: {
|
|
@@ -129,7 +126,7 @@ async function syncLocatorsFromFile(
|
|
|
129
126
|
|
|
130
127
|
// Find or create locator group
|
|
131
128
|
const locatorGroupId = await findOrCreateLocatorGroup(groupName, moduleId)
|
|
132
|
-
|
|
129
|
+
|
|
133
130
|
// Track this group as processed (has a file)
|
|
134
131
|
processedGroupIds.add(locatorGroupId)
|
|
135
132
|
|
|
@@ -208,7 +205,7 @@ async function deleteOrphanedLocatorGroups(
|
|
|
208
205
|
result: SyncResult,
|
|
209
206
|
): Promise<void> {
|
|
210
207
|
console.log('\nš Checking for orphaned locator groups (no file in filesystem)...')
|
|
211
|
-
|
|
208
|
+
|
|
212
209
|
try {
|
|
213
210
|
// Get all locator groups from database
|
|
214
211
|
const allLocatorGroups = await prisma.locatorGroup.findMany({
|
|
@@ -292,57 +289,57 @@ async function syncLocatorsToDatabase(files: string[], baseDir: string): Promise
|
|
|
292
289
|
* Generates and displays sync summary
|
|
293
290
|
*/
|
|
294
291
|
async function main(): Promise<SyncResult | void> {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
292
|
+
console.log('š Starting locators sync...')
|
|
293
|
+
console.log('This will scan locator JSON files and sync locators to database.')
|
|
294
|
+
console.log('Filesystem is the source of truth - locators in DB but not in FS will be deleted.\n')
|
|
298
295
|
|
|
299
|
-
|
|
296
|
+
const baseDir = process.cwd()
|
|
300
297
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
298
|
+
// Scan locator files
|
|
299
|
+
console.log('š Scanning automation/locators...')
|
|
300
|
+
const files = await scanLocatorFiles(baseDir)
|
|
301
|
+
console.log(` Found ${files.length} locator file(s)`)
|
|
305
302
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
303
|
+
if (files.length === 0) {
|
|
304
|
+
console.log('\nā ļø No locator files found. Nothing to sync.')
|
|
305
|
+
return
|
|
306
|
+
}
|
|
310
307
|
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
308
|
+
// Sync to database
|
|
309
|
+
console.log('\nā
Syncing locators to database...')
|
|
310
|
+
const result = await syncLocatorsToDatabase(files, baseDir)
|
|
311
|
+
|
|
312
|
+
printSyncSummary(
|
|
313
|
+
[
|
|
314
|
+
{ label: 'š Locators scanned', value: result.locatorsScanned },
|
|
315
|
+
{ label: 'ā
Locators existing', value: result.locatorsExisting },
|
|
316
|
+
{ label: 'ā Locators created', value: result.locatorsCreated },
|
|
317
|
+
{ label: 'š Locators updated', value: result.locatorsUpdated },
|
|
318
|
+
{ label: 'šļø Locators deleted', value: result.locatorsDeleted },
|
|
319
|
+
{ label: 'šļø Locator groups deleted', value: result.locatorGroupsDeleted },
|
|
320
|
+
{ label: 'ā Errors', value: result.errors.length },
|
|
321
|
+
],
|
|
322
|
+
[
|
|
323
|
+
{
|
|
324
|
+
title: 'Created locators',
|
|
325
|
+
items: result.createdLocators.map(loc => `${loc.name} (group: ${loc.group})`),
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
title: 'Updated locators',
|
|
329
|
+
items: result.updatedLocators.map(loc => `${loc.name} (group: ${loc.group})`),
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
title: 'Deleted locators',
|
|
333
|
+
items: result.deletedLocators.map(loc => `${loc.name} (group: ${loc.group})`),
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
title: 'Deleted locator groups',
|
|
337
|
+
items: result.deletedLocatorGroups.map(group => `${group.name} (${group.locatorCount} locator(s) deleted)`),
|
|
338
|
+
},
|
|
339
|
+
{ title: 'Errors', items: result.errors },
|
|
340
|
+
],
|
|
341
|
+
)
|
|
342
|
+
return result
|
|
346
343
|
}
|
|
347
344
|
|
|
348
345
|
runSyncScript(main)
|
|
@@ -248,55 +248,55 @@ async function deleteOrphanedModules(fsModulePaths: Set<string>, result: SyncRes
|
|
|
248
248
|
* Generates and displays sync summary
|
|
249
249
|
*/
|
|
250
250
|
async function main(): Promise<SyncResult> {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
console.log('š Starting modules sync...')
|
|
252
|
+
console.log('This will scan filesystem directories and sync module hierarchy to database.')
|
|
253
|
+
console.log('Filesystem is the source of truth - modules in DB but not in FS will be deleted.\n')
|
|
254
254
|
|
|
255
|
-
|
|
255
|
+
const baseDir = process.cwd()
|
|
256
256
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
257
|
+
// Scan directories
|
|
258
|
+
console.log('š Scanning automation/locators...')
|
|
259
|
+
const locatorModulePaths = await scanLocatorDirectories(baseDir)
|
|
260
|
+
console.log(` Found ${locatorModulePaths.length} module path(s): ${locatorModulePaths.join(', ') || 'none'}`)
|
|
261
261
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
262
|
+
console.log('\nš Scanning automation/features...')
|
|
263
|
+
const featureModulePaths = await scanFeatureDirectories(baseDir)
|
|
264
|
+
console.log(` Found ${featureModulePaths.length} module path(s): ${featureModulePaths.join(', ') || 'none'}`)
|
|
265
265
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
266
|
+
// Combine and deduplicate
|
|
267
|
+
const allModulePaths = Array.from(new Set([...locatorModulePaths, ...featureModulePaths]))
|
|
268
|
+
console.log(`\nš Building module hierarchy from ${allModulePaths.length} unique module path(s)...`)
|
|
269
269
|
|
|
270
|
-
|
|
271
|
-
|
|
270
|
+
// Build module tree
|
|
271
|
+
const moduleTree = buildModuleTree(allModulePaths)
|
|
272
272
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
273
|
+
// Sync to database (create missing modules)
|
|
274
|
+
console.log('\nā
Syncing modules to database...')
|
|
275
|
+
const result = await syncModulesToDatabase(moduleTree)
|
|
276
276
|
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
277
|
+
// Delete orphaned modules (modules in DB but not in FS)
|
|
278
|
+
const fsModulePathsSet = new Set(allModulePaths)
|
|
279
|
+
// Also add all parent paths from the tree
|
|
280
|
+
for (const path of moduleTree.keys()) {
|
|
281
|
+
fsModulePathsSet.add(path)
|
|
282
|
+
}
|
|
283
|
+
await deleteOrphanedModules(fsModulePathsSet, result)
|
|
284
|
+
|
|
285
|
+
printSyncSummary(
|
|
286
|
+
[
|
|
287
|
+
{ label: 'š Modules scanned', value: result.modulesScanned },
|
|
288
|
+
{ label: 'ā
Modules existing', value: result.modulesExisting },
|
|
289
|
+
{ label: 'ā Modules created', value: result.modulesCreated },
|
|
290
|
+
{ label: 'šļø Modules deleted', value: result.modulesDeleted },
|
|
291
|
+
{ label: 'ā Errors', value: result.errors.length },
|
|
292
|
+
],
|
|
293
|
+
[
|
|
294
|
+
{ title: 'Created modules', items: result.createdModules },
|
|
295
|
+
{ title: 'Deleted modules', items: result.deletedModules },
|
|
296
|
+
{ title: 'Errors', items: result.errors },
|
|
297
|
+
],
|
|
298
|
+
)
|
|
299
|
+
return result
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
runSyncScript(main)
|
|
@@ -191,65 +191,65 @@ async function syncTagsToDatabase(tagObjects: TagData[]): Promise<SyncResult> {
|
|
|
191
191
|
* Generates and displays sync summary
|
|
192
192
|
*/
|
|
193
193
|
async function main(): Promise<SyncResult | void> {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
194
|
+
console.log('š Starting tags sync...')
|
|
195
|
+
console.log('This will scan feature files and sync tags to database.')
|
|
196
|
+
console.log('Filesystem is the source of truth - tags in DB but not in FS will be deleted.\n')
|
|
197
197
|
|
|
198
|
-
|
|
199
|
-
|
|
198
|
+
const baseDir = process.cwd()
|
|
199
|
+
const featuresDir = join(baseDir, 'automation', 'features')
|
|
200
200
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
201
|
+
// Scan feature files
|
|
202
|
+
console.log('š Scanning feature files in automation/features...')
|
|
203
|
+
const parsedFeatures = await scanFeatureFiles(featuresDir)
|
|
204
|
+
console.log(` Found ${parsedFeatures.length} feature file(s)`)
|
|
205
205
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
if (parsedFeatures.length === 0) {
|
|
207
|
+
console.log('\nā ļø No feature files found. Nothing to sync.')
|
|
208
|
+
return
|
|
209
|
+
}
|
|
210
210
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
211
|
+
// Extract unique tags
|
|
212
|
+
console.log('\nš Extracting unique tags from feature files...')
|
|
213
|
+
const uniqueTagExpressions = extractUniqueTags(parsedFeatures)
|
|
214
|
+
console.log(` Found ${uniqueTagExpressions.size} unique tag(s)`)
|
|
215
215
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
if (uniqueTagExpressions.size === 0) {
|
|
217
|
+
console.log('\nā ļø No tags found in feature files. Nothing to sync.')
|
|
218
|
+
return
|
|
219
|
+
}
|
|
220
220
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
221
|
+
// Build tag objects
|
|
222
|
+
console.log('\nšØ Building tag objects...')
|
|
223
|
+
const tagObjects = buildTagObjects(uniqueTagExpressions)
|
|
224
|
+
console.log(` Built ${tagObjects.length} tag object(s)`)
|
|
225
225
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
226
|
+
// Log tag details
|
|
227
|
+
console.log('\n Tag details:')
|
|
228
|
+
for (const tag of tagObjects) {
|
|
229
|
+
console.log(` - ${tag.tagExpression} ā name: '${tag.name}', type: ${tag.type}`)
|
|
230
|
+
}
|
|
231
231
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
232
|
+
// Sync to database
|
|
233
|
+
const result = await syncTagsToDatabase(tagObjects)
|
|
234
|
+
|
|
235
|
+
printSyncSummary(
|
|
236
|
+
[
|
|
237
|
+
{ label: 'š Tags scanned', value: result.tagsScanned },
|
|
238
|
+
{ label: 'ā
Tags existing', value: result.tagsExisting },
|
|
239
|
+
{ label: 'ā Tags created', value: result.tagsCreated },
|
|
240
|
+
{ label: 'š Tags updated', value: result.tagsUpdated },
|
|
241
|
+
{ label: 'šļø Tags deleted', value: result.tagsDeleted },
|
|
242
|
+
{ label: 'ā Errors', value: result.errors.length },
|
|
243
|
+
],
|
|
244
|
+
[
|
|
245
|
+
{ title: 'Updated tags', items: result.updatedTags },
|
|
246
|
+
{ title: 'Created tags', items: result.createdTags },
|
|
247
|
+
{ title: 'Deleted tags', items: result.deletedTags },
|
|
248
|
+
{ title: 'Errors', items: result.errors },
|
|
249
|
+
],
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
return result
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
runSyncScript(main)
|