@thinkwise/testwise 0.0.2-alpha.2 → 0.1.63
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 +5 -1
- package/components/actionbar/Actionbar.ts +126 -18
- package/components/actionbar/ActionbarObjects.ts +46 -41
- package/components/filter/FilterForm.ts +1 -1
- package/components/filter/FindForm.ts +1 -1
- package/components/form/Form.ts +23 -24
- package/components/form/FormObjects.ts +25 -0
- package/components/grid/Grid.ts +88 -12
- package/components/grid/GridObjects.ts +16 -8
- package/components/index.ts +7 -3
- package/components/pop-up/PopUpComponent.ts +5 -1
- package/components/pop-up/{PopUpComponentModels.ts → PopUpComponentObjects.ts} +4 -0
- package/components/tab/BaseTab.ts +42 -0
- package/components/tab/BaseTabObjects.ts +23 -0
- package/components/tab/ComponentTab.ts +35 -0
- package/components/tab/ComponentTabObjects.ts +14 -0
- package/components/tab/DetailTab.ts +20 -0
- package/components/tab/DetailTabObjects.ts +10 -0
- package/components/task/TaskBar.ts +29 -9
- package/components/task/TaskBarObjects.ts +24 -0
- package/components/task/TaskTile.ts +28 -0
- package/components/task/TaskTileObjects.ts +20 -0
- package/controls/LookupDropdown.ts +54 -0
- package/controls/index.ts +1 -0
- package/dist/Testwise.js +4 -2
- package/dist/Testwise.js.map +1 -1
- package/dist/biome.json +52 -0
- package/dist/components/actionbar/Actionbar.d.ts +53 -7
- package/dist/components/actionbar/Actionbar.js +74 -14
- package/dist/components/actionbar/Actionbar.js.map +1 -1
- package/dist/components/actionbar/ActionbarObjects.d.ts +17 -4
- package/dist/components/actionbar/ActionbarObjects.js +35 -24
- package/dist/components/actionbar/ActionbarObjects.js.map +1 -1
- package/dist/components/filter/FilterForm.d.ts +5 -0
- package/dist/components/filter/FilterForm.js +10 -0
- package/dist/components/filter/FilterForm.js.map +1 -0
- package/dist/components/filter/FindForm.d.ts +5 -0
- package/dist/components/filter/FindForm.js +10 -0
- package/dist/components/filter/FindForm.js.map +1 -0
- package/dist/components/form/Form.d.ts +7 -5
- package/dist/components/form/Form.js +17 -25
- package/dist/components/form/Form.js.map +1 -1
- package/dist/components/form/FormObjects.d.ts +9 -0
- package/dist/components/form/FormObjects.js +20 -0
- package/dist/components/form/FormObjects.js.map +1 -0
- package/dist/components/grid/Grid.d.ts +25 -6
- package/dist/components/grid/Grid.js +80 -16
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/grid/GridObjects.d.ts +5 -3
- package/dist/components/grid/GridObjects.js +9 -6
- package/dist/components/grid/GridObjects.js.map +1 -1
- package/dist/components/index.d.ts +7 -3
- package/dist/components/index.js +7 -3
- package/dist/components/index.js.map +1 -1
- package/dist/components/pop-up/PopUpComponent.d.ts +2 -0
- package/dist/components/pop-up/PopUpComponent.js +3 -1
- package/dist/components/pop-up/PopUpComponent.js.map +1 -1
- package/dist/components/pop-up/{PopUpComponentModels.d.ts → PopUpComponentObjects.d.ts} +2 -0
- package/dist/components/pop-up/{PopUpComponentModels.js → PopUpComponentObjects.js} +3 -1
- package/dist/components/pop-up/PopUpComponentObjects.js.map +1 -0
- package/dist/components/tab/BaseTab.d.ts +11 -0
- package/dist/components/tab/BaseTab.js +34 -0
- package/dist/components/tab/BaseTab.js.map +1 -0
- package/dist/components/tab/BaseTabObjects.d.ts +10 -0
- package/dist/components/tab/BaseTabObjects.js +14 -0
- package/dist/components/tab/BaseTabObjects.js.map +1 -0
- package/dist/components/tab/ComponentTab.d.ts +11 -0
- package/dist/components/tab/ComponentTab.js +27 -0
- package/dist/components/tab/ComponentTab.js.map +1 -0
- package/dist/components/tab/ComponentTabObjects.d.ts +7 -0
- package/dist/components/tab/ComponentTabObjects.js +10 -0
- package/dist/components/tab/ComponentTabObjects.js.map +1 -0
- package/dist/components/tab/DetailTab.d.ts +9 -0
- package/dist/components/tab/DetailTab.js +15 -0
- package/dist/components/tab/DetailTab.js.map +1 -0
- package/dist/components/tab/DetailTabObjects.d.ts +5 -0
- package/dist/components/tab/DetailTabObjects.js +7 -0
- package/dist/components/tab/DetailTabObjects.js.map +1 -0
- package/dist/components/task/TaskBar.d.ts +17 -0
- package/dist/components/task/TaskBar.js +23 -0
- package/dist/components/task/TaskBar.js.map +1 -0
- package/dist/components/task/TaskBarObjects.d.ts +17 -0
- package/dist/components/task/TaskBarObjects.js +19 -0
- package/dist/components/task/TaskBarObjects.js.map +1 -0
- package/dist/components/task/TaskTile.d.ts +14 -0
- package/dist/components/task/TaskTile.js +20 -0
- package/dist/components/task/TaskTile.js.map +1 -0
- package/dist/components/task/TaskTileObjects.d.ts +13 -0
- package/dist/components/task/TaskTileObjects.js +15 -0
- package/dist/components/task/TaskTileObjects.js.map +1 -0
- package/dist/config.json +10 -10
- package/dist/controls/LookupDropdown.d.ts +11 -0
- package/dist/controls/LookupDropdown.js +39 -0
- package/dist/controls/LookupDropdown.js.map +1 -0
- package/dist/controls/index.d.ts +1 -0
- package/dist/controls/index.js +2 -0
- package/dist/controls/index.js.map +1 -0
- package/dist/enums/LogLevel.d.ts +2 -3
- package/dist/enums/LogLevel.js +1 -2
- package/dist/enums/LogLevel.js.map +1 -1
- package/dist/enums/index.d.ts +1 -0
- package/dist/enums/index.js +2 -0
- package/dist/enums/index.js.map +1 -0
- package/dist/example-code/TestifyService.js +22 -12
- package/dist/example-code/TestifyService.js.map +1 -1
- package/dist/helpers/Ensure.d.ts +2 -0
- package/dist/helpers/Ensure.js +10 -0
- package/dist/helpers/Ensure.js.map +1 -0
- package/dist/helpers/FlightTracker.d.ts +6 -0
- package/dist/helpers/FlightTracker.js +25 -0
- package/dist/helpers/FlightTracker.js.map +1 -0
- package/dist/helpers/GlobalWaitEventHandler.d.ts +12 -0
- package/dist/helpers/GlobalWaitEventHandler.js +53 -0
- package/dist/helpers/GlobalWaitEventHandler.js.map +1 -0
- package/dist/helpers/LoginHelper.d.ts +3 -2
- package/dist/helpers/LoginHelper.js +20 -4
- package/dist/helpers/LoginHelper.js.map +1 -1
- package/dist/helpers/Poll.d.ts +2 -0
- package/dist/helpers/Poll.js +17 -0
- package/dist/helpers/Poll.js.map +1 -0
- package/dist/helpers/RegexHelper.d.ts +5 -0
- package/dist/helpers/RegexHelper.js +16 -0
- package/dist/helpers/RegexHelper.js.map +1 -0
- package/dist/helpers/UserSimulationHelper.d.ts +1 -1
- package/dist/helpers/UserSimulationHelper.js +10 -6
- package/dist/helpers/UserSimulationHelper.js.map +1 -1
- package/dist/helpers/index.d.ts +2 -0
- package/dist/helpers/index.js +3 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.d.ts +8 -12
- package/dist/index.js +9 -13
- package/dist/index.js.map +1 -1
- package/dist/package-lock.json +4087 -0
- package/dist/package.json +57 -0
- package/dist/page-extensions/GoToDeepLink.js +15 -1
- package/dist/page-extensions/GoToDeepLink.js.map +1 -1
- package/dist/page-extensions/LoginFeatures.d.ts +2 -1
- package/dist/page-extensions/LoginFeatures.js +3 -0
- package/dist/page-extensions/LoginFeatures.js.map +1 -1
- package/dist/page-extensions/WaitEventHandler.d.ts +12 -0
- package/dist/page-extensions/WaitEventHandler.js +15 -0
- package/dist/page-extensions/WaitEventHandler.js.map +1 -0
- package/dist/page-extensions/index.d.ts +3 -0
- package/dist/page-extensions/index.js +4 -0
- package/dist/page-extensions/index.js.map +1 -0
- package/dist/page-overrides/ClickOverride.d.ts +1 -0
- package/dist/page-overrides/ClickOverride.js +46 -25
- package/dist/page-overrides/ClickOverride.js.map +1 -1
- package/dist/page-overrides/FillOverride.d.ts +7 -0
- package/dist/page-overrides/FillOverride.js +106 -0
- package/dist/page-overrides/FillOverride.js.map +1 -0
- package/dist/page-overrides/index.d.ts +1 -0
- package/dist/page-overrides/index.js +2 -0
- package/dist/page-overrides/index.js.map +1 -0
- package/dist/scripts/Testwise.template.json +25 -0
- package/dist/services/ConfigBuilder.js +23 -1
- package/dist/services/ConfigBuilder.js.map +1 -1
- package/dist/services/Logger.d.ts +1 -2
- package/dist/services/Logger.js +69 -15
- package/dist/services/Logger.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -0
- package/dist/tsconfig.json +20 -0
- package/dist/types/PollTypes.d.ts +6 -0
- package/dist/types/PollTypes.js +2 -0
- package/dist/types/PollTypes.js.map +1 -0
- package/dist/types/Universal.js +2 -0
- package/dist/types/Universal.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/enums/LogLevel.ts +2 -3
- package/enums/index.ts +1 -0
- package/example-code/TestifyService.ts +26 -12
- package/helpers/Ensure.ts +9 -0
- package/helpers/FlightTracker.ts +26 -0
- package/helpers/GlobalWaitEventHandler.ts +66 -0
- package/helpers/LoginHelper.ts +26 -5
- package/helpers/Poll.ts +19 -0
- package/helpers/RegexHelper.ts +17 -0
- package/helpers/UserSimulationHelper.ts +11 -6
- package/helpers/index.ts +2 -0
- package/index.ts +9 -13
- package/package.json +21 -4
- package/page-extensions/GoToDeepLink.ts +17 -1
- package/page-extensions/LoginFeatures.ts +6 -1
- package/page-extensions/WaitEventHandler.ts +26 -0
- package/page-extensions/index.ts +3 -0
- package/page-overrides/ClickOverride.ts +60 -26
- package/page-overrides/FillOverride.ts +133 -0
- package/page-overrides/index.ts +1 -0
- package/promptCredentials.js +41 -30
- package/scripts/Testwise.template.json +7 -1
- package/scripts/add-config.js +2 -2
- package/services/ConfigBuilder.ts +27 -1
- package/services/Logger.ts +73 -15
- package/services/index.ts +1 -0
- package/tsconfig.json +20 -0
- package/types/PollTypes.ts +6 -0
- package/types/index.ts +2 -0
- package/.ci/azure-pipelines.yaml +0 -80
- package/.eslintcache +0 -1
- package/.gitattributes +0 -3
- package/.gitconfig +0 -2
- package/.vscode/settings.json +0 -18
- package/components/tab/Tab.ts +0 -29
- package/components/task/TaskTiles.ts +0 -11
- package/dist/components/pop-up/PopUpComponentModels.js.map +0 -1
- package/dist/enums/ActionbarRegions.d.ts +0 -5
- package/dist/enums/ActionbarRegions.js +0 -7
- package/dist/enums/ActionbarRegions.js.map +0 -1
- package/dist/enums/ButtonEnums.d.ts +0 -24
- package/dist/enums/ButtonEnums.js +0 -29
- package/dist/enums/ButtonEnums.js.map +0 -1
- package/dist/helpers/InflightRequestTracker.d.ts +0 -10
- package/dist/helpers/InflightRequestTracker.js +0 -26
- package/dist/helpers/InflightRequestTracker.js.map +0 -1
- package/dist/types/universal.js +0 -2
- package/dist/types/universal.js.map +0 -1
- package/enums/ActionbarRegions.ts +0 -5
- package/enums/ButtonEnums.ts +0 -28
- package/helpers/InflightRequestTracker.ts +0 -33
- /package/dist/types/{universal.d.ts → Universal.d.ts} +0 -0
- /package/types/{universal.ts → Universal.ts} +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import { BaseTabObjects } from './BaseTabObjects.js';
|
|
3
|
+
export declare class BaseTab {
|
|
4
|
+
protected _objects: BaseTabObjects;
|
|
5
|
+
constructor(page: Page, context?: Locator | null);
|
|
6
|
+
openById(name: string): Promise<void>;
|
|
7
|
+
openByIndex(index: number): Promise<void>;
|
|
8
|
+
getTabById(name: string): Promise<Locator>;
|
|
9
|
+
getTabByIndex(index: number): Promise<Locator>;
|
|
10
|
+
getBadgeCount(name: string): Promise<number>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { BaseTabObjects } from './BaseTabObjects.js';
|
|
2
|
+
export class BaseTab {
|
|
3
|
+
constructor(page, context = null) {
|
|
4
|
+
this._objects = new BaseTabObjects(page, context);
|
|
5
|
+
}
|
|
6
|
+
// --- Common actions ---
|
|
7
|
+
// Clicks a tab by its tabstrip test id prefix (e.g., "form", "users", "list").
|
|
8
|
+
// Uses the role="tab" element with data-testid^="tabstrip__tab__{name}".
|
|
9
|
+
async openById(name) {
|
|
10
|
+
await this._objects.tabByTestId(name).click();
|
|
11
|
+
}
|
|
12
|
+
// Clicks a tab by index within the scoped tablist context.
|
|
13
|
+
async openByIndex(index) {
|
|
14
|
+
await this._objects.tabByIndex(index).click();
|
|
15
|
+
}
|
|
16
|
+
// --- Useful getters ---
|
|
17
|
+
async getTabById(name) {
|
|
18
|
+
return this._objects.tabByTestId(name);
|
|
19
|
+
}
|
|
20
|
+
async getTabByIndex(index) {
|
|
21
|
+
return this._objects.tabByIndex(index);
|
|
22
|
+
}
|
|
23
|
+
// Reads the badge value on a tab. Non-visible/invalid → 0.
|
|
24
|
+
async getBadgeCount(name) {
|
|
25
|
+
const badge = this._objects.badgeByName(name);
|
|
26
|
+
const visible = await badge.isVisible().catch(() => false);
|
|
27
|
+
if (!visible)
|
|
28
|
+
return 0;
|
|
29
|
+
const txt = (await badge.textContent())?.trim() ?? '0';
|
|
30
|
+
const n = Number.parseInt(txt, 10);
|
|
31
|
+
return Number.isNaN(n) ? 0 : n;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=BaseTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTab.js","sourceRoot":"","sources":["../../../components/tab/BaseTab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,OAAO,OAAO;IAGlB,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,IAAI,CAAC,QAAQ,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,yBAAyB;IAEzB,+EAA+E;IAC/E,yEAAyE;IAClE,KAAK,CAAC,QAAQ,CAAC,IAAY;QAChC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,2DAA2D;IACpD,KAAK,CAAC,WAAW,CAAC,KAAa;QACpC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,yBAAyB;IAClB,KAAK,CAAC,UAAU,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,KAAa;QACtC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,2DAA2D;IACpD,KAAK,CAAC,aAAa,CAAC,IAAY;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO;YAAE,OAAO,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC;QACvD,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import { BaseComponentObjects } from '../BaseComponentObjects.js';
|
|
3
|
+
export declare class BaseTabObjects extends BaseComponentObjects {
|
|
4
|
+
protected _page: Page;
|
|
5
|
+
constructor(page: Page, context?: Locator | null);
|
|
6
|
+
tabList: () => Locator;
|
|
7
|
+
tabByTestId: (name: string) => Locator;
|
|
8
|
+
tabByIndex: (index: number) => Locator;
|
|
9
|
+
badgeByName: (name: string) => Locator;
|
|
10
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseComponentObjects } from '../BaseComponentObjects.js';
|
|
2
|
+
export class BaseTabObjects extends BaseComponentObjects {
|
|
3
|
+
constructor(page, context = null) {
|
|
4
|
+
super(page, context);
|
|
5
|
+
this.tabList = () => this.context.getByRole('tablist');
|
|
6
|
+
this.tabByTestId = (name) => this.tabList().locator(`[role="tab"][data-testid^="tabstrip__tab__${name.toLowerCase()}__"]`);
|
|
7
|
+
// use role for generic index-based selection
|
|
8
|
+
this.tabByIndex = (index) => this.tabList().getByRole('tab').nth(index);
|
|
9
|
+
// badge: leave as a CSS anchor on the tab testid
|
|
10
|
+
this.badgeByName = (name) => this._page.locator(`[role="tab"][data-testid^="tabstrip__tab__${name.toLowerCase()}"] [data-testid$="__badge"]`);
|
|
11
|
+
this._page = page;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=BaseTabObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseTabObjects.js","sourceRoot":"","sources":["../../../components/tab/BaseTabObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,OAAO,cAAe,SAAQ,oBAAoB;IAGtD,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAIhB,YAAO,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAE3D,gBAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAC7C,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,6CAA6C,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEhG,6CAA6C;QACtC,eAAU,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3F,iDAAiD;QAC1C,gBAAW,GAAG,CAAC,IAAY,EAAW,EAAE,CAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,6CAA6C,IAAI,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;QAbjH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;CAaF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import { BaseTab } from './BaseTab.js';
|
|
3
|
+
import { ComponentTabObjects } from './ComponentTabObjects.js';
|
|
4
|
+
export declare class ComponentTab extends BaseTab {
|
|
5
|
+
protected _objects: ComponentTabObjects;
|
|
6
|
+
constructor(page: Page, context?: Locator | null);
|
|
7
|
+
openListTab(tabindex?: string): Promise<void>;
|
|
8
|
+
getListTab(tabindex?: string): Promise<Locator>;
|
|
9
|
+
openFormTab(): Promise<void>;
|
|
10
|
+
getFormTab(): Promise<Locator>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BaseTab } from './BaseTab.js';
|
|
2
|
+
import { ComponentTabObjects } from './ComponentTabObjects.js';
|
|
3
|
+
export class ComponentTab extends BaseTab {
|
|
4
|
+
constructor(page, context = null) {
|
|
5
|
+
super(page, context);
|
|
6
|
+
this._objects = new ComponentTabObjects(page, context);
|
|
7
|
+
}
|
|
8
|
+
// --- Component-specific helpers ---
|
|
9
|
+
// Opens the “List” tab in this tabstrip (default tabindex = -1 for master).
|
|
10
|
+
// If tabindex is left empty, the default is "-1" which is the master/base list tabindex
|
|
11
|
+
async openListTab(tabindex = '-1') {
|
|
12
|
+
await this._objects.listTab(tabindex).click();
|
|
13
|
+
}
|
|
14
|
+
// Returns the “List” tab locator (scoped).
|
|
15
|
+
async getListTab(tabindex = '-1') {
|
|
16
|
+
return this._objects.listTab(tabindex);
|
|
17
|
+
}
|
|
18
|
+
// Opens the “Form” tab in this tabstrip (scoped).
|
|
19
|
+
async openFormTab() {
|
|
20
|
+
await this._objects.formTab().click();
|
|
21
|
+
}
|
|
22
|
+
// Returns the “Form” tab locator (scoped).
|
|
23
|
+
async getFormTab() {
|
|
24
|
+
return this._objects.formTab();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ComponentTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentTab.js","sourceRoot":"","sources":["../../../components/tab/ComponentTab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,OAAO,YAAa,SAAQ,OAAO;IAGvC,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,qCAAqC;IAErC,4EAA4E;IAC5E,wFAAwF;IACjF,KAAK,CAAC,WAAW,CAAC,WAAmB,IAAI;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAChD,CAAC;IAED,2CAA2C;IACpC,KAAK,CAAC,UAAU,CAAC,WAAmB,IAAI;QAC7C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,kDAAkD;IAC3C,KAAK,CAAC,WAAW;QACtB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC;IAED,2CAA2C;IACpC,KAAK,CAAC,UAAU;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import { BaseTabObjects } from './BaseTabObjects.js';
|
|
3
|
+
export declare class ComponentTabObjects extends BaseTabObjects {
|
|
4
|
+
constructor(page: Page, context?: Locator | null);
|
|
5
|
+
listTab: (tabindex: string) => Locator;
|
|
6
|
+
formTab: () => Locator;
|
|
7
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { BaseTabObjects } from './BaseTabObjects.js';
|
|
2
|
+
export class ComponentTabObjects extends BaseTabObjects {
|
|
3
|
+
constructor(page, context = null) {
|
|
4
|
+
super(page, context);
|
|
5
|
+
// Component-specific selectors
|
|
6
|
+
this.listTab = (tabindex) => this.tabList().locator(`[role="tab"][data-testid^="tabstrip__tab__list"][tabindex="${tabindex}"]`);
|
|
7
|
+
this.formTab = () => this.tabList().locator(`[role="tab"][data-testid^="tabstrip__tab__form"]`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ComponentTabObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComponentTabObjects.js","sourceRoot":"","sources":["../../../components/tab/ComponentTabObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IACrD,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAGvB,+BAA+B;QACxB,YAAO,GAAG,CAAC,QAAgB,EAAW,EAAE,CAC7C,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,8DAA8D,QAAQ,IAAI,CAAC,CAAC;QAE9F,YAAO,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAN3G,CAAC;CAOF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import { BaseTab } from './BaseTab.js';
|
|
3
|
+
import { DetailTabObjects } from './DetailTabObjects.js';
|
|
4
|
+
export declare class DetailTab extends BaseTab {
|
|
5
|
+
protected _objects: DetailTabObjects;
|
|
6
|
+
constructor(page: Page, context?: Locator | null);
|
|
7
|
+
getDetailTabById(name: string): Promise<Locator>;
|
|
8
|
+
getDetailTabByIndex(index: number): Promise<Locator>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseTab } from './BaseTab.js';
|
|
2
|
+
import { DetailTabObjects } from './DetailTabObjects.js';
|
|
3
|
+
export class DetailTab extends BaseTab {
|
|
4
|
+
constructor(page, context = null) {
|
|
5
|
+
super(page, context);
|
|
6
|
+
this._objects = new DetailTabObjects(page, context);
|
|
7
|
+
}
|
|
8
|
+
async getDetailTabById(name) {
|
|
9
|
+
return this._objects.tabByTestId(name);
|
|
10
|
+
}
|
|
11
|
+
async getDetailTabByIndex(index) {
|
|
12
|
+
return this._objects.tabByIndex(index);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=DetailTab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailTab.js","sourceRoot":"","sources":["../../../components/tab/DetailTab.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,OAAO,SAAU,SAAQ,OAAO;IAGpC,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,KAAa;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailTabObjects.js","sourceRoot":"","sources":["../../../components/tab/DetailTabObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IAClD,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvB,CAAC;CAGF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
export declare class TaskBar {
|
|
3
|
+
private _taskBarObjects;
|
|
4
|
+
/**
|
|
5
|
+
* @param taskBarContext the taskbar container element (same idea as Grid's context)
|
|
6
|
+
*/
|
|
7
|
+
constructor(page: Page, taskBarContext?: Locator | null);
|
|
8
|
+
/** returns all task buttons */
|
|
9
|
+
tasks: () => Locator;
|
|
10
|
+
/** returns a task button by its data-testid key */
|
|
11
|
+
getTaskById: (key: string) => Locator;
|
|
12
|
+
/** returns a task button by its visible label */
|
|
13
|
+
getTaskByLabel: (label: string) => Locator;
|
|
14
|
+
/** light action sugar (keep assertions in tests) */
|
|
15
|
+
clickById: (key: string) => Promise<void>;
|
|
16
|
+
clickByLabel: (label: string) => Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TaskBarObjects } from './TaskBarObjects.js';
|
|
2
|
+
export class TaskBar {
|
|
3
|
+
/**
|
|
4
|
+
* @param taskBarContext the taskbar container element (same idea as Grid's context)
|
|
5
|
+
*/
|
|
6
|
+
constructor(page, taskBarContext = null) {
|
|
7
|
+
/** returns all task buttons */
|
|
8
|
+
this.tasks = () => this._taskBarObjects.tasks(); // matches Grid's "rows()" noun-style
|
|
9
|
+
/** returns a task button by its data-testid key */
|
|
10
|
+
this.getTaskById = (key) => this._taskBarObjects.taskById(key);
|
|
11
|
+
/** returns a task button by its visible label */
|
|
12
|
+
this.getTaskByLabel = (label) => this._taskBarObjects.taskByLabel(label);
|
|
13
|
+
/** light action sugar (keep assertions in tests) */
|
|
14
|
+
this.clickById = async (key) => {
|
|
15
|
+
await this.getTaskById(key).click();
|
|
16
|
+
};
|
|
17
|
+
this.clickByLabel = async (label) => {
|
|
18
|
+
await this.getTaskByLabel(label).click();
|
|
19
|
+
};
|
|
20
|
+
this._taskBarObjects = new TaskBarObjects(page, taskBarContext);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=TaskBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskBar.js","sourceRoot":"","sources":["../../../components/task/TaskBar.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,OAAO,OAAO;IAGlB;;OAEG;IACH,YAAY,IAAU,EAAE,iBAAiC,IAAI;QAI7D,+BAA+B;QACxB,UAAK,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,qCAAqC;QAEjG,mDAAmD;QAC5C,gBAAW,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAElF,iDAAiD;QAC1C,mBAAc,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE5F,oDAAoD;QAC7C,cAAS,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;YACtD,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtC,CAAC,CAAC;QAEK,iBAAY,GAAG,KAAK,EAAE,KAAa,EAAiB,EAAE;YAC3D,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3C,CAAC,CAAC;QAnBA,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAClE,CAAC;CAmBF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import { BaseComponentObjects } from '../BaseComponentObjects.js';
|
|
3
|
+
export declare class TaskBarObjects extends BaseComponentObjects {
|
|
4
|
+
/**
|
|
5
|
+
* @param page playwright page
|
|
6
|
+
* @param context the taskbar container element itself (e.g. page.getByTestId('task-toolbar-section').nth(0))
|
|
7
|
+
*/
|
|
8
|
+
constructor(page: Page, context?: Locator | null);
|
|
9
|
+
/** returns the taskbar container (same as provided context) */
|
|
10
|
+
container: () => Locator;
|
|
11
|
+
/** all task buttons within this taskbar */
|
|
12
|
+
tasks: () => Locator;
|
|
13
|
+
/** task by its data-testid key, e.g. toolbar__task__task-edit-a-category */
|
|
14
|
+
taskById: (actionKey: string) => Locator;
|
|
15
|
+
/** task by accessible label, e.g. "Add new category" */
|
|
16
|
+
taskByLabel: (label: string) => Locator;
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseComponentObjects } from '../BaseComponentObjects.js';
|
|
2
|
+
export class TaskBarObjects extends BaseComponentObjects {
|
|
3
|
+
/**
|
|
4
|
+
* @param page playwright page
|
|
5
|
+
* @param context the taskbar container element itself (e.g. page.getByTestId('task-toolbar-section').nth(0))
|
|
6
|
+
*/
|
|
7
|
+
constructor(page, context = null) {
|
|
8
|
+
super(page, context);
|
|
9
|
+
/** returns the taskbar container (same as provided context) */
|
|
10
|
+
this.container = () => this.context;
|
|
11
|
+
/** all task buttons within this taskbar */
|
|
12
|
+
this.tasks = () => this.context.locator('button[data-testid^="toolbar__task__"]');
|
|
13
|
+
/** task by its data-testid key, e.g. toolbar__task__task-edit-a-category */
|
|
14
|
+
this.taskById = (actionKey) => this.context.getByTestId(`toolbar__task__${actionKey}`);
|
|
15
|
+
/** task by accessible label, e.g. "Add new category" */
|
|
16
|
+
this.taskByLabel = (label) => this.context.getByRole('button', { name: label });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=TaskBarObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskBarObjects.js","sourceRoot":"","sources":["../../../components/task/TaskBarObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,OAAO,cAAe,SAAQ,oBAAoB;IACtD;;;OAGG;IACH,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAGvB,+DAA+D;QACxD,cAAS,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QAE/C,2CAA2C;QACpC,UAAK,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,wCAAwC,CAAC,CAAC;QAE7F,4EAA4E;QACrE,aAAQ,GAAG,CAAC,SAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;QAE1G,wDAAwD;QACjD,gBAAW,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAZnG,CAAC;CAaF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
export declare class TaskTile {
|
|
3
|
+
private _taskTileObjects;
|
|
4
|
+
/**
|
|
5
|
+
* @param taskTileContext the tasktile container element
|
|
6
|
+
*/
|
|
7
|
+
constructor(page: Page, taskTileContext?: Locator | null);
|
|
8
|
+
/** returns all task tile buttons */
|
|
9
|
+
tasks: () => Locator;
|
|
10
|
+
getTaskById: (key: string) => Locator;
|
|
11
|
+
getTaskByLabel: (label: string) => Locator;
|
|
12
|
+
clickById: (key: string) => Promise<void>;
|
|
13
|
+
clickByLabel: (label: string) => Promise<void>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TaskTileObjects } from './TaskTileObjects.js';
|
|
2
|
+
export class TaskTile {
|
|
3
|
+
/**
|
|
4
|
+
* @param taskTileContext the tasktile container element
|
|
5
|
+
*/
|
|
6
|
+
constructor(page, taskTileContext = null) {
|
|
7
|
+
/** returns all task tile buttons */
|
|
8
|
+
this.tasks = () => this._taskTileObjects.tasks();
|
|
9
|
+
this.getTaskById = (key) => this._taskTileObjects.taskById(key);
|
|
10
|
+
this.getTaskByLabel = (label) => this._taskTileObjects.taskByLabel(label);
|
|
11
|
+
this.clickById = async (key) => {
|
|
12
|
+
await this.getTaskById(key).click();
|
|
13
|
+
};
|
|
14
|
+
this.clickByLabel = async (label) => {
|
|
15
|
+
await this.getTaskByLabel(label).click();
|
|
16
|
+
};
|
|
17
|
+
this._taskTileObjects = new TaskTileObjects(page, taskTileContext);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=TaskTile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskTile.js","sourceRoot":"","sources":["../../../components/task/TaskTile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,OAAO,QAAQ;IAGnB;;OAEG;IACH,YAAY,IAAU,EAAE,kBAAkC,IAAI;QAI9D,oCAAoC;QAC7B,UAAK,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAErD,gBAAW,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAE5E,mBAAc,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAEtF,cAAS,GAAG,KAAK,EAAE,GAAW,EAAiB,EAAE;YACtD,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACtC,CAAC,CAAC;QAEK,iBAAY,GAAG,KAAK,EAAE,KAAa,EAAiB,EAAE;YAC3D,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3C,CAAC,CAAC;QAhBA,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACrE,CAAC;CAgBF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Locator, Page } from '@playwright/test';
|
|
2
|
+
import { BaseComponentObjects } from '../BaseComponentObjects.js';
|
|
3
|
+
export declare class TaskTileObjects extends BaseComponentObjects {
|
|
4
|
+
constructor(page: Page, context?: Locator | null);
|
|
5
|
+
/** returns the taskbar container (same as provided context) */
|
|
6
|
+
container: () => Locator;
|
|
7
|
+
/** all task buttons within this taskbar */
|
|
8
|
+
tasks: () => Locator;
|
|
9
|
+
/** task by its data-testid key, e.g. tasktiles__task__task-edit-a-category */
|
|
10
|
+
taskById: (actionKey: string) => Locator;
|
|
11
|
+
/** task by accessible label, e.g. "Add new category" */
|
|
12
|
+
taskByLabel: (label: string) => Locator;
|
|
13
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BaseComponentObjects } from '../BaseComponentObjects.js';
|
|
2
|
+
export class TaskTileObjects extends BaseComponentObjects {
|
|
3
|
+
constructor(page, context = null) {
|
|
4
|
+
super(page, context);
|
|
5
|
+
/** returns the taskbar container (same as provided context) */
|
|
6
|
+
this.container = () => this.context;
|
|
7
|
+
/** all task buttons within this taskbar */
|
|
8
|
+
this.tasks = () => this.context.locator('button[data-testid^="tasktiles"]');
|
|
9
|
+
/** task by its data-testid key, e.g. tasktiles__task__task-edit-a-category */
|
|
10
|
+
this.taskById = (actionKey) => this.context.getByTestId(`tasktiles__task__${actionKey}`);
|
|
11
|
+
/** task by accessible label, e.g. "Add new category" */
|
|
12
|
+
this.taskByLabel = (label) => this.context.getByRole('button', { name: label });
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=TaskTileObjects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskTileObjects.js","sourceRoot":"","sources":["../../../components/task/TaskTileObjects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAElE,MAAM,OAAO,eAAgB,SAAQ,oBAAoB;IACvD,YAAY,IAAU,EAAE,UAA0B,IAAI;QACpD,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAGvB,+DAA+D;QACxD,cAAS,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QAE/C,2CAA2C;QACpC,UAAK,GAAG,GAAY,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAEvF,8EAA8E;QACvE,aAAQ,GAAG,CAAC,SAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;QAE5G,wDAAwD;QACjD,gBAAW,GAAG,CAAC,KAAa,EAAW,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAZnG,CAAC;CAaF"}
|
package/dist/config.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"defaultApplication": "",
|
|
3
|
+
"defaultPlatform": 3,
|
|
4
|
+
"loginOptionsDisabled": false,
|
|
5
|
+
"loginOptionsHidden": false,
|
|
6
|
+
"installNotificationDisabled": true,
|
|
7
|
+
"installNotificationExpirationInDays": 30,
|
|
8
|
+
"useServiceWorker": false,
|
|
9
|
+
"useFormFieldBackgroundColor": true
|
|
10
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** biome-ignore-all lint/suspicious/noExplicitAny: needed flexibility */
|
|
2
|
+
import type { Locator } from '@playwright/test';
|
|
3
|
+
declare class LookupDropdown {
|
|
4
|
+
private _locator;
|
|
5
|
+
constructor(locator: Locator);
|
|
6
|
+
lookupSelect(optionToSelect: string): Promise<void>;
|
|
7
|
+
selectOption(optionText: string): Promise<void>;
|
|
8
|
+
private select;
|
|
9
|
+
}
|
|
10
|
+
export declare function createLookupDropdown(locator: Locator): LookupDropdown & Locator;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { escapeRegex } from '../helpers/RegexHelper.js';
|
|
2
|
+
class LookupDropdown {
|
|
3
|
+
constructor(locator) {
|
|
4
|
+
this._locator = locator;
|
|
5
|
+
}
|
|
6
|
+
async lookupSelect(optionToSelect) {
|
|
7
|
+
await Promise.all([this._locator.click(), this._locator.page().waitForResponse('**/list_**')]);
|
|
8
|
+
await this._locator.fill(optionToSelect);
|
|
9
|
+
await this._locator.page().waitEventHandler.setCanContinue(true);
|
|
10
|
+
await this.select(optionToSelect);
|
|
11
|
+
}
|
|
12
|
+
async selectOption(optionText) {
|
|
13
|
+
await this._locator.click();
|
|
14
|
+
await this.select(optionText);
|
|
15
|
+
}
|
|
16
|
+
async select(optionToSelect) {
|
|
17
|
+
const optionsToSelectRegex = new RegExp(`^${escapeRegex(optionToSelect)}$`, 'i');
|
|
18
|
+
await this._locator.page().getByTestId('autocomplete__menu').getByText(optionsToSelectRegex).click();
|
|
19
|
+
await this._locator
|
|
20
|
+
.page()
|
|
21
|
+
.waitForFunction((el) => document.activeElement === el, await this._locator.elementHandle());
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function createLookupDropdown(locator) {
|
|
25
|
+
const dropdown = new LookupDropdown(locator);
|
|
26
|
+
return new Proxy(dropdown, {
|
|
27
|
+
get(target, prop, receiver) {
|
|
28
|
+
if (prop in target) {
|
|
29
|
+
return Reflect.get(target, prop, receiver);
|
|
30
|
+
}
|
|
31
|
+
const value = locator[prop];
|
|
32
|
+
if (typeof value === 'function') {
|
|
33
|
+
return value.bind(locator);
|
|
34
|
+
}
|
|
35
|
+
return value;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=LookupDropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LookupDropdown.js","sourceRoot":"","sources":["../../controls/LookupDropdown.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,MAAM,cAAc;IAGlB,YAAY,OAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,cAAsB;QACvC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAE/F,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAEjE,MAAM,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,cAAsB;QACzC,MAAM,oBAAoB,GAAG,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAEjF,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QACrG,MAAM,IAAI,CAAC,QAAQ;aAChB,IAAI,EAAE;aACN,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa,KAAK,EAAE,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IACjG,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IAE7C,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;QACzB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACnB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAC7C,CAAC;YAED,MAAM,KAAK,GAAI,OAAe,CAAC,IAAI,CAAC,CAAC;YAErC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAA6B,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './LookupDropdown.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../controls/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
package/dist/enums/LogLevel.d.ts
CHANGED
package/dist/enums/LogLevel.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
export var LogLevel;
|
|
2
2
|
(function (LogLevel) {
|
|
3
3
|
// Order by severity
|
|
4
|
-
LogLevel["FATAL"] = "FATAL";
|
|
5
4
|
LogLevel["ERROR"] = "ERROR";
|
|
6
5
|
LogLevel["WARN"] = "WARN";
|
|
7
6
|
LogLevel["INFO"] = "INFO";
|
|
8
|
-
LogLevel["STEP"] = "STEP";
|
|
9
7
|
LogLevel["DEBUG"] = "DEBUG";
|
|
8
|
+
LogLevel["ALL"] = "ALL";
|
|
10
9
|
})(LogLevel || (LogLevel = {}));
|
|
11
10
|
//# sourceMappingURL=LogLevel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LogLevel.js","sourceRoot":"","sources":["../../enums/LogLevel.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"LogLevel.js","sourceRoot":"","sources":["../../enums/LogLevel.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,oBAAoB;IACpB,2BAAe,CAAA;IACf,yBAAa,CAAA;IACb,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,uBAAW,CAAA;AACb,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './ExportFormat.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../enums/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -6,7 +6,7 @@ export class TestifyService {
|
|
|
6
6
|
this.testRunId = '';
|
|
7
7
|
this.token = `Bearer ${process.env.TESTIFY_TOKEN}`;
|
|
8
8
|
this.projectId = process.env.TESTIFY_PROJECT_ID || '';
|
|
9
|
-
// biome-ignore lint/style/noNonNullAssertion:
|
|
9
|
+
// biome-ignore lint/style/noNonNullAssertion: Acceptable technical debt
|
|
10
10
|
this.baseUrl = process.env.TESTIFY_BASE_URL.replace(/\/$/, '');
|
|
11
11
|
this.axiosInstance = axios.create({
|
|
12
12
|
baseURL: this.baseUrl,
|
|
@@ -33,10 +33,13 @@ export class TestifyService {
|
|
|
33
33
|
async getTestRunId(testRunName) {
|
|
34
34
|
try {
|
|
35
35
|
const url = `/api/v1/TestRun?projectId=${this.projectId}`;
|
|
36
|
-
const response = await this.axiosInstance.get(url, {
|
|
36
|
+
const response = await this.axiosInstance.get(url, {
|
|
37
|
+
headers: this.headers('text/plain')
|
|
38
|
+
});
|
|
37
39
|
const testRunList = response.data;
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
const found = testRunList.find(
|
|
41
|
+
// biome-ignore lint/suspicious/noExplicitAny: Acceptable technical debt
|
|
42
|
+
(tr) => tr.name?.toLowerCase() === testRunName.toLowerCase());
|
|
40
43
|
return found?.id?.toString() ?? '';
|
|
41
44
|
}
|
|
42
45
|
catch (err) {
|
|
@@ -57,7 +60,9 @@ export class TestifyService {
|
|
|
57
60
|
async getProjectName() {
|
|
58
61
|
try {
|
|
59
62
|
const url = `/api/v1/Project/${this.projectId}`;
|
|
60
|
-
const response = await this.axiosInstance.get(url, {
|
|
63
|
+
const response = await this.axiosInstance.get(url, {
|
|
64
|
+
headers: this.headers('text/plain')
|
|
65
|
+
});
|
|
61
66
|
const project = response.data;
|
|
62
67
|
return project.name;
|
|
63
68
|
}
|
|
@@ -103,10 +108,13 @@ export class TestifyService {
|
|
|
103
108
|
async getTestResultId(testCaseId) {
|
|
104
109
|
try {
|
|
105
110
|
const url = `/api/v1/Result?testRunId=${this.testRunId}`;
|
|
106
|
-
const response = await this.axiosInstance.get(url, {
|
|
111
|
+
const response = await this.axiosInstance.get(url, {
|
|
112
|
+
headers: this.headers('text/plain')
|
|
113
|
+
});
|
|
107
114
|
const results = response.data;
|
|
108
|
-
|
|
109
|
-
|
|
115
|
+
const found = results.find(
|
|
116
|
+
// biome-ignore lint/suspicious/noExplicitAny: Acceptable technical debt
|
|
117
|
+
(r) => r.testCaseId?.toString() === testCaseId);
|
|
110
118
|
return found?.id?.toString() ?? '';
|
|
111
119
|
}
|
|
112
120
|
catch (err) {
|
|
@@ -117,7 +125,7 @@ export class TestifyService {
|
|
|
117
125
|
async getTestCaseId(testCaseName) {
|
|
118
126
|
try {
|
|
119
127
|
const testCases = await this.getTestCases();
|
|
120
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
128
|
+
// biome-ignore lint/suspicious/noExplicitAny: Acceptable technical debt
|
|
121
129
|
const found = testCases.find((tc) => tc.name === testCaseName);
|
|
122
130
|
return found?.id?.toString() ?? '';
|
|
123
131
|
}
|
|
@@ -145,7 +153,7 @@ export class TestifyService {
|
|
|
145
153
|
console.error('createTestCase failed:', err);
|
|
146
154
|
}
|
|
147
155
|
}
|
|
148
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
156
|
+
// biome-ignore lint/suspicious/noExplicitAny: Acceptable technical debt
|
|
149
157
|
testCaseExists(testCases, testName) {
|
|
150
158
|
try {
|
|
151
159
|
return testCases.some((tc) => tc.name?.toLowerCase() === testName.toLowerCase());
|
|
@@ -155,11 +163,13 @@ export class TestifyService {
|
|
|
155
163
|
return false;
|
|
156
164
|
}
|
|
157
165
|
}
|
|
158
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
166
|
+
// biome-ignore lint/suspicious/noExplicitAny: Acceptable technical debt
|
|
159
167
|
async getTestCases() {
|
|
160
168
|
try {
|
|
161
169
|
const url = `/api/v1/TestCase?projectId=${this.projectId}`;
|
|
162
|
-
const response = await this.axiosInstance.get(url, {
|
|
170
|
+
const response = await this.axiosInstance.get(url, {
|
|
171
|
+
headers: this.headers('text/plain')
|
|
172
|
+
});
|
|
163
173
|
return response.data;
|
|
164
174
|
}
|
|
165
175
|
catch (err) {
|