@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 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
- ## Installation Instructions
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
- **neetoPlaywrightCommons** has some peer dependencies which can be installed
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
- await this.waitUntilTimeout(Math.pow(2, iteration) * 1000);
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 columnHeader.getByRole("checkbox").isVisible();
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
- const freezeColumnButton = page
25764
- .getByTestId(TABLE_SELECTORS.freezeUnfreezeButton)
25765
- .filter({
25766
- hasText: t("neetoui.table.freezeColumn"),
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
- for (let i = columnOffset; i < columnHeaders.length - 1; i++) {
25787
- const lastDropdown = columnHeaders[columnHeaders.length - 1];
25788
- await lastDropdown.getByTestId(TABLE_SELECTORS.columnMenuButton).click();
25789
- await freezeColumnButton.click();
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;