@thinkwise/testwise 0.2.105 → 0.2.111

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.
Files changed (100) hide show
  1. package/artifact-builder/CustomActionBarGenerator.ts +210 -0
  2. package/artifact-builder/InterfaceGenerator.ts +4 -1
  3. package/artifact-builder/ScreenInterfaceRefiner.ts +7 -1
  4. package/artifact-builder/SubjectComponentGenerator.ts +7 -1
  5. package/artifact-builder/SubjectRegistration.ts +4 -1
  6. package/artifact-builder/TaskDataBuilder.ts +71 -0
  7. package/artifact-builder/helpers/DataRetriever.ts +11 -0
  8. package/artifact-builder/helpers/PipelinePaths.ts +5 -0
  9. package/artifact-builder/index.ts +2 -0
  10. package/components/action-bar/ActionBarObjects.ts +3 -1
  11. package/components/filter/FilterPopup.ts +77 -14
  12. package/components/filter/FilterPopupObjects.ts +25 -4
  13. package/components/grid/Grid.ts +40 -2
  14. package/components/grid/GridObjects.ts +18 -3
  15. package/components/pop-up/AllRowsPopUp.ts +4 -1
  16. package/controls/DateControl.ts +26 -13
  17. package/controls/DateControlObjects.ts +1 -1
  18. package/controls/FormComboBoxObjects.ts +2 -2
  19. package/controls/GridColumnControl.ts +10 -0
  20. package/dist/artifact-builder/CustomActionBarGenerator.d.ts +82 -0
  21. package/dist/artifact-builder/CustomActionBarGenerator.js +175 -0
  22. package/dist/artifact-builder/CustomActionBarGenerator.js.map +1 -0
  23. package/dist/artifact-builder/InterfaceGenerator.js +4 -1
  24. package/dist/artifact-builder/InterfaceGenerator.js.map +1 -1
  25. package/dist/artifact-builder/ScreenInterfaceRefiner.js +7 -1
  26. package/dist/artifact-builder/ScreenInterfaceRefiner.js.map +1 -1
  27. package/dist/artifact-builder/SubjectComponentGenerator.js +5 -1
  28. package/dist/artifact-builder/SubjectComponentGenerator.js.map +1 -1
  29. package/dist/artifact-builder/SubjectRegistration.js +4 -1
  30. package/dist/artifact-builder/SubjectRegistration.js.map +1 -1
  31. package/dist/artifact-builder/TaskDataBuilder.d.ts +21 -0
  32. package/dist/artifact-builder/TaskDataBuilder.js +60 -0
  33. package/dist/artifact-builder/TaskDataBuilder.js.map +1 -0
  34. package/dist/artifact-builder/helpers/DataRetriever.d.ts +2 -0
  35. package/dist/artifact-builder/helpers/DataRetriever.js +7 -0
  36. package/dist/artifact-builder/helpers/DataRetriever.js.map +1 -1
  37. package/dist/artifact-builder/helpers/PipelinePaths.d.ts +2 -0
  38. package/dist/artifact-builder/helpers/PipelinePaths.js +4 -0
  39. package/dist/artifact-builder/helpers/PipelinePaths.js.map +1 -1
  40. package/dist/artifact-builder/index.d.ts +2 -0
  41. package/dist/artifact-builder/index.js +2 -0
  42. package/dist/artifact-builder/index.js.map +1 -1
  43. package/dist/components/action-bar/ActionBarObjects.js +2 -1
  44. package/dist/components/action-bar/ActionBarObjects.js.map +1 -1
  45. package/dist/components/filter/FilterPopup.d.ts +50 -2
  46. package/dist/components/filter/FilterPopup.js +69 -15
  47. package/dist/components/filter/FilterPopup.js.map +1 -1
  48. package/dist/components/filter/FilterPopupObjects.d.ts +4 -2
  49. package/dist/components/filter/FilterPopupObjects.js +18 -4
  50. package/dist/components/filter/FilterPopupObjects.js.map +1 -1
  51. package/dist/components/grid/Grid.d.ts +22 -0
  52. package/dist/components/grid/Grid.js +36 -2
  53. package/dist/components/grid/Grid.js.map +1 -1
  54. package/dist/components/grid/GridObjects.d.ts +2 -0
  55. package/dist/components/grid/GridObjects.js +12 -2
  56. package/dist/components/grid/GridObjects.js.map +1 -1
  57. package/dist/components/pop-up/AllRowsPopUp.js +4 -1
  58. package/dist/components/pop-up/AllRowsPopUp.js.map +1 -1
  59. package/dist/controls/DateControl.d.ts +18 -10
  60. package/dist/controls/DateControl.js +21 -8
  61. package/dist/controls/DateControl.js.map +1 -1
  62. package/dist/controls/DateControlObjects.js +1 -1
  63. package/dist/controls/DateControlObjects.js.map +1 -1
  64. package/dist/controls/FormComboBoxObjects.js +2 -2
  65. package/dist/controls/FormComboBoxObjects.js.map +1 -1
  66. package/dist/controls/GridColumnControl.d.ts +2 -0
  67. package/dist/controls/GridColumnControl.js +6 -0
  68. package/dist/controls/GridColumnControl.js.map +1 -1
  69. package/dist/helpers/DateFormat.d.ts +69 -0
  70. package/dist/helpers/DateFormat.js +100 -0
  71. package/dist/helpers/DateFormat.js.map +1 -0
  72. package/dist/helpers/DateLocaleHelper.d.ts +17 -0
  73. package/dist/helpers/DateLocaleHelper.js +52 -0
  74. package/dist/helpers/DateLocaleHelper.js.map +1 -0
  75. package/dist/helpers/LoginHelper.js +2 -1
  76. package/dist/helpers/LoginHelper.js.map +1 -1
  77. package/dist/helpers/Poll.d.ts +24 -2
  78. package/dist/helpers/Poll.js +87 -5
  79. package/dist/helpers/Poll.js.map +1 -1
  80. package/dist/helpers/UserSimulationHelper.js +2 -1
  81. package/dist/helpers/UserSimulationHelper.js.map +1 -1
  82. package/dist/interfaces/ITabTask.d.ts +21 -0
  83. package/dist/interfaces/ITabTask.js +2 -0
  84. package/dist/interfaces/ITabTask.js.map +1 -0
  85. package/dist/services/IndiciumApi.service.d.ts +7 -0
  86. package/dist/services/IndiciumApi.service.js +19 -0
  87. package/dist/services/IndiciumApi.service.js.map +1 -1
  88. package/dist/types/PollTypes.d.ts +5 -0
  89. package/helpers/DateFormat.ts +123 -0
  90. package/helpers/DateLocaleHelper.ts +57 -0
  91. package/helpers/LoginHelper.ts +2 -1
  92. package/helpers/Poll.ts +108 -5
  93. package/helpers/UserSimulationHelper.ts +2 -1
  94. package/interfaces/ITabTask.ts +21 -0
  95. package/package.json +3 -1
  96. package/promptCredentials.js +124 -124
  97. package/scripts/checkPackageContents.js +39 -0
  98. package/scripts/sync.js +14 -0
  99. package/services/IndiciumApi.service.ts +21 -0
  100. package/types/PollTypes.ts +5 -0
