@bigbinary/neeto-playwright-commons 1.17.3 → 1.17.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -4
- package/index.cjs.js +77 -22
- package/index.cjs.js.map +1 -1
- package/index.d.ts +14 -1
- package/index.js +77 -23
- package/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,17 +3,24 @@
|
|
|
3
3
|
A library that packages common boilerplate Playwright code necessary for all
|
|
4
4
|
neeto products.
|
|
5
5
|
|
|
6
|
-
##
|
|
7
|
-
|
|
8
|
-
Install from npm:
|
|
6
|
+
## Installing neeto-playwright-commons in a Playwright Project
|
|
9
7
|
|
|
8
|
+
First, navigate to the Playwright test directory:
|
|
9
|
+
```bash
|
|
10
|
+
cd playwright-tests
|
|
11
|
+
```
|
|
12
|
+
Then, install the package using Yarn:
|
|
10
13
|
```bash
|
|
11
14
|
yarn add "@bigbinary/neeto-playwright-commons@latest"
|
|
12
15
|
```
|
|
16
|
+
If `neeto-playwright-commons` is already listed in `package.json` of Playwright project, simply install dependencies with:
|
|
17
|
+
```bash
|
|
18
|
+
yarn install
|
|
19
|
+
```
|
|
13
20
|
|
|
14
21
|
## Dependencies
|
|
15
22
|
|
|
16
|
-
**
|
|
23
|
+
**neeto-playwright-commons** has some peer dependencies which can be installed
|
|
17
24
|
using the commands listed below:
|
|
18
25
|
|
|
19
26
|
### `neeto-cist`
|
package/index.cjs.js
CHANGED
|
@@ -140,6 +140,9 @@ const COLOR = {
|
|
|
140
140
|
softBlue: "rgb(230, 244, 255)",
|
|
141
141
|
};
|
|
142
142
|
const DATE_TEXTS = { now: "Now", nextYear: "next-year" };
|
|
143
|
+
const EMPTY_STORAGE_STATE = {
|
|
144
|
+
storageState: { cookies: [], origins: [] },
|
|
145
|
+
};
|
|
143
146
|
|
|
144
147
|
/* eslint-disable playwright/no-skipped-test */
|
|
145
148
|
const execCommand = (command) => child_process.execSync(command)
|
|
@@ -3912,12 +3915,14 @@ class CustomCommands {
|
|
|
3912
3915
|
};
|
|
3913
3916
|
this.recursiveMethod = async (callback, condition, timeout, startTime, iteration) => {
|
|
3914
3917
|
if (Date.now() - timeout >= startTime) {
|
|
3918
|
+
await callback();
|
|
3915
3919
|
return false;
|
|
3916
3920
|
}
|
|
3917
3921
|
else if (await condition()) {
|
|
3918
3922
|
return await callback();
|
|
3919
3923
|
}
|
|
3920
|
-
|
|
3924
|
+
const timeToWaitInSecs = iteration > 3 ? 10 : Math.pow(2, iteration);
|
|
3925
|
+
await this.waitUntilTimeout(timeToWaitInSecs * 1000);
|
|
3921
3926
|
return await this.recursiveMethod(callback, condition, timeout, startTime, iteration + 1);
|
|
3922
3927
|
};
|
|
3923
3928
|
this.executeRecursively = async ({ callback, condition, timeout = 5000, }) => {
|
|
@@ -21754,6 +21759,41 @@ class HelpAndProfilePage {
|
|
|
21754
21759
|
});
|
|
21755
21760
|
});
|
|
21756
21761
|
};
|
|
21762
|
+
this.openAuthLinkAndVerifyV1 = async ({ linkName, redirectLink, }) => {
|
|
21763
|
+
var _a, _b;
|
|
21764
|
+
await this.page
|
|
21765
|
+
.getByTestId(COMMON_SELECTORS.pane)
|
|
21766
|
+
.getByTestId(COMMON_SELECTORS.dropdownIcon)
|
|
21767
|
+
.click();
|
|
21768
|
+
await this.page
|
|
21769
|
+
.getByTestId(COMMON_SELECTORS.dropdownContainer)
|
|
21770
|
+
.getByRole("link", { name: linkName })
|
|
21771
|
+
.click();
|
|
21772
|
+
await test$1.expect(this.page).toHaveURL(new RegExp(NEETO_AUTH_BASE_URL((_b = (_a = readFileSyncIfExists()) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.subdomainName)));
|
|
21773
|
+
await test$1.expect(this.page).toHaveURL(new RegExp(redirectLink));
|
|
21774
|
+
await this.page.goBack();
|
|
21775
|
+
};
|
|
21776
|
+
this.verifyProfileAndOrganizationLinksV3 = async () => {
|
|
21777
|
+
await test$1.test.step("Step 1: Open Help center and verify", this.openHelpCenterV2);
|
|
21778
|
+
await test$1.test.step("Step 2: Open My profile link and verify", async () => {
|
|
21779
|
+
const profileSidebarHeader = this.page.getByTestId(COMMON_SELECTORS.paneHeader);
|
|
21780
|
+
await this.page
|
|
21781
|
+
.getByTestId(PROFILE_SECTION_SELECTORS.myProfileButton)
|
|
21782
|
+
.click();
|
|
21783
|
+
await test$1.expect(profileSidebarHeader).toContainText(this.t("neetoTeamMembers.profile.common.myProfile"));
|
|
21784
|
+
await this.openAuthLinkAndVerifyV1({
|
|
21785
|
+
redirectLink: ROUTES.myProfile,
|
|
21786
|
+
linkName: this.t("neetoTeamMembers.buttons.manageBillingAndSubscriptions"),
|
|
21787
|
+
});
|
|
21788
|
+
});
|
|
21789
|
+
await test$1.test.step("Step 3: Open Help center and verify", this.openHelpCenterV2);
|
|
21790
|
+
await test$1.test.step("Step 4: Open My organization link and verify", async () => {
|
|
21791
|
+
await this.page
|
|
21792
|
+
.getByTestId(PROFILE_SECTION_SELECTORS.profileOrganizationSettingsButton)
|
|
21793
|
+
.click();
|
|
21794
|
+
await test$1.expect(this.page).toHaveURL(new RegExp(ROUTES.dashboard));
|
|
21795
|
+
});
|
|
21796
|
+
};
|
|
21757
21797
|
this.page = page;
|
|
21758
21798
|
this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
|
|
21759
21799
|
this.chatApiBaseURL = chatApiBaseURL;
|
|
@@ -24028,7 +24068,9 @@ class ZapierPage extends IntegrationBase {
|
|
|
24028
24068
|
name: ZAPIER_WEB_TEXTS.continue,
|
|
24029
24069
|
exact: true,
|
|
24030
24070
|
});
|
|
24031
|
-
await zapierWebPage.goto(THIRD_PARTY_ROUTES.zapier.login
|
|
24071
|
+
await zapierWebPage.goto(THIRD_PARTY_ROUTES.zapier.login, {
|
|
24072
|
+
referer: THIRD_PARTY_ROUTES.zapier.login,
|
|
24073
|
+
});
|
|
24032
24074
|
await test$1.expect(zapierWebPage.getByRole("link", {
|
|
24033
24075
|
name: ZAPIER_WEB_TEXTS.startFreeWithEmail,
|
|
24034
24076
|
})).toBeVisible();
|
|
@@ -25758,22 +25800,29 @@ const toggleColumnCheckboxAndVerifyVisibility = async ({ page, tableColumns, sho
|
|
|
25758
25800
|
};
|
|
25759
25801
|
const verifyFreezeColumnAction = async (page, t) => {
|
|
25760
25802
|
const columnHeader = page.getByRole("columnheader");
|
|
25761
|
-
const checkboxVisible = await
|
|
25803
|
+
const [columnHeaders, originalColumnNames, checkboxVisible] = await Promise.all([
|
|
25804
|
+
columnHeader.all(),
|
|
25805
|
+
columnHeader.allTextContents(),
|
|
25806
|
+
columnHeader.getByRole("checkbox").isVisible(),
|
|
25807
|
+
]);
|
|
25762
25808
|
const columnOffset = checkboxVisible ? 1 : 0;
|
|
25763
|
-
|
|
25764
|
-
|
|
25765
|
-
|
|
25766
|
-
|
|
25809
|
+
await unFreezeAllColumns({ columnHeaders, columnOffset, page, t });
|
|
25810
|
+
await toggleColumnState({ columnHeaders, columnOffset, page });
|
|
25811
|
+
await validateColumnNames(columnHeaders, columnOffset, originalColumnNames);
|
|
25812
|
+
await toggleColumnState({
|
|
25813
|
+
columnHeaders,
|
|
25814
|
+
columnOffset,
|
|
25815
|
+
action: "Unfreeze",
|
|
25816
|
+
page,
|
|
25767
25817
|
});
|
|
25818
|
+
await test$1.expect(columnHeader).toHaveText(originalColumnNames);
|
|
25819
|
+
};
|
|
25820
|
+
const unFreezeAllColumns = async ({ columnHeaders, columnOffset, page, t, }) => {
|
|
25768
25821
|
const unFreezeColumnButton = page
|
|
25769
25822
|
.getByTestId(TABLE_SELECTORS.freezeUnfreezeButton)
|
|
25770
25823
|
.filter({
|
|
25771
25824
|
hasText: t("neetoui.table.unFreezeColumn"),
|
|
25772
25825
|
});
|
|
25773
|
-
const [columnHeaders, originalColumnNames] = await Promise.all([
|
|
25774
|
-
columnHeader.all(),
|
|
25775
|
-
columnHeader.allTextContents(),
|
|
25776
|
-
]);
|
|
25777
25826
|
for (let i = columnHeaders.length - 1; i >= columnOffset; i--) {
|
|
25778
25827
|
const currentHeader = columnHeaders[i];
|
|
25779
25828
|
await currentHeader.getByTestId(TABLE_SELECTORS.columnMenuButton).click();
|
|
@@ -25783,22 +25832,27 @@ const verifyFreezeColumnAction = async (page, t) => {
|
|
|
25783
25832
|
.getByTestId(TABLE_SELECTORS.columnMenuButton)
|
|
25784
25833
|
.click();
|
|
25785
25834
|
}
|
|
25786
|
-
|
|
25787
|
-
|
|
25788
|
-
|
|
25789
|
-
|
|
25835
|
+
};
|
|
25836
|
+
const toggleColumnState = async ({ columnHeaders, columnOffset, action = "Freeze", page, }) => {
|
|
25837
|
+
const firstColumnIndex = columnOffset;
|
|
25838
|
+
const lastColumnIndex = columnHeaders.length - 1;
|
|
25839
|
+
const targetIndex = action === "Freeze" ? lastColumnIndex : firstColumnIndex;
|
|
25840
|
+
const toggleButton = page
|
|
25841
|
+
.getByTestId(TABLE_SELECTORS.freezeUnfreezeButton)
|
|
25842
|
+
.filter({ hasText: action });
|
|
25843
|
+
for (let i = firstColumnIndex; i < lastColumnIndex; i++) {
|
|
25844
|
+
const columnHeader = columnHeaders[targetIndex];
|
|
25845
|
+
(await page.getByTestId(COMMON_SELECTORS.tooltip).isVisible()) &&
|
|
25846
|
+
(await page.getByTestId(COMMON_SELECTORS.heading).hover());
|
|
25847
|
+
await columnHeader.getByTestId(TABLE_SELECTORS.columnMenuButton).click();
|
|
25848
|
+
await toggleButton.click();
|
|
25790
25849
|
}
|
|
25850
|
+
};
|
|
25851
|
+
const validateColumnNames = async (columnHeaders, columnOffset, originalColumnNames) => {
|
|
25791
25852
|
for (let i = columnOffset; i < originalColumnNames.length - 1; i++) {
|
|
25792
25853
|
const expectedName = originalColumnNames[i + 1];
|
|
25793
25854
|
await test$1.expect(columnHeaders[i]).toHaveText(expectedName);
|
|
25794
25855
|
}
|
|
25795
|
-
for (let i = columnOffset; i < columnHeaders.length - 1; i++) {
|
|
25796
|
-
const currentHeader = columnHeaders[columnOffset];
|
|
25797
|
-
await currentHeader.getByTestId(TABLE_SELECTORS.columnMenuButton).click();
|
|
25798
|
-
await unFreezeColumnButton.click();
|
|
25799
|
-
}
|
|
25800
|
-
const currentColumnNames = await columnHeader.allTextContents();
|
|
25801
|
-
test$1.expect(currentColumnNames).toStrictEqual(originalColumnNames);
|
|
25802
25856
|
};
|
|
25803
25857
|
const tableUtils = {
|
|
25804
25858
|
verifyTableColumnsExistence,
|
|
@@ -158876,6 +158930,7 @@ exports.DATE_TEXTS = DATE_TEXTS;
|
|
|
158876
158930
|
exports.DESCRIPTION_EDITOR_TEXTS = DESCRIPTION_EDITOR_TEXTS;
|
|
158877
158931
|
exports.EMBED_SELECTORS = EMBED_SELECTORS;
|
|
158878
158932
|
exports.EMOJI_LABEL = EMOJI_LABEL;
|
|
158933
|
+
exports.EMPTY_STORAGE_STATE = EMPTY_STORAGE_STATE;
|
|
158879
158934
|
exports.ENGAGE_TEXTS = ENGAGE_TEXTS;
|
|
158880
158935
|
exports.ENVIRONMENT = ENVIRONMENT;
|
|
158881
158936
|
exports.EXPANDED_FONT_SIZE = EXPANDED_FONT_SIZE;
|