@thinkwise/testwise 0.2.67 → 0.2.103
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/Testwise.ts +35 -0
- package/artifact-builder/ArtifactManager.ts +25 -2
- package/artifact-builder/ComponentClassModelBuilder.ts +148 -0
- package/artifact-builder/InterfaceGenerator.ts +31 -33
- package/artifact-builder/ModelDataBuilder.ts +18 -20
- package/artifact-builder/ModelDataRefiner.ts +23 -3
- package/artifact-builder/SchemaGenerator.ts +45 -35
- package/artifact-builder/ScreenInterfaceRefiner.ts +25 -10
- package/artifact-builder/SelectorBuilder.ts +30 -24
- package/artifact-builder/SubjectClassModelBuilder.ts +209 -0
- package/artifact-builder/SubjectComponentGenerator.ts +67 -246
- package/artifact-builder/SubjectGenerator.ts +117 -230
- package/artifact-builder/SubjectRegistration.ts +41 -32
- package/artifact-builder/TsFileModel.ts +94 -0
- package/artifact-builder/TsFileSerializer.ts +247 -0
- package/artifact-builder/helpers/DataRetriever.ts +64 -27
- package/artifact-builder/helpers/NamingHandler.ts +23 -78
- package/artifact-builder/helpers/PipelinePaths.ts +123 -0
- package/artifact-builder/helpers/Stopwatch.ts +10 -0
- package/artifact-builder/helpers/index.ts +1 -0
- package/artifact-builder/index.ts +4 -0
- package/components/BaseComponentObjects.ts +17 -0
- package/components/action-bar/ActionBar.ts +35 -47
- package/components/action-bar/ActionBarObjects.ts +2 -0
- package/components/action-bar/CustomActionBar.ts +6 -0
- package/components/cardlist/Cardlist.ts +6 -0
- package/components/chart/Chart.ts +6 -0
- package/components/combined-filter/CombinedFilter.ts +9 -0
- package/components/cube-view-bar/CubeViewBar.ts +6 -0
- package/components/export/ExportComponent.ts +12 -0
- package/components/filter/ExcelStyleFilterPopup.ts +35 -2
- package/components/filter/FilterForm.ts +10 -0
- package/components/filter/FilterPopup.ts +30 -9
- package/components/filter/FilterPopupObjects.ts +10 -3
- package/components/filter/FindForm.ts +7 -0
- package/components/filter/ManagePrefilterPopup.ts +11 -0
- package/components/form/Form.ts +16 -0
- package/components/grid/Grid.ts +18 -1
- package/components/maps/Maps.ts +6 -0
- package/components/menu/ListBarMenuComponent.ts +10 -0
- package/components/pivot-grid/PivotGrid.ts +6 -0
- package/components/pivot-grid/PivotGridFieldList.ts +7 -0
- package/components/pop-up/AllRowsPopUp.ts +12 -0
- package/components/pop-up/PopUpComponent.ts +11 -0
- package/components/prefilter-list/PrefilterList.ts +9 -0
- package/components/preview/Preview.ts +6 -0
- package/components/report-bar/ReportBar.ts +6 -0
- package/components/report-tiles/ReportTiles.ts +6 -0
- package/components/scheduler/Scheduler.ts +6 -0
- package/components/snackbar/SnackBar.ts +12 -0
- package/components/splitter/Splitter.ts +6 -0
- package/components/tab/BaseTab.ts +5 -0
- package/components/tab/DetailTabPage.ts +11 -0
- package/components/tab/Tab.ts +10 -0
- package/components/task/TaskBar.ts +13 -3
- package/components/task/TaskTiles.ts +12 -3
- package/components/topbar/TopBar.ts +10 -0
- package/components/tree-view/TreeView.ts +9 -0
- package/controls/DateControl.ts +40 -1
- package/controls/FormComboBox.ts +30 -0
- package/controls/GridColumnControl.ts +34 -3
- package/controls/InputFieldControl.ts +49 -0
- package/controls/LookupDropdown.ts +29 -0
- package/dist/Testwise.js +35 -0
- package/dist/Testwise.js.map +1 -1
- package/dist/artifact-builder/ArtifactManager.d.ts +18 -1
- package/dist/artifact-builder/ArtifactManager.js +24 -2
- package/dist/artifact-builder/ArtifactManager.js.map +1 -1
- package/dist/artifact-builder/ComponentClassModelBuilder.d.ts +22 -0
- package/dist/artifact-builder/ComponentClassModelBuilder.js +115 -0
- package/dist/artifact-builder/ComponentClassModelBuilder.js.map +1 -0
- package/dist/artifact-builder/InterfaceGenerator.d.ts +15 -6
- package/dist/artifact-builder/InterfaceGenerator.js +27 -26
- package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
- package/dist/artifact-builder/ModelDataBuilder.d.ts +7 -0
- package/dist/artifact-builder/ModelDataBuilder.js +13 -5
- package/dist/artifact-builder/ModelDataBuilder.js.map +1 -1
- package/dist/artifact-builder/ModelDataRefiner.d.ts +18 -1
- package/dist/artifact-builder/ModelDataRefiner.js +18 -3
- package/dist/artifact-builder/ModelDataRefiner.js.map +1 -1
- package/dist/artifact-builder/SchemaGenerator.d.ts +21 -5
- package/dist/artifact-builder/SchemaGenerator.js +38 -26
- package/dist/artifact-builder/SchemaGenerator.js.map +1 -1
- package/dist/artifact-builder/ScreenInterfaceRefiner.d.ts +18 -1
- package/dist/artifact-builder/ScreenInterfaceRefiner.js +23 -9
- package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
- package/dist/artifact-builder/SelectorBuilder.d.ts +18 -5
- package/dist/artifact-builder/SelectorBuilder.js +29 -14
- package/dist/artifact-builder/SelectorBuilder.js.map +1 -1
- package/dist/artifact-builder/SubjectClassModelBuilder.d.ts +38 -0
- package/dist/artifact-builder/SubjectClassModelBuilder.js +158 -0
- package/dist/artifact-builder/SubjectClassModelBuilder.js.map +1 -0
- package/dist/artifact-builder/SubjectComponentGenerator.d.ts +25 -14
- package/dist/artifact-builder/SubjectComponentGenerator.js +65 -189
- package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectGenerator.d.ts +32 -13
- package/dist/artifact-builder/SubjectGenerator.js +81 -165
- package/dist/artifact-builder/SubjectGenerator.js.map +1 -1
- package/dist/artifact-builder/SubjectRegistration.d.ts +22 -8
- package/dist/artifact-builder/SubjectRegistration.js +29 -14
- package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
- package/dist/artifact-builder/TsFileModel.d.ts +86 -0
- package/dist/artifact-builder/TsFileModel.js +2 -0
- package/dist/artifact-builder/TsFileModel.js.map +1 -0
- package/dist/artifact-builder/TsFileSerializer.d.ts +19 -0
- package/dist/artifact-builder/TsFileSerializer.js +225 -0
- package/dist/artifact-builder/TsFileSerializer.js.map +1 -0
- package/dist/artifact-builder/helpers/DataRetriever.d.ts +22 -3
- package/dist/artifact-builder/helpers/DataRetriever.js +56 -26
- package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
- package/dist/artifact-builder/helpers/NamingHandler.d.ts +18 -6
- package/dist/artifact-builder/helpers/NamingHandler.js +20 -61
- package/dist/artifact-builder/helpers/NamingHandler.js.map +1 -1
- package/dist/artifact-builder/helpers/PipelinePaths.d.ts +52 -0
- package/dist/artifact-builder/helpers/PipelinePaths.js +99 -0
- package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -0
- package/dist/artifact-builder/helpers/Stopwatch.d.ts +10 -0
- package/dist/artifact-builder/helpers/Stopwatch.js +10 -0
- package/dist/artifact-builder/helpers/Stopwatch.js.map +1 -1
- package/dist/artifact-builder/helpers/index.d.ts +1 -0
- package/dist/artifact-builder/helpers/index.js +1 -0
- package/dist/artifact-builder/helpers/index.js.map +1 -1
- package/dist/artifact-builder/index.d.ts +4 -0
- package/dist/artifact-builder/index.js +4 -0
- package/dist/artifact-builder/index.js.map +1 -1
- package/dist/components/BaseComponentObjects.d.ts +17 -0
- package/dist/components/BaseComponentObjects.js +17 -0
- package/dist/components/BaseComponentObjects.js.map +1 -1
- package/dist/components/action-bar/ActionBar.d.ts +21 -24
- package/dist/components/action-bar/ActionBar.js +31 -24
- package/dist/components/action-bar/ActionBar.js.map +1 -1
- package/dist/components/action-bar/ActionBarObjects.d.ts +1 -0
- package/dist/components/action-bar/ActionBarObjects.js +1 -0
- package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
- package/dist/components/action-bar/CustomActionBar.d.ts +6 -0
- package/dist/components/action-bar/CustomActionBar.js +6 -0
- package/dist/components/action-bar/CustomActionBar.js.map +1 -1
- package/dist/components/cardlist/Cardlist.d.ts +6 -0
- package/dist/components/cardlist/Cardlist.js +6 -0
- package/dist/components/cardlist/Cardlist.js.map +1 -1
- package/dist/components/chart/Chart.d.ts +6 -0
- package/dist/components/chart/Chart.js +6 -0
- package/dist/components/chart/Chart.js.map +1 -1
- package/dist/components/combined-filter/CombinedFilter.d.ts +9 -0
- package/dist/components/combined-filter/CombinedFilter.js +9 -0
- package/dist/components/combined-filter/CombinedFilter.js.map +1 -1
- package/dist/components/cube-view-bar/CubeViewBar.d.ts +6 -0
- package/dist/components/cube-view-bar/CubeViewBar.js +6 -0
- package/dist/components/cube-view-bar/CubeViewBar.js.map +1 -1
- package/dist/components/export/ExportComponent.d.ts +12 -0
- package/dist/components/export/ExportComponent.js +12 -0
- package/dist/components/export/ExportComponent.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopup.d.ts +17 -4
- package/dist/components/filter/ExcelStyleFilterPopup.js +35 -23
- package/dist/components/filter/ExcelStyleFilterPopup.js.map +1 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.d.ts +1 -1
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js +2 -2
- package/dist/components/filter/ExcelStyleFilterPopupObjects.js.map +1 -1
- package/dist/components/filter/FilterForm.d.ts +10 -0
- package/dist/components/filter/FilterForm.js +10 -0
- package/dist/components/filter/FilterForm.js.map +1 -1
- package/dist/components/filter/FilterPopup.d.ts +22 -4
- package/dist/components/filter/FilterPopup.js +17 -9
- package/dist/components/filter/FilterPopup.js.map +1 -1
- package/dist/components/filter/FilterPopupObjects.d.ts +5 -2
- package/dist/components/filter/FilterPopupObjects.js +5 -2
- package/dist/components/filter/FilterPopupObjects.js.map +1 -1
- package/dist/components/filter/FindForm.d.ts +7 -0
- package/dist/components/filter/FindForm.js +7 -0
- package/dist/components/filter/FindForm.js.map +1 -1
- package/dist/components/filter/ManagePrefilterPopup.d.ts +11 -0
- package/dist/components/filter/ManagePrefilterPopup.js +11 -0
- package/dist/components/filter/ManagePrefilterPopup.js.map +1 -1
- package/dist/components/form/Form.d.ts +16 -0
- package/dist/components/form/Form.js +16 -0
- package/dist/components/form/Form.js.map +1 -1
- package/dist/components/grid/Grid.d.ts +17 -0
- package/dist/components/grid/Grid.js +18 -1
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/maps/Maps.d.ts +6 -0
- package/dist/components/maps/Maps.js +6 -0
- package/dist/components/maps/Maps.js.map +1 -1
- package/dist/components/menu/ListBarMenuComponent.d.ts +10 -0
- package/dist/components/menu/ListBarMenuComponent.js +10 -0
- package/dist/components/menu/ListBarMenuComponent.js.map +1 -1
- package/dist/components/pivot-grid/PivotGrid.d.ts +6 -0
- package/dist/components/pivot-grid/PivotGrid.js +6 -0
- package/dist/components/pivot-grid/PivotGrid.js.map +1 -1
- package/dist/components/pivot-grid/PivotGridFieldList.d.ts +7 -0
- package/dist/components/pivot-grid/PivotGridFieldList.js +7 -0
- package/dist/components/pivot-grid/PivotGridFieldList.js.map +1 -1
- package/dist/components/pop-up/AllRowsPopUp.d.ts +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js +12 -0
- package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
- package/dist/components/pop-up/PopUpComponent.d.ts +11 -0
- package/dist/components/pop-up/PopUpComponent.js +11 -0
- package/dist/components/pop-up/PopUpComponent.js.map +1 -1
- package/dist/components/prefilter-list/PrefilterList.d.ts +9 -0
- package/dist/components/prefilter-list/PrefilterList.js +9 -0
- package/dist/components/prefilter-list/PrefilterList.js.map +1 -1
- package/dist/components/preview/Preview.d.ts +6 -0
- package/dist/components/preview/Preview.js +6 -0
- package/dist/components/preview/Preview.js.map +1 -1
- package/dist/components/report-bar/ReportBar.d.ts +6 -0
- package/dist/components/report-bar/ReportBar.js +6 -0
- package/dist/components/report-bar/ReportBar.js.map +1 -1
- package/dist/components/report-tiles/ReportTiles.d.ts +6 -0
- package/dist/components/report-tiles/ReportTiles.js +6 -0
- package/dist/components/report-tiles/ReportTiles.js.map +1 -1
- package/dist/components/scheduler/Scheduler.d.ts +6 -0
- package/dist/components/scheduler/Scheduler.js +6 -0
- package/dist/components/scheduler/Scheduler.js.map +1 -1
- package/dist/components/snackbar/SnackBar.d.ts +12 -0
- package/dist/components/snackbar/SnackBar.js +12 -0
- package/dist/components/snackbar/SnackBar.js.map +1 -1
- package/dist/components/splitter/Splitter.d.ts +6 -0
- package/dist/components/splitter/Splitter.js +6 -0
- package/dist/components/splitter/Splitter.js.map +1 -1
- package/dist/components/tab/BaseTab.d.ts +5 -0
- package/dist/components/tab/BaseTab.js +5 -0
- package/dist/components/tab/BaseTab.js.map +1 -1
- package/dist/components/tab/DetailTabPage.d.ts +11 -0
- package/dist/components/tab/DetailTabPage.js +11 -0
- package/dist/components/tab/DetailTabPage.js.map +1 -1
- package/dist/components/tab/Tab.d.ts +10 -0
- package/dist/components/tab/Tab.js +10 -0
- package/dist/components/tab/Tab.js.map +1 -1
- package/dist/components/task/TaskBar.d.ts +12 -2
- package/dist/components/task/TaskBar.js +13 -3
- package/dist/components/task/TaskBar.js.map +1 -1
- package/dist/components/task/TaskTiles.d.ts +11 -2
- package/dist/components/task/TaskTiles.js +12 -3
- package/dist/components/task/TaskTiles.js.map +1 -1
- package/dist/components/topbar/TopBar.d.ts +10 -0
- package/dist/components/topbar/TopBar.js +10 -0
- package/dist/components/topbar/TopBar.js.map +1 -1
- package/dist/components/tree-view/TreeView.d.ts +9 -0
- package/dist/components/tree-view/TreeView.js +9 -0
- package/dist/components/tree-view/TreeView.js.map +1 -1
- package/dist/controls/DateControl.d.ts +39 -0
- package/dist/controls/DateControl.js +18 -1
- package/dist/controls/DateControl.js.map +1 -1
- package/dist/controls/FormComboBox.d.ts +30 -0
- package/dist/controls/FormComboBox.js +8 -0
- package/dist/controls/FormComboBox.js.map +1 -1
- package/dist/controls/GridColumnControl.d.ts +30 -0
- package/dist/controls/GridColumnControl.js +12 -3
- package/dist/controls/GridColumnControl.js.map +1 -1
- package/dist/controls/InputFieldControl.d.ts +49 -0
- package/dist/controls/InputFieldControl.js +30 -0
- package/dist/controls/InputFieldControl.js.map +1 -1
- package/dist/controls/LookupDropdown.d.ts +29 -0
- package/dist/controls/LookupDropdown.js +8 -0
- package/dist/controls/LookupDropdown.js.map +1 -1
- package/dist/enums/ElementTypes.d.ts +18 -0
- package/dist/enums/ElementTypes.js +18 -0
- package/dist/enums/ElementTypes.js.map +1 -1
- package/dist/enums/ExportFormat.d.ts +8 -0
- package/dist/enums/ExportFormat.js +8 -0
- package/dist/enums/ExportFormat.js.map +1 -1
- package/dist/enums/LogLevel.d.ts +17 -0
- package/dist/enums/LogLevel.js +17 -1
- package/dist/enums/LogLevel.js.map +1 -1
- package/dist/enums/index.d.ts +1 -0
- package/dist/enums/index.js +1 -0
- package/dist/enums/index.js.map +1 -1
- package/dist/helpers/ConfigChecker.d.ts +13 -0
- package/dist/helpers/ConfigChecker.js +13 -0
- package/dist/helpers/ConfigChecker.js.map +1 -1
- package/dist/helpers/Ensure.d.ts +13 -0
- package/dist/helpers/Ensure.js +13 -0
- package/dist/helpers/Ensure.js.map +1 -1
- package/dist/helpers/FlightTracker.d.ts +13 -3
- package/dist/helpers/FlightTracker.js +103 -17
- package/dist/helpers/FlightTracker.js.map +1 -1
- package/dist/helpers/GlobalWaitEventHandler.d.ts +13 -0
- package/dist/helpers/GlobalWaitEventHandler.js +13 -0
- package/dist/helpers/GlobalWaitEventHandler.js.map +1 -1
- package/dist/helpers/LoginHelper.d.ts +35 -1
- package/dist/helpers/LoginHelper.js +46 -11
- package/dist/helpers/LoginHelper.js.map +1 -1
- package/dist/helpers/PathResolver.d.ts +22 -0
- package/dist/helpers/PathResolver.js +22 -0
- package/dist/helpers/PathResolver.js.map +1 -1
- package/dist/helpers/Poll.d.ts +13 -1
- package/dist/helpers/Poll.js +12 -0
- package/dist/helpers/Poll.js.map +1 -1
- package/dist/helpers/RegexHelper.d.ts +15 -0
- package/dist/helpers/RegexHelper.js +15 -3
- package/dist/helpers/RegexHelper.js.map +1 -1
- package/dist/helpers/SubjectNavigator.d.ts +26 -0
- package/dist/helpers/SubjectNavigator.js +51 -0
- package/dist/helpers/SubjectNavigator.js.map +1 -0
- package/dist/helpers/UserSimulationHelper.d.ts +14 -0
- package/dist/helpers/UserSimulationHelper.js +14 -0
- package/dist/helpers/UserSimulationHelper.js.map +1 -1
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.js +1 -0
- package/dist/helpers/index.js.map +1 -1
- package/dist/index.d.ts +6 -20
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/IComponentObjects.d.ts +12 -0
- package/dist/interfaces/IComponentSchemaMeta.d.ts +15 -0
- package/dist/interfaces/IComponentSchemaMeta.js +2 -0
- package/dist/interfaces/IComponentSchemaMeta.js.map +1 -0
- package/dist/interfaces/IProperty.d.ts +13 -0
- package/dist/interfaces/IRegisteredSubjects.d.ts +12 -0
- package/dist/interfaces/ISeedSubjectDraft.d.ts +16 -0
- package/dist/interfaces/ISeedSubjectDraft.js +2 -0
- package/dist/interfaces/ISeedSubjectDraft.js.map +1 -0
- package/dist/interfaces/ISubject.d.ts +13 -0
- package/dist/interfaces/ISubjectDetail.d.ts +11 -0
- package/dist/interfaces/ISubjectDetail.js +2 -0
- package/dist/interfaces/ISubjectDetail.js.map +1 -0
- package/dist/mcp/ArtifactResolver.d.ts +152 -0
- package/dist/mcp/ArtifactResolver.js +232 -0
- package/dist/mcp/ArtifactResolver.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/page-extensions/GlobalComponents.d.ts +30 -0
- package/dist/page-extensions/GlobalComponents.js +30 -0
- package/dist/page-extensions/GlobalComponents.js.map +1 -1
- package/dist/page-extensions/GoToDeepLink.d.ts +9 -0
- package/dist/page-extensions/GoToDeepLink.js +9 -0
- package/dist/page-extensions/GoToDeepLink.js.map +1 -1
- package/dist/page-extensions/LoginFeatures.d.ts +8 -0
- package/dist/page-extensions/LoginFeatures.js +8 -0
- package/dist/page-extensions/LoginFeatures.js.map +1 -1
- package/dist/page-extensions/SubjectRegistry.d.ts +31 -0
- package/dist/page-extensions/SubjectRegistry.js +31 -0
- package/dist/page-extensions/SubjectRegistry.js.map +1 -1
- package/dist/page-extensions/UserSimulation.d.ts +21 -0
- package/dist/page-extensions/UserSimulation.js +21 -0
- package/dist/page-extensions/UserSimulation.js.map +1 -1
- package/dist/page-extensions/WaitEventHandler.d.ts +20 -0
- package/dist/page-extensions/WaitEventHandler.js +20 -0
- package/dist/page-extensions/WaitEventHandler.js.map +1 -1
- package/dist/page-overrides/ClickOverride.d.ts +23 -2
- package/dist/page-overrides/ClickOverride.js +34 -50
- package/dist/page-overrides/ClickOverride.js.map +1 -1
- package/dist/page-overrides/FillOverride.d.ts +23 -0
- package/dist/page-overrides/FillOverride.js +56 -61
- package/dist/page-overrides/FillOverride.js.map +1 -1
- package/dist/services/ConfigBuilder.d.ts +24 -0
- package/dist/services/ConfigBuilder.js +24 -0
- package/dist/services/ConfigBuilder.js.map +1 -1
- package/dist/services/IndiciumApi.service.d.ts +26 -0
- package/dist/services/IndiciumApi.service.js +40 -5
- package/dist/services/IndiciumApi.service.js.map +1 -1
- package/dist/services/Logger.d.ts +13 -0
- package/dist/services/Logger.js +39 -0
- package/dist/services/Logger.js.map +1 -1
- package/dist/types/Components.d.ts +18 -1
- package/dist/types/Components.js +0 -1
- package/dist/types/Components.js.map +1 -1
- package/dist/types/LocatorType.d.ts +5 -0
- package/dist/types/LocatorType.js +2 -0
- package/dist/types/LocatorType.js.map +1 -0
- package/dist/types/PollTypes.d.ts +8 -0
- package/dist/types/Test.d.ts +18 -0
- package/dist/types/Universal.d.ts +12 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/enums/ElementTypes.ts +18 -0
- package/enums/ExportFormat.ts +8 -0
- package/enums/LogLevel.ts +17 -1
- package/enums/index.ts +1 -0
- package/helpers/ConfigChecker.ts +13 -0
- package/helpers/Ensure.ts +13 -0
- package/helpers/FlightTracker.ts +109 -20
- package/helpers/GlobalWaitEventHandler.ts +13 -0
- package/helpers/LoginHelper.ts +49 -12
- package/helpers/PathResolver.ts +22 -0
- package/helpers/Poll.ts +13 -1
- package/helpers/RegexHelper.ts +15 -3
- package/helpers/SubjectNavigator.ts +57 -0
- package/helpers/UserSimulationHelper.ts +14 -0
- package/helpers/index.ts +1 -0
- package/index.ts +1 -0
- package/interfaces/IComponentObjects.ts +12 -0
- package/interfaces/IComponentSchemaMeta.ts +17 -0
- package/interfaces/IProperty.ts +13 -0
- package/interfaces/IRegisteredSubjects.ts +12 -0
- package/interfaces/ISeedSubjectDraft.ts +17 -0
- package/interfaces/ISubject.ts +13 -0
- package/interfaces/ISubjectDetail.ts +12 -0
- package/mcp/ArtifactResolver.ts +296 -0
- package/mcp/index.ts +2 -0
- package/package.json +20 -8
- package/page-extensions/GlobalComponents.ts +30 -0
- package/page-extensions/GoToDeepLink.ts +9 -0
- package/page-extensions/LoginFeatures.ts +8 -0
- package/page-extensions/SubjectRegistry.ts +32 -0
- package/page-extensions/UserSimulation.ts +21 -0
- package/page-extensions/WaitEventHandler.ts +20 -0
- package/page-overrides/ClickOverride.ts +36 -55
- package/page-overrides/FillOverride.ts +59 -73
- package/promptCredentials.js +1 -1
- package/scripts/Testwise.template.json +1 -1
- package/scripts/diagram.js +2267 -0
- package/scripts/main.js +84 -63
- package/scripts/postinstall.js +55 -42
- package/scripts/setup.js +91 -37
- package/scripts/sync.js +767 -748
- package/services/ConfigBuilder.ts +24 -0
- package/services/IndiciumApi.service.ts +44 -6
- package/services/Logger.ts +40 -0
- package/templates/copilot-instructions.md +130 -0
- package/templates/mcp.json +9 -0
- package/templates/testwise-test-expert.agent.md +453 -0
- package/tests/tsconfig.json +12 -0
- package/tsconfig.json +6 -2
- package/types/Components.ts +17 -2
- package/types/LocatorType.ts +5 -0
- package/types/PollTypes.ts +8 -0
- package/types/Test.ts +18 -0
- package/types/Universal.ts +12 -0
- package/types/index.ts +2 -0
- package/dist/interfaces/IStoredTestResults.d.ts +0 -5
- package/dist/interfaces/IStoredTestResults.js +0 -2
- package/dist/interfaces/IStoredTestResults.js.map +0 -1
- package/dist/templates/test-artifacts/SubjectPageBase.d.ts +0 -5
- package/dist/templates/test-artifacts/SubjectPageBase.js +0 -6
- package/dist/templates/test-artifacts/SubjectPageBase.js.map +0 -1
- package/dist/templates/test-artifacts/screens/index.d.ts +0 -1
- package/dist/templates/test-artifacts/screens/index.js +0 -2
- package/dist/templates/test-artifacts/screens/index.js.map +0 -1
- package/dist/templates/test-artifacts/subjects/index.d.ts +0 -1
- package/dist/templates/test-artifacts/subjects/index.js +0 -2
- package/dist/templates/test-artifacts/subjects/index.js.map +0 -1
- package/interfaces/IStoredTestResults.ts +0 -6
|
@@ -2,6 +2,30 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import dotenv from 'dotenv';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Reads and exposes the consumer project's `Testwise.json` configuration file
|
|
7
|
+
* and any `.env` files found in the project root.
|
|
8
|
+
*
|
|
9
|
+
* **What it does:**
|
|
10
|
+
* - Locates `Testwise.json` relative to `process.env.INIT_CWD` (the directory
|
|
11
|
+
* from which `npm run` was invoked — i.e. the consumer project root).
|
|
12
|
+
* - Parses and applies every `.env` file found in that directory into
|
|
13
|
+
* `process.env` so environment variables are available to all pipeline steps
|
|
14
|
+
* and helpers before they construct.
|
|
15
|
+
* - Exposes a dot-notation `get<T>(key)` accessor to retrieve deeply nested
|
|
16
|
+
* config values without needing to cast or navigate the raw JSON.
|
|
17
|
+
*
|
|
18
|
+
* **How to use it in tests or helpers:**
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { testwiseConfig } from '../services/ConfigBuilder.js';
|
|
21
|
+
*
|
|
22
|
+
* const baseUrl = testwiseConfig().get<string>('application.baseUrl');
|
|
23
|
+
* const timeout = testwiseConfig().get<number>('featureSettings.InflightRequests.waitTimeout');
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* The exported `testwiseConfig()` function returns a singleton—the file is
|
|
27
|
+
* only read once per process.
|
|
28
|
+
*/
|
|
5
29
|
class ConfigBuilder {
|
|
6
30
|
private config: Record<string, unknown> | null = null;
|
|
7
31
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/** biome-ignore-all lint/style/noNonNullAssertion: because null is bad */
|
|
3
3
|
/** biome-ignore-all lint/suspicious/noExplicitAny: because it is necessary */
|
|
4
|
-
import axios, { type AxiosInstance } from 'axios';
|
|
4
|
+
import axios, { type AxiosError, type AxiosInstance } from 'axios';
|
|
5
5
|
import { testwiseConfig } from './ConfigBuilder.js';
|
|
6
6
|
|
|
7
7
|
export class IndiciumApiService {
|
|
@@ -23,6 +23,17 @@ export class IndiciumApiService {
|
|
|
23
23
|
await this.initPromise;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
private static extractMessage(error: unknown): string {
|
|
27
|
+
if (axios.isAxiosError(error)) {
|
|
28
|
+
const axiosErr = error as AxiosError;
|
|
29
|
+
const status = axiosErr.response?.status;
|
|
30
|
+
const statusText = axiosErr.response?.statusText;
|
|
31
|
+
const url = axiosErr.config?.url ?? '';
|
|
32
|
+
return status ? `HTTP ${status} ${statusText} — ${url}` : axiosErr.message;
|
|
33
|
+
}
|
|
34
|
+
return error instanceof Error ? error.message : String(error);
|
|
35
|
+
}
|
|
36
|
+
|
|
26
37
|
private async initialize(): Promise<void> {
|
|
27
38
|
const config = testwiseConfig();
|
|
28
39
|
const serviceUrl = config.get<string>('environmentSettings.serviceUrl')?.replace(/\/$/, '');
|
|
@@ -66,20 +77,33 @@ export class IndiciumApiService {
|
|
|
66
77
|
console.warn(`IndiciumApiService: No GUI Application found for alias: ${targetAlias}`);
|
|
67
78
|
}
|
|
68
79
|
} catch (error) {
|
|
69
|
-
console.error(
|
|
80
|
+
console.error(`IndiciumApiService: Verification failed: ${IndiciumApiService.extractMessage(error)}`);
|
|
70
81
|
}
|
|
71
82
|
}
|
|
72
83
|
|
|
84
|
+
/**
|
|
85
|
+
* Returns whether the service successfully connected to and verified the configured
|
|
86
|
+
* GUI application alias. Use this to guard against misconfiguration before making API calls.
|
|
87
|
+
* @returns `true` if the connection was verified; `false` otherwise.
|
|
88
|
+
*/
|
|
73
89
|
public async canConnectToProject(): Promise<boolean> {
|
|
74
90
|
await this.ensureReady();
|
|
75
91
|
return this.isVerified;
|
|
76
92
|
}
|
|
77
93
|
|
|
94
|
+
/**
|
|
95
|
+
* Returns the resolved GUI application ID for the configured alias, or `null` if
|
|
96
|
+
* verification failed (e.g. the alias was not found or the service URL is unreachable).
|
|
97
|
+
*/
|
|
78
98
|
public async getVerifiedGuiApplId(): Promise<number | null> {
|
|
79
99
|
await this.ensureReady();
|
|
80
100
|
return this.guiApplId;
|
|
81
101
|
}
|
|
82
102
|
|
|
103
|
+
/**
|
|
104
|
+
* Fetches all UI table records (`i_ui_tab`) for the verified GUI application.
|
|
105
|
+
* @returns An array of table objects, or an empty array if not verified or on error.
|
|
106
|
+
*/
|
|
83
107
|
public async getAllTables(): Promise<any[]> {
|
|
84
108
|
await this.ensureReady();
|
|
85
109
|
if (!this.isVerified || !this.guiApplId) return [];
|
|
@@ -90,11 +114,15 @@ export class IndiciumApiService {
|
|
|
90
114
|
);
|
|
91
115
|
return response.data?.value || [];
|
|
92
116
|
} catch (error) {
|
|
93
|
-
console.error(
|
|
117
|
+
console.error(`IndiciumApiService: Failed to fetch tables: ${IndiciumApiService.extractMessage(error)}`);
|
|
94
118
|
return [];
|
|
95
119
|
}
|
|
96
120
|
}
|
|
97
121
|
|
|
122
|
+
/**
|
|
123
|
+
* Fetches all UI column records (`i_ui_col`) for the verified GUI application.
|
|
124
|
+
* @returns An array of column objects, or an empty array if not verified or on error.
|
|
125
|
+
*/
|
|
98
126
|
public async getAllColumns(): Promise<any[]> {
|
|
99
127
|
await this.ensureReady();
|
|
100
128
|
if (!this.isVerified || !this.guiApplId) return [];
|
|
@@ -105,11 +133,15 @@ export class IndiciumApiService {
|
|
|
105
133
|
);
|
|
106
134
|
return response.data?.value || [];
|
|
107
135
|
} catch (error) {
|
|
108
|
-
console.error(
|
|
136
|
+
console.error(`IndiciumApiService: Failed to fetch columns: ${IndiciumApiService.extractMessage(error)}`);
|
|
109
137
|
return [];
|
|
110
138
|
}
|
|
111
139
|
}
|
|
112
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Fetches all lookup table relationships (`i_ui_tab_look_up`) for the verified GUI application.
|
|
143
|
+
* @returns An array of lookup objects, or an empty array if not verified or on error.
|
|
144
|
+
*/
|
|
113
145
|
public async getLookups(): Promise<any[]> {
|
|
114
146
|
await this.ensureReady();
|
|
115
147
|
if (!this.isVerified || !this.guiApplId) return [];
|
|
@@ -120,11 +152,15 @@ export class IndiciumApiService {
|
|
|
120
152
|
);
|
|
121
153
|
return response.data?.value || [];
|
|
122
154
|
} catch (error) {
|
|
123
|
-
console.error(
|
|
155
|
+
console.error(`IndiciumApiService: Failed to fetch lookups: ${IndiciumApiService.extractMessage(error)}`);
|
|
124
156
|
return [];
|
|
125
157
|
}
|
|
126
158
|
}
|
|
127
159
|
|
|
160
|
+
/**
|
|
161
|
+
* Fetches all screen component records (`i_ui_screen_component`) for the verified GUI application.
|
|
162
|
+
* @returns An array of screen component objects, or an empty array if not verified or on error.
|
|
163
|
+
*/
|
|
128
164
|
public async getScreenComponents(): Promise<any[]> {
|
|
129
165
|
await this.ensureReady();
|
|
130
166
|
if (!this.isVerified || !this.guiApplId) return [];
|
|
@@ -135,7 +171,9 @@ export class IndiciumApiService {
|
|
|
135
171
|
);
|
|
136
172
|
return response.data?.value || [];
|
|
137
173
|
} catch (error) {
|
|
138
|
-
console.error(
|
|
174
|
+
console.error(
|
|
175
|
+
`IndiciumApiService: Failed to fetch screen components: ${IndiciumApiService.extractMessage(error)}`
|
|
176
|
+
);
|
|
139
177
|
return [];
|
|
140
178
|
}
|
|
141
179
|
}
|
package/services/Logger.ts
CHANGED
|
@@ -4,6 +4,33 @@ import { LogLevel } from '../enums/LogLevel.js';
|
|
|
4
4
|
import { originalDebug, originalError, originalInfo, originalLog, originalWarn } from '../index.js';
|
|
5
5
|
import { testwiseConfig } from './ConfigBuilder.js';
|
|
6
6
|
|
|
7
|
+
/**
|
|
8
|
+
* Buffered, level-filtered logger that writes timestamped entries to a log
|
|
9
|
+
* file AND (optionally) to the console during test runs.
|
|
10
|
+
*
|
|
11
|
+
* **Configuration** — all settings live under `featureSettings.logger` in
|
|
12
|
+
* `Testwise.json`:
|
|
13
|
+
*
|
|
14
|
+
* | Key | Type | Default | Description |
|
|
15
|
+
* |---|---|---|---|
|
|
16
|
+
* | `logDir` | string | `"logs"` | Directory to write log files into, relative to the consumer project root. |
|
|
17
|
+
* | `logLevel` | `"ERROR"\|"WARN"\|"INFO"\|"DEBUG"\|"ALL"` | `"ALL"` | Minimum severity level to record. |
|
|
18
|
+
* | `logByDay` | boolean | `false` | When `true`, creates a new `test-log-YYYY-MM-DD.log` file each day instead of always writing to `test-log.log`. |
|
|
19
|
+
* | `bufferSizeLimit` | number | `1000` | Number of log lines to buffer in memory before flushing to disk. |
|
|
20
|
+
* | `applyLogLevelToConsoleOutput` | boolean | `false` | When `true`, the log-level filter also suppresses console output (not just file output). |
|
|
21
|
+
*
|
|
22
|
+
* **How to use it:**
|
|
23
|
+
* ```ts
|
|
24
|
+
* import { logger } from '../services/Logger.js';
|
|
25
|
+
*
|
|
26
|
+
* logger.info('Navigating to Employee subject');
|
|
27
|
+
* logger.error('Connection failed', error);
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* Entries are written in the format:
|
|
31
|
+
* `[ISO-timestamp] [LEVEL] [file:line:col] message`
|
|
32
|
+
*/
|
|
33
|
+
|
|
7
34
|
const logDir = path.resolve(process.cwd(), testwiseConfig().get<string>('featureSettings.logger.logDir') ?? 'logs');
|
|
8
35
|
const logLevel =
|
|
9
36
|
(testwiseConfig().get<string>('featureSettings.logger.logLevel')?.toUpperCase() as LogLevel) ?? LogLevel.ALL;
|
|
@@ -173,6 +200,19 @@ function getCallerInfo(): string {
|
|
|
173
200
|
return 'unknown origin';
|
|
174
201
|
}
|
|
175
202
|
|
|
203
|
+
/**
|
|
204
|
+
* The singleton logger instance. Import this in any file that needs to write
|
|
205
|
+
* structured log entries during test execution or pipeline runs.
|
|
206
|
+
*
|
|
207
|
+
* All methods accept an optional message string followed by any number of
|
|
208
|
+
* extra values (arrays, objects, errors) that will be appended to the entry.
|
|
209
|
+
*
|
|
210
|
+
* ```ts
|
|
211
|
+
* logger.info('Starting sync pipeline');
|
|
212
|
+
* logger.warn('Subject not found', { subject: name });
|
|
213
|
+
* logger.error('Unexpected failure', err);
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
176
216
|
export const logger = {
|
|
177
217
|
// Order by severity level
|
|
178
218
|
error: (msg?: string, ...optionalParams: unknown[]): void => log(msg, LogLevel.ERROR, ...optionalParams),
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
---
|
|
2
|
+
applyTo: "**"
|
|
3
|
+
---
|
|
4
|
+
# Testwise – GitHub Copilot Instructions
|
|
5
|
+
|
|
6
|
+
## What Testwise is
|
|
7
|
+
|
|
8
|
+
**Testwise** (`@thinkwise/testwise`) is the end-to-end test automation library for this Thinkwise application. It wraps Playwright with typed components, generated subject artifacts, and helpers that match the exact UI patterns of Thinkwise applications.
|
|
9
|
+
|
|
10
|
+
**Always prefer Testwise over raw Playwright.** Using raw Playwright on a Thinkwise application leads to brittle selectors, automation loops, and high token usage. Testwise components are maintained by Thinkwise and absorb UI changes automatically.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Imports
|
|
15
|
+
|
|
16
|
+
Always import `test` and `expect` from `@thinkwise/testwise`, never from `@playwright/test` directly.
|
|
17
|
+
|
|
18
|
+
```typescript
|
|
19
|
+
import { test, expect } from '@thinkwise/testwise';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
For BDD-style tests:
|
|
23
|
+
|
|
24
|
+
```typescript
|
|
25
|
+
import { bddTest as test, expect } from '@thinkwise/testwise';
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Subject artifacts
|
|
31
|
+
|
|
32
|
+
Testwise generates typed **subject classes** from the Thinkwise application model. Each class represents one screen and exposes the components on that screen as typed properties. They live in `node_modules/@thinkwise/testwise/test-artifacts/subjects/`.
|
|
33
|
+
|
|
34
|
+
### Accessing a subject
|
|
35
|
+
|
|
36
|
+
Use the `page.subject` proxy. The property name is the **exact generated class name** (PascalCase), which encodes the subject name and the screen context:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
test('example', async ({ page }) => {
|
|
40
|
+
const subject = await page.subject.CustomerOrderMain;
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> **Never guess a class name.** Always use the MCP `list_artifacts` tool to get the exact name before writing code.
|
|
45
|
+
|
|
46
|
+
### Screen contexts
|
|
47
|
+
|
|
48
|
+
| Context | Description |
|
|
49
|
+
|----------|------------------------------------------------|
|
|
50
|
+
| `Main` | Primary screen (list/overview) |
|
|
51
|
+
| `Detail` | Detail tab or sub-form |
|
|
52
|
+
| `Popup` | Modal/dialog pop-up |
|
|
53
|
+
| `Zoom` | Zoom form that opens over the current screen |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## MCP workflow — do this before writing any test
|
|
58
|
+
|
|
59
|
+
When `@thinkwise/testwise-mcp` is connected, **call the MCP tools first** to get accurate names and component types. This prevents hallucination and avoids token-expensive correction loops.
|
|
60
|
+
|
|
61
|
+
1. **`list_subjects`** — see which subjects exist in this application.
|
|
62
|
+
2. **`list_artifacts(subject, screenContext?)`** — get the exact class name and import path.
|
|
63
|
+
3. **`get_components(subject, screenContext)`** — get the property names and component types on the subject class.
|
|
64
|
+
4. Write the test using only the values returned by those tools.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Components
|
|
69
|
+
|
|
70
|
+
Each subject class exposes typed component properties. Use the component methods — never reach for raw Playwright locators when a component method already exists.
|
|
71
|
+
|
|
72
|
+
| Component | Key methods |
|
|
73
|
+
|------------------|-----------------------------------------------------------------------------------------------------|
|
|
74
|
+
| `Grid` | `getRowByIndex(n)`, `getRowByRowId(id)`, `getCellByExactValue(v)`, `getRowsByColValue(col, v)`, `openExcelStyleFilterPopup(col)` |
|
|
75
|
+
| `Form` | Field accessors typed to the screen interface |
|
|
76
|
+
| `ActionBar` | `getAddButton()`, `getSaveButton()`, `getCancelButton()`, `getDeleteButton()`, `getFilterButton()`, `getSearchInput()` |
|
|
77
|
+
| `FilterForm` | Filter field accessors |
|
|
78
|
+
| `Tab` | Tab switching |
|
|
79
|
+
| `TreeView` | Tree node navigation |
|
|
80
|
+
| `CombinedFilter` | Combined filter interactions |
|
|
81
|
+
|
|
82
|
+
### Example
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
test('add and save a record', async ({ page }) => {
|
|
86
|
+
const subject = await page.subject.CustomerOrderMain;
|
|
87
|
+
|
|
88
|
+
await subject.actionBar.getAddButton().click();
|
|
89
|
+
await subject.form.customerName.fill('ACME Corp');
|
|
90
|
+
await subject.actionBar.getSaveButton().click();
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Controls
|
|
97
|
+
|
|
98
|
+
For typed input interactions within `Form` components:
|
|
99
|
+
|
|
100
|
+
| Control class | Use case |
|
|
101
|
+
|---------------------|-----------------------------------|
|
|
102
|
+
| `InputFieldControl` | Standard text/number inputs |
|
|
103
|
+
| `LookupDropdown` | Lookup (foreign key) dropdowns |
|
|
104
|
+
| `FormComboBox` | Combo box fields |
|
|
105
|
+
| `DateControl` | Date picker fields |
|
|
106
|
+
| `GridColumnControl` | Column-level controls in a grid |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Helpers and page extensions
|
|
111
|
+
|
|
112
|
+
| API | Purpose |
|
|
113
|
+
|--------------------------|-------------------------------------------------------|
|
|
114
|
+
| `LoginHelper` | Authenticate before tests |
|
|
115
|
+
| `UserSimulationHelper` | Simulate a specific user role/identity |
|
|
116
|
+
| `SubjectNavigator` | Navigate to a subject by menu path |
|
|
117
|
+
| `page.goToDeepLink(...)` | Navigate directly to a Thinkwise deep link |
|
|
118
|
+
| `page.login(...)` | Authenticate via page extension |
|
|
119
|
+
| `FlightTracker` | Wait for all pending network requests to complete |
|
|
120
|
+
| `Ensure` | Assertion helpers with built-in retry |
|
|
121
|
+
| `Poll` | Poll until a condition is met or timeout |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## What NOT to do
|
|
126
|
+
|
|
127
|
+
- ❌ Do not `import { test } from '@playwright/test'` — always use `@thinkwise/testwise`.
|
|
128
|
+
- ❌ Do not hardcode locators (`page.locator(...)`) for UI interactions a Testwise component already covers.
|
|
129
|
+
- ❌ Do not guess subject class names — use the MCP `list_artifacts` tool.
|
|
130
|
+
- ❌ Do not use `page.fill()` / `page.click()` directly when a typed component method exists.
|