@@ -19,14 +19,29 @@ export class GridObjects extends BaseComponentObjects {
19
19
 
20
20
  public rowByRowId = (rowIdPattern: string) => this.context.locator(`[role="row"][row-id$="|${rowIdPattern}"]`);
21
21
 
22
+ public cellByRowIndexAndColumnId = (row: number, colId: string) =>
23
+ this.rowByIndex(row).locator(`[col-id="${colId}"]`);
24
+
22
25
  public cellByValue = (value: RegExp) =>
23
26
  this.context.locator('[role="button"]', {
24
27
  hasText: value
25
28
  });
26
29
 
27
- public rows = () => this.context.locator('[role="row"]');
28
-
29
- public cellsByColumnId = (colId: string) => this.context.locator(`[col-id="${colId}"] .value-renderer`);
30
+ // Body data rows only. `.ag-row` already excludes the header (which is `.ag-header-row`),
31
+ // and the `b-` row-index negation excludes the pinned bottom summary row while keeping
32
+ // pinned TOP rows, since the in-progress new row is what add-row flows count.
33
+ public rows = () => this.context.locator('.ag-row:not([row-index^="b-"])');
34
+
35
+ // Scoped to body rows so AG Grid's pinned bottom summary row is not read as data.
36
+ // Pinned bottom rows carry `row-index="b-<n>"`; negating that prefix leaves pinned
37
+ // TOP rows (the in-progress new row) in place. Do not swap this for
38
+ // `:not(.ag-row-pinned)` — that covers top and bottom alike. See
39
+ // tests/components/grid/GridObjects.cellsByColumnId.test.ts
40
+ public cellsByColumnId = (colId: string) =>
41
+ this.context.locator(`.ag-row:not([row-index^="b-"]) [col-id="${colId}"] .value-renderer`);
42
+
43
+ public summaryCellsByColumnId = (colId: string) =>
44
+ this.context.locator(`.ag-floating-bottom [col-id="${colId}"] .value-renderer`);
30
45
 
31
46
  public columnByRowLocator = (rowLocator: Locator) => rowLocator.locator('.ag-cell');
32
47
 
@@ -28,7 +28,10 @@ export class AllRowsPopup {
28
28
  }
29
29
 
30
30
  async waitForOpen(): Promise<void> {
31
- await pollUntil(() => this._allRowsPopupObjects.anchor(this.deletePopup).isVisible(), { predicate: Boolean });
31
+ await pollUntil(() => this._allRowsPopupObjects.anchor(this.deletePopup).isVisible(), {
32
+ predicate: Boolean,
33
+ description: 'the delete-all-rows popup to become visible'
34
+ });
32
35
  }
33
36
 
34
37
  public selectedRowsRadioButton = (): Locator => this._allRowsPopupObjects.selectedRowsRadioButton();
@@ -1,6 +1,8 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  /* biome-ignore-all lint/suspicious/noExplicitAny: reason42 */
3
3
  import type { Locator } from '@playwright/test';
4
+ import { isIsoDateTime, isoToLocaleDigits } from '../helpers/DateFormat.js';
5
+ import { getDateLocale } from '../helpers/DateLocaleHelper.js';
4
6
  import { DateControlObjects } from './DateControlObjects.js';
5
7
 
6
8
  /**
@@ -12,11 +14,11 @@ import { DateControlObjects } from './DateControlObjects.js';
12
14
  * field on the form:
13
15
  *
14
16
  * ```ts
15
- * // Fill accepts any common date format — numbers are extracted and entered
16
- * // sequentially so the date picker can apply its own formatting:
17
- * await subject.form.hireDateField.fill('15-03-2025');
18
- * await subject.form.hireDateField.fill('03/15/2025');
19
- * await subject.form.hireDateField.fill('20250315'); // also works
17
+ * // Fill accepts a canonical ISO date. Testwise reads the app's date locale
18
+ * // and types the digits in the picker's expected order, so the same value
19
+ * // enters the same real date under any locale:
20
+ * await subject.form.hireDateField.fill('2025-03-15'); // 15 March 2025
21
+ * await subject.form.hireDateField.fill('2025-03-15 09:46:09'); // with time
20
22
  *
21
23
  * const raw = await subject.form.hireDateField.inputValue();
22
24
  * await subject.form.hireDateField.clear();
@@ -42,17 +44,28 @@ export class DateControl implements IDateControlCore {
42
44
  }
43
45
 
44
46
  /**
45
- * Enter a date value in any common format (e.g., "MM/DD/YYYY", "YYYY-MM-DD", "DD-MM-YYYY").
46
- * The method will extract the numbers and input them sequentially, allowing the date picker to format it correctly.
47
- * For example, entering "01012025" will be interpreted as "01/01/2025".
48
- * This approach provides flexibility in how dates can be entered while ensuring compatibility with various date picker implementations.
49
- * @param value
47
+ * Enter a date value from a canonical ISO string (`YYYY-MM-DD` or
48
+ * `YYYY-MM-DD HH:mm:ss`). Testwise reads the app's active date locale, reorders
49
+ * the day/month/year digits to the picker's expected order, and types them
50
+ * sequentially so the picker applies its own formatting. This means the same
51
+ * ISO value enters the same real date regardless of the configured locale.
52
+ *
53
+ * For example, `"2025-01-01"` types `01012025` under a DD/MM/YYYY locale,
54
+ * `01012025` under MM/DD/YYYY, and `20250101` under YYYY/MM/DD.
55
+ *
56
+ * Any other value (e.g. `"15/03/2025"`) is typed the way it was before ISO
57
+ * support: its digits in the order given, separators removed. That only enters
58
+ * the intended date under the locale it was written for, so prefer ISO.
59
+ * @param value - Canonical ISO date or date-time string (recommended), or a date written in the picker's own order.
50
60
  */
51
61
  public async fill(value: string): Promise<void> {
52
- const numbersOnlyValue = value.replace(/\D/g, '');
62
+ const input = this._objects.fieldInput();
63
+ const digits = isIsoDateTime(value)
64
+ ? isoToLocaleDigits(value, await getDateLocale(input.page()))
65
+ : value.replace(/\D/g, '');
53
66
 
54
- await this._objects.fieldInput().click();
55
- await this._objects.fieldInput().pressSequentially(numbersOnlyValue);
67
+ await input.click();
68
+ await input.pressSequentially(digits);
56
69
  }
57
70
 
58
71
  /**
@@ -9,7 +9,7 @@ export class DateControlObjects {
9
9
  this._id = id;
10
10
  }
11
11
 
12
- public fieldInput = (): Locator => this._context;
12
+ public fieldInput = (): Locator => this.dateField().locator('input');
13
13
 
14
14
  public dateField = (): Locator => this._context.getByTestId(`form-field__${this._id}`);
15
15
  }
@@ -15,8 +15,8 @@ export class FormComboBoxObjects {
15
15
  this._context.page().getByTestId(`form-field__${this._id}__select__options-list`);
16
16
 
17
17
  public option = (optionText: string): Locator => {
18
- const optionTextLowercase = optionText.toLowerCase();
19
- return this.autoCompleteMenu().getByTestId(`form-field__${this._id}__select__${optionTextLowercase}__text`);
18
+ const optionSlug = optionText.toLowerCase().replace(/\s+/g, '-');
19
+ return this.autoCompleteMenu().getByTestId(`form-field__${this._id}__select__${optionSlug}__text`);
20
20
  };
21
21
 
22
22
  public clearButton = (): Locator => this.field().locator('Button[aria-label="Clear"]');
@@ -33,6 +33,8 @@ export type IGridColumnControlCore = {
33
33
  getColumnHeader(): Promise<Locator>;
34
34
  getCellByExactValue(value: string): Locator;
35
35
  getCellValues(): Promise<string[]>;
36
+ getSummaryCell(): Locator;
37
+ getSummaryValue(): Promise<string | null>;
36
38
  filterByColumnValueExcelStyle(value: string, deselectAll?: boolean): Promise<void>;
37
39
  openExcelStyleFilterPopup(): Promise<void>;
38
40
  };
@@ -65,6 +67,14 @@ class GridColumnControl implements IGridColumnControlCore {
65
67
  return await this._grid.getCellValuesByColId(this._id);
66
68
  }
67
69
 
70
+ public getSummaryCell(): Locator {
71
+ return this._grid.getSummaryCellByColId(this._id);
72
+ }
73
+
74
+ public async getSummaryValue(): Promise<string | null> {
75
+ return await this._grid.getSummaryValueByColId(this._id);
76
+ }
77
+
68
78
  public async filterByColumnValueExcelStyle(value: string, deselectAll?: boolean): Promise<void> {
69
79
  await this._grid.filterByColumnValueExcelStyle(this._objects.columnHeader(), value, deselectAll);
70
80
  }
@@ -0,0 +1,82 @@
1
+ import { PipelinePaths } from './helpers/PipelinePaths.js';
2
+ /**
3
+ * **Pipeline Step 6.5** — For each subject+variant that has qualifying task
4
+ * buttons (written by `TaskDataBuilder`), generates a subject-specific
5
+ * `ActionBar` subclass with a typed getter per task, then patches the
6
+ * already-generated subject class file(s) to use that subclass instead of
7
+ * the base `ActionBar`.
8
+ *
9
+ * **Why a separate step (not baked into `SubjectGenerator`):**
10
+ * `SubjectGenerator` and `SubjectClassModelBuilder` run pipeline checks
11
+ * against the known component lists (`coreComponents`, `screenComponents`).
12
+ * A dynamically named type like `EmployeeEditable1ActionBar` is not in those
13
+ * lists and would break those checks. Running as a post-step lets the normal
14
+ * pipeline complete cleanly, then applies the swap after all validation has
15
+ * passed.
16
+ *
17
+ * **Generated file:** `test-artifacts/subjects/<SubjectFolder>/<ClassName>.ts`
18
+ * where `ClassName = <SubjectFolderPascal><VariantPascal>ActionBar`.
19
+ * Example: subject `employee`, variant `editable1` → `EmployeeEditable1ActionBar.ts`
20
+ *
21
+ * **Patching:** For each screen context (Main, Detail, Popup, Zoom) of a
22
+ * subject+variant with tasks, the generated `<ClassName>.ts` subject class is
23
+ * updated to:
24
+ * - Import the custom ActionBar instead of `ActionBar` from components.
25
+ * - Declare the `actionBar` property with the custom type.
26
+ * - Instantiate the custom class in the constructor.
27
+ *
28
+ * **Subject folder index.ts:** After generating each custom ActionBar file,
29
+ * the subject folder's `index.ts` barrel is updated to re-export it.
30
+ *
31
+ * **When it runs:** Step 6.5 of `testwise sync`, after `SubjectGenerator`
32
+ * (which writes and indexes subject class files) and before `SubjectRegistration`.
33
+ */
34
+ export declare class CustomActionBarGenerator {
35
+ private readonly _paths;
36
+ private readonly _namingHandler;
37
+ private readonly _dataRetriever;
38
+ constructor(paths?: PipelinePaths);
39
+ run(): void;
40
+ /**
41
+ * Writes a new `<ClassName>.ts` file to the subject's `Components/` subfolder.
42
+ * The class extends `ActionBar` and adds one getter per qualifying task ID.
43
+ */
44
+ private generateCustomActionBarFile;
45
+ /**
46
+ * Appends the custom ActionBar export to the subject folder's `index.ts` barrel.
47
+ * `SubjectGenerator.indexGeneratedSubjects()` runs before this step, so the
48
+ * barrel already exists but does not yet include the custom ActionBar file.
49
+ */
50
+ private appendToSubjectIndex;
51
+ /**
52
+ * Reads the generated subject class file for one screen context and applies
53
+ * three targeted text replacements to swap in the custom ActionBar type.
54
+ */
55
+ private patchSubjectClassFile;
56
+ /**
57
+ * Removes `ActionBar` and `CustomActionBar` from the core components import
58
+ * and inserts a subject-local import for the generated subclass.
59
+ */
60
+ private swapActionBarImport;
61
+ /**
62
+ * Converts a Thinkwise task ID (kebab-case or snake_case) to a camelCase getter
63
+ * name with a `Button` suffix for consistent, discoverable naming.
64
+ *
65
+ * Examples:
66
+ * - `"supplier-item-add"` → `"supplierItemAddButton"`
67
+ * - `"pf_run_prefilter_mand_on"` → `"pfRunPrefilterMandOnButton"`
68
+ * - `"deactivate"` → `"deactivateButton"`
69
+ */
70
+ private taskIdToGetterName;
71
+ /**
72
+ * Converts a Thinkwise task ID to the id the action bar renders in its
73
+ * `actionbar__task__<id>` test id: lowercase, with underscores replaced by
74
+ * hyphens. This is the same model-to-DOM rule the pipeline applies to column
75
+ * and screen type ids (see `SelectorBuilder`).
76
+ *
77
+ * Examples:
78
+ * - `"pf_run_prefilter_mand_on"` → `"pf-run-prefilter-mand-on"`
79
+ * - `"supplier-item-add"` → `"supplier-item-add"` (unchanged)
80
+ */
81
+ private taskIdToTestId;
82
+ }
@@ -0,0 +1,175 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { DataRetriever } from './helpers/DataRetriever.js';
4
+ import { NamingHandler } from './helpers/NamingHandler.js';
5
+ import { PipelinePaths } from './helpers/PipelinePaths.js';
6
+ /**
7
+ * **Pipeline Step 6.5** — For each subject+variant that has qualifying task
8
+ * buttons (written by `TaskDataBuilder`), generates a subject-specific
9
+ * `ActionBar` subclass with a typed getter per task, then patches the
10
+ * already-generated subject class file(s) to use that subclass instead of
11
+ * the base `ActionBar`.
12
+ *
13
+ * **Why a separate step (not baked into `SubjectGenerator`):**
14
+ * `SubjectGenerator` and `SubjectClassModelBuilder` run pipeline checks
15
+ * against the known component lists (`coreComponents`, `screenComponents`).
16
+ * A dynamically named type like `EmployeeEditable1ActionBar` is not in those
17
+ * lists and would break those checks. Running as a post-step lets the normal
18
+ * pipeline complete cleanly, then applies the swap after all validation has
19
+ * passed.
20
+ *
21
+ * **Generated file:** `test-artifacts/subjects/<SubjectFolder>/<ClassName>.ts`
22
+ * where `ClassName = <SubjectFolderPascal><VariantPascal>ActionBar`.
23
+ * Example: subject `employee`, variant `editable1` → `EmployeeEditable1ActionBar.ts`
24
+ *
25
+ * **Patching:** For each screen context (Main, Detail, Popup, Zoom) of a
26
+ * subject+variant with tasks, the generated `<ClassName>.ts` subject class is
27
+ * updated to:
28
+ * - Import the custom ActionBar instead of `ActionBar` from components.
29
+ * - Declare the `actionBar` property with the custom type.
30
+ * - Instantiate the custom class in the constructor.
31
+ *
32
+ * **Subject folder index.ts:** After generating each custom ActionBar file,
33
+ * the subject folder's `index.ts` barrel is updated to re-export it.
34
+ *
35
+ * **When it runs:** Step 6.5 of `testwise sync`, after `SubjectGenerator`
36
+ * (which writes and indexes subject class files) and before `SubjectRegistration`.
37
+ */
38
+ export class CustomActionBarGenerator {
39
+ constructor(paths) {
40
+ this._paths = paths ?? new PipelinePaths();
41
+ this._namingHandler = new NamingHandler();
42
+ this._dataRetriever = new DataRetriever(this._paths);
43
+ }
44
+ run() {
45
+ const tabTasks = this._dataRetriever.getTabTasks();
46
+ if (tabTasks.length === 0)
47
+ return;
48
+ const subjects = this._dataRetriever.getSubjectsToBuild();
49
+ const taskMap = new Map(tabTasks.map((t) => [`${t.subject}__${t.variant}`, t]));
50
+ // Track which subject+variant combos already have a generated ActionBar file
51
+ const generatedActionBars = new Set();
52
+ for (const subject of subjects) {
53
+ const key = `${subject.subject}__${subject.variant}`;
54
+ const taskEntry = taskMap.get(key);
55
+ if (!taskEntry || taskEntry.tasks.length === 0)
56
+ continue;
57
+ const subjectFolderName = this._namingHandler.toSubjectPascalCase(subject.subject);
58
+ const variantPascal = subject.variant ? this._namingHandler.toPascalCase(subject.variant) : '';
59
+ const customActionBarClassName = `${subjectFolderName}${variantPascal}ActionBar`;
60
+ if (!generatedActionBars.has(key)) {
61
+ this.generateCustomActionBarFile(subjectFolderName, customActionBarClassName, taskEntry.tasks);
62
+ this.appendToSubjectIndex(subjectFolderName, customActionBarClassName);
63
+ generatedActionBars.add(key);
64
+ }
65
+ this.patchSubjectClassFile(subject, subjectFolderName, customActionBarClassName);
66
+ }
67
+ }
68
+ /**
69
+ * Writes a new `<ClassName>.ts` file to the subject's `Components/` subfolder.
70
+ * The class extends `ActionBar` and adds one getter per qualifying task ID.
71
+ */
72
+ generateCustomActionBarFile(subjectFolderName, className, taskIds) {
73
+ const componentsFolderPath = this._paths.subjectComponentsFolder(subjectFolderName);
74
+ if (!fs.existsSync(this._paths.subjectFolder(subjectFolderName)))
75
+ return;
76
+ if (!fs.existsSync(componentsFolderPath)) {
77
+ fs.mkdirSync(componentsFolderPath, { recursive: true });
78
+ }
79
+ const getters = taskIds
80
+ .map((taskId) => {
81
+ const getterName = this.taskIdToGetterName(taskId);
82
+ return ` get ${getterName}(): Locator {\n return this.getTaskButtonById('${this.taskIdToTestId(taskId)}');\n }`;
83
+ })
84
+ .join('\n\n');
85
+ const content = [
86
+ `import type { Locator } from '@playwright/test';`,
87
+ `import { ActionBar } from '../../../../components/index.js';`,
88
+ ``,
89
+ `export class ${className} extends ActionBar {`,
90
+ getters,
91
+ `}`,
92
+ ``
93
+ ].join('\n');
94
+ fs.writeFileSync(path.join(componentsFolderPath, `${className}.ts`), content, 'utf-8');
95
+ }
96
+ /**
97
+ * Appends the custom ActionBar export to the subject folder's `index.ts` barrel.
98
+ * `SubjectGenerator.indexGeneratedSubjects()` runs before this step, so the
99
+ * barrel already exists but does not yet include the custom ActionBar file.
100
+ */
101
+ appendToSubjectIndex(subjectFolderName, className) {
102
+ const indexPath = path.join(this._paths.subjectFolder(subjectFolderName), 'index.ts');
103
+ if (!fs.existsSync(indexPath))
104
+ return;
105
+ const exportLine = `export { ${className} } from './Components/${className}.js';`;
106
+ const existing = fs.readFileSync(indexPath, 'utf-8');
107
+ if (existing.includes(exportLine))
108
+ return;
109
+ fs.writeFileSync(indexPath, `${existing}\n${exportLine}`, 'utf-8');
110
+ }
111
+ /**
112
+ * Reads the generated subject class file for one screen context and applies
113
+ * three targeted text replacements to swap in the custom ActionBar type.
114
+ */
115
+ patchSubjectClassFile(subject, subjectFolderName, customActionBarClassName) {
116
+ const className = this._namingHandler.generateSubjectClassName(subject);
117
+ const filePath = path.join(this._paths.subjectFolder(subjectFolderName), `${className}.ts`);
118
+ if (!fs.existsSync(filePath))
119
+ return;
120
+ let content = fs.readFileSync(filePath, 'utf-8');
121
+ content = this.swapActionBarImport(content, customActionBarClassName);
122
+ content = content.split(': ActionBar').join(`: ${customActionBarClassName}`);
123
+ content = content.split(': CustomActionBar').join(`: ${customActionBarClassName}`);
124
+ content = content.split('new ActionBar(').join(`new ${customActionBarClassName}(`);
125
+ content = content.split('new CustomActionBar(').join(`new ${customActionBarClassName}(`);
126
+ fs.writeFileSync(filePath, content, 'utf-8');
127
+ }
128
+ /**
129
+ * Removes `ActionBar` and `CustomActionBar` from the core components import
130
+ * and inserts a subject-local import for the generated subclass.
131
+ */
132
+ swapActionBarImport(content, customActionBarClassName) {
133
+ const customImport = `import { ${customActionBarClassName} } from './Components/${customActionBarClassName}.js';`;
134
+ // Remove ActionBar / CustomActionBar from the components barrel import
135
+ content = content.replace(/^import \{ ([^}]+) \} from '\.\.\/\.\.\/\.\.\/components\/index\.js';$/m, (_, imports) => {
136
+ const remaining = imports
137
+ .split(',')
138
+ .map((i) => i.trim())
139
+ .filter((i) => i !== 'ActionBar' && i !== 'CustomActionBar');
140
+ if (remaining.length === 0)
141
+ return '';
142
+ return `import { ${remaining.join(', ')} } from '../../../components/index.js';`;
143
+ });
144
+ // Insert the subject-local import before the @playwright/test import line
145
+ content = content.replace(/^(import type \{ Page \} from '@playwright\/test';)/m, `${customImport}\n$1`);
146
+ return content;
147
+ }
148
+ /**
149
+ * Converts a Thinkwise task ID (kebab-case or snake_case) to a camelCase getter
150
+ * name with a `Button` suffix for consistent, discoverable naming.
151
+ *
152
+ * Examples:
153
+ * - `"supplier-item-add"` → `"supplierItemAddButton"`
154
+ * - `"pf_run_prefilter_mand_on"` → `"pfRunPrefilterMandOnButton"`
155
+ * - `"deactivate"` → `"deactivateButton"`
156
+ */
157
+ taskIdToGetterName(taskId) {
158
+ const camel = taskId.replace(/[-_]([a-z0-9])/g, (_, c) => c.toUpperCase());
159
+ return `${camel}Button`;
160
+ }
161
+ /**
162
+ * Converts a Thinkwise task ID to the id the action bar renders in its
163
+ * `actionbar__task__<id>` test id: lowercase, with underscores replaced by
164
+ * hyphens. This is the same model-to-DOM rule the pipeline applies to column
165
+ * and screen type ids (see `SelectorBuilder`).
166
+ *
167
+ * Examples:
168
+ * - `"pf_run_prefilter_mand_on"` → `"pf-run-prefilter-mand-on"`
169
+ * - `"supplier-item-add"` → `"supplier-item-add"` (unchanged)
170
+ */
171
+ taskIdToTestId(taskId) {
172
+ return taskId.toLowerCase().replace(/_/g, '-');
173
+ }
174
+ }
175
+ //# sourceMappingURL=CustomActionBarGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomActionBarGenerator.js","sourceRoot":"","sources":["../../artifact-builder/CustomActionBarGenerator.ts"],"names":[],"mappings":"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"}
@@ -77,7 +77,10 @@ export class InterfaceGenerator {
77
77
  rendererOptions: { 'just-types': 'true', 'nice-property-names': 'true' }
78
78
  });
79
79
  let updatedContent = result.lines.join('\n');
80
- updatedContent = updatedContent.replace(/interface\s+\w+/, `interface ${correctInterfaceName}`);
80
+ // Match the whole name quicktype gave the interface, up to whitespace, `{` or a type parameter.
81
+ // `\w+` stopped at the first non-ASCII letter, so a screen type such as "Algemeen hiërarchie"
82
+ // left the tail of the old name behind and the generated file did not compile.
83
+ updatedContent = updatedContent.replace(/interface\s+[^\s{<]+/, `interface ${correctInterfaceName}`);
81
84
  const formattedContent = await prettier.format(updatedContent, {
82
85
  parser: 'typescript',
83
86
  singleQuote: true,
@@ -1 +1 @@
1
- {"version":3,"file":"InterfaceGenerator.js","sourceRoot":"","sources":["../../artifact-builder/InterfaceGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InterfaceGenerator.js","sourceRoot":"","sources":["../../artifact-builder/InterfaceGenerator.ts"],"names":[],"mappings":"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"}
@@ -118,7 +118,13 @@ export class ScreenInterfaceRefiner {
118
118
  return interfacesToRemove;
119
119
  }
120
120
  findInterfaces(content) {
121
- const interfaceRegex = /export interface (\w+) \{[\s\S]*?\}/g;
121
+ // `\w` is ASCII-only. A screen type such as "Algemeen hiërarchie" gives the screen interface a
122
+ // non-ASCII name, which `\w+` skipped, so the first component placeholder was taken for the screen.
123
+ // `pascalCase` builds that name from letters, digits and `_`, and changing the case of a few letters
124
+ // adds a separate mark (`\p{M}`): Turkish "İ" lower-cases to "i" plus U+0307. The rename in
125
+ // `InterfaceGenerator` matches any character up to whitespace, `{` or `<`; this pattern lists the
126
+ // characters instead, because `getPlaceholderInterfaces()` puts the names it finds into a RegExp.
127
+ const interfaceRegex = /export interface ([\p{L}\p{M}\p{N}_]+) \{[\s\S]*?\}/gu;
122
128
  const interfaces = [];
123
129
  let match = interfaceRegex.exec(content);
124
130
  while (match !== null) {
@@ -1 +1 @@
1
- {"version":3,"file":"ScreenInterfaceRefiner.js","sourceRoot":"","sources":["../../artifact-builder/ScreenInterfaceRefiner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScreenInterfaceRefiner.js","sourceRoot":"","sources":["../../artifact-builder/ScreenInterfaceRefiner.ts"],"names":[],"mappings":"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"}
@@ -69,7 +69,11 @@ export class SubjectComponentGenerator {
69
69
  const componentName = meta.componentType;
70
70
  const componentFile = { content: fs.readFileSync(componentDirPath, 'utf-8') };
71
71
  componentFile.content = refineComponentInterface(componentFile.content, componentName);
72
- const interfaceMatches = componentFile.content.match(/export interface (\w+) extends/);
72
+ // The interface is named after the subject, and a subject id can have any letter: "algemeen_hiërarchie" gives
73
+ // `AlgemeenHiërarchieForm`. `\w+` is ASCII-only, so such a component got no class, and the subject class that
74
+ // imports it did not compile. Same characters as `ScreenInterfaceRefiner.findInterfaces()`, including the mark
75
+ // (`\p{M}`) that changing case adds to a few letters. They are listed because the name goes into a RegExp below.
76
+ const interfaceMatches = componentFile.content.match(/export interface ([\p{L}\p{M}\p{N}_]+) extends/u);
73
77
  if (interfaceMatches) {
74
78
  const mainInterface = interfaceMatches[1];
75
79
  const matchingProperties = this.getPropertyNamesFromInterface(componentFile, mainInterface);
@@ -1 +1 @@
1
- {"version":3,"file":"SubjectComponentGenerator.js","sourceRoot":"","sources":["../../artifact-builder/SubjectComponentGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SubjectComponentGenerator.js","sourceRoot":"","sources":["../../artifact-builder/SubjectComponentGenerator.ts"],"names":[],"mappings":"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"}
@@ -102,7 +102,10 @@ export class SubjectRegistration {
102
102
  const tsFiles = fs.readdirSync(folderPath).filter((file) => file.endsWith('.ts') && file !== 'index.ts');
103
103
  tsFiles.forEach((tsFile) => {
104
104
  const classContent = fs.readFileSync(path.join(folderPath, tsFile), 'utf-8');
105
- const classMatches = classContent.matchAll(/export\s+class\s+(\w+)/g);
105
+ // A subject or variant id can have any letter: "algemeen_hiërarchie" gives `AlgemeenHiërarchieMain`. `\w+`
106
+ // is ASCII-only and stopped at the "ë", so the class was left out of the registry. Same characters as
107
+ // `ScreenInterfaceRefiner.findInterfaces()`, including the mark (`\p{M}`) that changing case adds.
108
+ const classMatches = classContent.matchAll(/export\s+class\s+([\p{L}\p{M}\p{N}_]+)/gu);
106
109
  for (const match of classMatches) {
107
110
  const className = match[1];
108
111
  const pattern = new RegExp(`^(${folder})(.*)(Main|Popup|Zoom|Detail)$`);
@@ -1 +1 @@
1
- {"version":3,"file":"SubjectRegistration.js","sourceRoot":"","sources":["../../artifact-builder/SubjectRegistration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SubjectRegistration.js","sourceRoot":"","sources":["../../artifact-builder/SubjectRegistration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * **Pipeline Step 1.5** — Fetches task button data from the Indicium API
3
+ * (`i_ui_tab_task`) for the verified GUI application and writes qualifying
4
+ * entries to `seed-data/tab-tasks.json`.
5
+ *
6
+ * **Qualifying tasks:** A task qualifies when `custom_display_type` is absent
7
+ * or not equal to `4`. Tasks where `custom_display_type === 4` are special
8
+ * UI elements (not standard toolbar buttons) and are excluded from typed
9
+ * ActionBar generation.
10
+ *
11
+ * **Output format:** An array of `ITabTask` objects — one per subject+variant
12
+ * that has at least one qualifying task. If all tasks for a given subject+variant
13
+ * are `custom_display_type === 4`, no entry is written for that pair (it will
14
+ * receive a plain `ActionBar` during subject class generation).
15
+ *
16
+ * **When it runs:** Step 1.5 of `testwise sync`, after `buildSubjects` and
17
+ * `buildScreens` but before `ModelDataRefiner`. Fetching here (pre-refinement)
18
+ * means the full model is queried once and the data is available for all
19
+ * registered subjects during Phase 4.
20
+ */
21
+ export declare function buildTaskData(): Promise<void>;