@bigbinary/neeto-playwright-commons 1.9.7 → 1.9.9

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/index.cjs.js CHANGED
@@ -355,6 +355,9 @@ const COMMON_SELECTORS = {
355
355
  sidebarSubLink: (label) => `${hyphenize(label)}-sub-link`,
356
356
  sidebarGoBackButton: (label) => `${hyphenize(label)}-go-back-button`,
357
357
  selectSingleValue: "select-single-value",
358
+ actionSelectIndicator: "action-select-indicator",
359
+ takeActionDropdown: "take-action-dropdown-icon",
360
+ columnsSearchInput: "neeto-ui-columns-search",
358
361
  };
359
362
 
360
363
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -12706,6 +12709,10 @@ const CHAT_WIDGET_TEXTS = {
12706
12709
  };
12707
12710
  const MEMBER_TEXTS = {
12708
12711
  agent: "Agent",
12712
+ admin: "Admin",
12713
+ selectAll: "Select All",
12714
+ hide: "Hide all",
12715
+ show: "Show all",
12709
12716
  };
12710
12717
  const INTEGRATIONS_TEXTS = {
12711
12718
  connectHeader: (integration) => `Connect your ${integration} account`,
@@ -13667,6 +13674,7 @@ const NEETO_EDITOR_SELECTORS = {
13667
13674
  videoWrapper: ".neeto-editor__video-wrapper",
13668
13675
  paragraphOption: "neeto-editor-fixed-menu-font-size-option-body2",
13669
13676
  attachmentPreview: "ne-attachments-wrapper",
13677
+ imageUploadLinkButton: "neeto-editor-media-uploader-link-tab",
13670
13678
  };
13671
13679
  const NEETO_TEXT_MODIFIER_SELECTORS = {
13672
13680
  strikeOption: "neeto-editor-fixed-menu-strike-option",
@@ -13815,10 +13823,8 @@ class EditorPage {
13815
13823
  timeout: 15000,
13816
13824
  });
13817
13825
  await this.imageUploadOption.click();
13818
- // TODO: Fix the selector after the issue is resolved: https://github.com/bigbinary/neeto-editor/issues/1048
13819
13826
  await this.page
13820
- .getByTestId(COMMON_SELECTORS.tabItem)
13821
- .getByText(DESCRIPTION_EDITOR_TEXTS.link)
13827
+ .getByTestId(NEETO_EDITOR_SELECTORS.imageUploadLinkButton)
13822
13828
  .click();
13823
13829
  await this.page
13824
13830
  .getByTestId(NEETO_EDITOR_SELECTORS.imageUploadLinkInput)
@@ -14043,6 +14049,232 @@ class ImageUploader {
14043
14049
  }
14044
14050
  }
14045
14051
 
14052
+ const MEMBER_SELECTORS = {
14053
+ membersTab: "members-nav-tab",
14054
+ newButton: "ntm-add-member-button",
14055
+ continueButton: "ntm-manage-member-continue-button",
14056
+ submitButton: "ntm-manage-member-submit-button",
14057
+ searchTextField: "ntm-search-members-input",
14058
+ deactivatedAgentsButton: "ntm-members-menubar-deactivated-block",
14059
+ activatedMembersButton: "ntm-members-menubar-active-block",
14060
+ columnCheckBox: "neeto-ui-columns-checkbox",
14061
+ roleLabel: (role) => `${joinHyphenCase(role)}-radio-label`,
14062
+ teamMembersTable: "ntm-members-table",
14063
+ dropDownIcon: "ntm-members-table-row-dropdown-button",
14064
+ editButton: "ntm-edit-member-button",
14065
+ menuBarHeading: "ntm-members-menubar-heading",
14066
+ activateOrDeactivateMember: "ntm-deactivate-member-button",
14067
+ columnsButton: "columns-dropdown-button",
14068
+ columnsDropdownContainer: "columns-dropdown-container",
14069
+ emailDropdownItemLabel: "email-checkbox-label",
14070
+ roleDropdownItemLabel: "role-checkbox-label",
14071
+ inviteStatusDropdownItemLabel: "invite-status-checkbox-label",
14072
+ heading: "ntm-manage-members-pane-header",
14073
+ activateButton: "ntm-activate-members-button",
14074
+ deactivateButton: "ntm-deactivate-members-button",
14075
+ rolesButton: "ntm-manage-member-roles-button",
14076
+ statusTag: "ntm-member-status-tag",
14077
+ menubarSubLink: (sublink) => `members-menubar-${sublink}-block-sub-link`,
14078
+ takeActionStateOption: (option = "") => `ntm-${hyphenize(option)}-members-button`,
14079
+ checkboxLabel: (label) => `${hyphenize(label)}-checkbox-label`,
14080
+ };
14081
+ const MEMBER_FORM_SELECTORS = {
14082
+ emailTextField: "email-select-input-field",
14083
+ firstNameTextField: "ntm-edit-member-first-name-text-field",
14084
+ lastNameTextField: "ntm-edit-member-last-name-text-field",
14085
+ emailInput: "ntm-manage-member-email-input",
14086
+ emailErrorField: "emails-input-error",
14087
+ cancelButton: "ntm-manage-member-cancel-button",
14088
+ };
14089
+
14090
+ class TeamMembers {
14091
+ constructor({ page, neetoPlaywrightUtilities, }) {
14092
+ this.navigateToTeamMembersSublink = async (sublink = "all") => {
14093
+ await this.page.getByTestId(MEMBER_SELECTORS.membersTab).click();
14094
+ await this.page
14095
+ .getByTestId(MEMBER_SELECTORS.menubarSubLink(sublink))
14096
+ .click();
14097
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14098
+ };
14099
+ this.addMemberViaUI = async ({ emails = [faker.faker.internet.exampleEmail()], role = "standard", } = {}) => {
14100
+ await this.page.getByTestId(MEMBER_SELECTORS.newButton).click();
14101
+ await this.page
14102
+ .getByTestId(MEMBER_FORM_SELECTORS.emailTextField)
14103
+ .fill(emails.join(", "));
14104
+ await this.page.getByTestId(MEMBER_SELECTORS.roleLabel(role)).click();
14105
+ IS_STAGING_ENV &&
14106
+ (await this.page
14107
+ .getByTestId(COMMON_SELECTORS.paneBody)
14108
+ .getByTestId(COMMON_SELECTORS.checkboxLabel)
14109
+ .click());
14110
+ await this.page.getByTestId(MEMBER_SELECTORS.continueButton).click();
14111
+ await this.page.getByTestId(MEMBER_SELECTORS.submitButton).click();
14112
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14113
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14114
+ };
14115
+ this.searchAndVerifyMemberByEmail = async ({ email, interceptOptions, }) => {
14116
+ const searchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14117
+ responseUrl: API_ROUTES.teamMembers.index,
14118
+ ...interceptOptions,
14119
+ });
14120
+ await this.page.getByTestId(MEMBER_SELECTORS.searchTextField).fill(email);
14121
+ await searchMembers;
14122
+ await test$1.expect(this.page.getByTestId(NEETO_FILTERS_SELECTORS.searchTermBlock)).toContainText(email);
14123
+ await test$1.expect(this.page.getByRole("cell", { name: email, exact: true })).toBeVisible();
14124
+ await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.tableSpinner)).toBeHidden();
14125
+ };
14126
+ this.editMemberViaUI = async ({ email = "", firstName = "", lastName = "", role = "standard", } = {}) => {
14127
+ await this.page.getByTestId(MEMBER_SELECTORS.dropDownIcon).click();
14128
+ await this.page.getByTestId(MEMBER_SELECTORS.editButton).click();
14129
+ neetoCist.isPresent(email) &&
14130
+ (await this.page
14131
+ .getByTestId(MEMBER_FORM_SELECTORS.emailInput)
14132
+ .fill(email));
14133
+ neetoCist.isPresent(firstName) &&
14134
+ (await this.page
14135
+ .getByTestId(MEMBER_FORM_SELECTORS.firstNameTextField)
14136
+ .fill(firstName));
14137
+ neetoCist.isPresent(lastName) &&
14138
+ (await this.page
14139
+ .getByTestId(MEMBER_FORM_SELECTORS.lastNameTextField)
14140
+ .fill(lastName));
14141
+ await this.page.getByTestId(MEMBER_SELECTORS.roleLabel(role)).click();
14142
+ await this.page.getByTestId(MEMBER_SELECTORS.submitButton).click();
14143
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14144
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14145
+ };
14146
+ this.toggleMemberStateViaUI = async () => {
14147
+ await this.page.getByTestId(MEMBER_SELECTORS.dropDownIcon).click();
14148
+ await this.page
14149
+ .getByTestId(MEMBER_SELECTORS.activateOrDeactivateMember)
14150
+ .click();
14151
+ await this.page
14152
+ .getByTestId(COMMON_SELECTORS.alertModalSubmitButton)
14153
+ .click();
14154
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14155
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14156
+ };
14157
+ this.filterMembersByMultiSelect = async ({ selectedOptions = [], selectContainerLocator = NEETO_FILTERS_SELECTORS.roleSelectContainer, }) => {
14158
+ await this.page
14159
+ .getByTestId(selectContainerLocator)
14160
+ .getByTestId(COMMON_SELECTORS.actionSelectIndicator)
14161
+ .click();
14162
+ for (const option of selectedOptions) {
14163
+ const fetchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14164
+ responseUrl: API_ROUTES.teamMembers.index,
14165
+ });
14166
+ await this.page
14167
+ .getByTestId(COMMON_SELECTORS.selectOption(option))
14168
+ .click();
14169
+ await fetchMembers;
14170
+ }
14171
+ };
14172
+ this.filterMembers = async ({ email = { id: "", condition: "Is" }, roles = [], name = "", }) => {
14173
+ await this.page.getByTestId(NEETO_FILTERS_SELECTORS.filterButton).click();
14174
+ if (neetoCist.isPresent(email.id)) {
14175
+ await this.page
14176
+ .getByTestId(NEETO_FILTERS_SELECTORS.emailSelectContainer)
14177
+ .getByTestId(COMMON_SELECTORS.actionSelectIndicator)
14178
+ .click();
14179
+ await this.page
14180
+ .getByTestId(COMMON_SELECTORS.selectOption(email.condition))
14181
+ .click();
14182
+ const fetchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14183
+ responseUrl: API_ROUTES.teamMembers.index,
14184
+ });
14185
+ await this.page
14186
+ .getByTestId(NEETO_FILTERS_SELECTORS.filtersEmailFilter)
14187
+ .fill(email.id);
14188
+ await fetchMembers;
14189
+ }
14190
+ if (neetoCist.isPresent(name)) {
14191
+ const fetchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14192
+ responseUrl: API_ROUTES.teamMembers.index,
14193
+ });
14194
+ await this.page
14195
+ .getByTestId(NEETO_FILTERS_SELECTORS.neetoFiltersNameFilterField)
14196
+ .fill(name);
14197
+ await fetchMembers;
14198
+ }
14199
+ neetoCist.isPresent(roles) &&
14200
+ (await this.filterMembersByMultiSelect({ selectedOptions: roles }));
14201
+ await this.page
14202
+ .getByTestId(NEETO_FILTERS_SELECTORS.filterDoneButton)
14203
+ .click();
14204
+ };
14205
+ // TODO: Change the selector after this issue is resolved: https://github.com/bigbinary/neeto-team-members-nano/issues/258
14206
+ this.getMemberRowByName = (name) => this.page.getByRole("row", { name: `avatar--${name}` });
14207
+ this.takeActionOnMembers = async ({ names = [], state, action, }) => {
14208
+ if (neetoCist.isPresent(names)) {
14209
+ for (const name of names) {
14210
+ await this.getMemberRowByName(name).getByRole("checkbox").click();
14211
+ }
14212
+ }
14213
+ else {
14214
+ await this.page
14215
+ .getByRole("columnheader", { name: MEMBER_TEXTS.selectAll })
14216
+ .click();
14217
+ }
14218
+ await this.page.getByTestId(COMMON_SELECTORS.takeActionDropdown).click();
14219
+ if (neetoCist.isPresent(state)) {
14220
+ await this.page
14221
+ .getByTestId(MEMBER_SELECTORS.takeActionStateOption(state))
14222
+ .click();
14223
+ }
14224
+ else {
14225
+ await this.page
14226
+ .getByRole("button", { name: action === null || action === void 0 ? void 0 : action.actionButtonText })
14227
+ .click();
14228
+ await this.page
14229
+ .getByRole("button", { name: action === null || action === void 0 ? void 0 : action.valueButtonText })
14230
+ .click();
14231
+ }
14232
+ await this.page
14233
+ .getByTestId(COMMON_SELECTORS.alertModalSubmitButton)
14234
+ .click();
14235
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14236
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14237
+ };
14238
+ this.performColumnAction = async ({ columnName = "Name", actionButtonText = "Ascending", } = {}) => {
14239
+ await this.page
14240
+ .getByTestId(MEMBER_SELECTORS.teamMembersTable)
14241
+ .getByLabel(columnName)
14242
+ .getByTestId(COMMON_SELECTORS.dropdownIcon)
14243
+ .click();
14244
+ await this.page.getByRole("button", { name: actionButtonText }).click();
14245
+ await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.tableSpinner)).toBeHidden();
14246
+ };
14247
+ this.toggleMemberColumns = async ({ columns = [], bulkAction, }) => {
14248
+ await this.page.getByTestId(COMMON_SELECTORS.columnsDropdownButton).click();
14249
+ if (neetoCist.isPresent(bulkAction)) {
14250
+ await this.page
14251
+ .getByRole("button", {
14252
+ name: bulkAction === "hide" ? "Hide All" : "Show All",
14253
+ })
14254
+ .click();
14255
+ }
14256
+ else {
14257
+ for (const column of columns) {
14258
+ await this.page
14259
+ .getByTestId(COMMON_SELECTORS.columnsSearchInput)
14260
+ .fill(column);
14261
+ await this.page
14262
+ .getByTestId(MEMBER_SELECTORS.checkboxLabel(column))
14263
+ .click();
14264
+ }
14265
+ }
14266
+ await this.page.getByTestId(COMMON_SELECTORS.columnsDropdownButton).click();
14267
+ };
14268
+ this.verifyMemberInTable = ({ name, email }) => test$1.expect(this.getMemberRowByName(name).getByRole("cell", {
14269
+ name: email,
14270
+ exact: true,
14271
+ })).toBeVisible();
14272
+ this.page = page;
14273
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
14274
+ this.t = playwrightI18nextFixture.getI18nInstance().t;
14275
+ }
14276
+ }
14277
+
14046
14278
  const LOGIN_SELECTORS = {
14047
14279
  appleAuthenticationButton: "apple-authentication-button",
14048
14280
  emailTextField: "login-email-text-field",
@@ -14347,40 +14579,6 @@ const networkConditions = {
14347
14579
  },
14348
14580
  };
14349
14581
 
14350
- const MEMBER_SELECTORS = {
14351
- membersTab: "members-nav-tab",
14352
- newButton: "ntm-add-member-button",
14353
- continueButton: "ntm-manage-member-continue-button",
14354
- submitButton: "ntm-manage-member-submit-button",
14355
- searchTextField: "ntm-search-members-input",
14356
- deactivatedAgentsButton: "ntm-members-menubar-deactivated-block",
14357
- activatedMembersButton: "ntm-members-menubar-active-block",
14358
- columnCheckBox: "neeto-ui-columns-checkbox",
14359
- roleLabel: (role) => `${joinHyphenCase(role)}-radio-label`,
14360
- dropDownIcon: "ntm-members-table-row-dropdown-button",
14361
- editButton: "ntm-edit-member-button",
14362
- menuBarHeading: "ntm-members-menubar-heading",
14363
- activateOrDeactivateMember: "ntm-deactivate-member-button",
14364
- columnsButton: "columns-dropdown-button",
14365
- columnsDropdownContainer: "columns-dropdown-container",
14366
- emailDropdownItemLabel: "email-checkbox-label",
14367
- roleDropdownItemLabel: "role-checkbox-label",
14368
- inviteStatusDropdownItemLabel: "invite-status-checkbox-label",
14369
- heading: "ntm-manage-members-pane-header",
14370
- activateButton: "ntm-activate-members-button",
14371
- deactivateButton: "ntm-deactivate-members-button",
14372
- rolesButton: "ntm-manage-member-roles-button",
14373
- statusTag: "ntm-member-status-tag",
14374
- };
14375
- const MEMBER_FORM_SELECTORS = {
14376
- emailTextField: "email-select-input-field",
14377
- firstNameTextField: "ntm-edit-member-first-name-text-field",
14378
- lastNameTextField: "ntm-edit-member-last-name-text-field",
14379
- emailInput: "ntm-manage-member-email-input",
14380
- emailErrorField: "emails-input-error",
14381
- cancelButton: "ntm-manage-member-cancel-button",
14382
- };
14383
-
14384
14582
  const ROLES_SELECTORS = {
14385
14583
  newButton: "ntm-add-role-button",
14386
14584
  proceedButton: "ntm-add-role-submit-button",
@@ -14490,10 +14688,17 @@ const deactivateMemberViaRequest = ({ email, neetoPlaywrightUtilities, }) => nee
14490
14688
  url: API_ROUTES.teamMembers.bulkUpdate,
14491
14689
  body: { users: { active: false, emails: [email] } },
14492
14690
  });
14691
+ const generateRandomTeamMembers = ({ count = 1, role = "standard" }) => neetoCist.dynamicArray(count, () => ({
14692
+ firstName: faker.faker.person.firstName(),
14693
+ lastName: faker.faker.person.lastName(),
14694
+ email: faker.faker.internet.exampleEmail(),
14695
+ role,
14696
+ }));
14493
14697
  const memberUtils = {
14494
14698
  addMemberViaRequest,
14495
14699
  editMemberViaRequest,
14496
14700
  deactivateMemberViaRequest,
14701
+ generateRandomTeamMembers,
14497
14702
  };
14498
14703
 
14499
14704
  const assertColumnHeaderVisibility = async ({ page, columnName, shouldBeVisible, }) => {
@@ -147421,8 +147626,15 @@ const openFilterPane = async (page) => {
147421
147626
  await page.getByTestId(NEETO_FILTERS_SELECTORS.filterButton).click();
147422
147627
  await test$1.expect(page.getByTestId(COMMON_SELECTORS.paneHeader)).toHaveText(playwrightI18nextFixture.getI18nInstance().t("neetoFilters.common.filters"));
147423
147628
  };
147629
+ const clearFiltersFromActionBlock = async (page) => {
147630
+ await page
147631
+ .getByTestId(NEETO_FILTERS_SELECTORS.neetoFiltersBarClearButton)
147632
+ .click();
147633
+ await test$1.expect(page.getByTestId(NEETO_FILTERS_SELECTORS.neetoFiltersBarClearButton)).toBeHidden();
147634
+ };
147424
147635
  const filterUtils = {
147425
147636
  openFilterPane,
147637
+ clearFiltersFromActionBlock,
147426
147638
  };
147427
147639
 
147428
147640
  var main$2 = {exports: {}};
@@ -148084,6 +148296,7 @@ exports.TEXT_MODIFIER_SELECTORS = TEXT_MODIFIER_SELECTORS;
148084
148296
  exports.TEXT_MODIFIER_TAGS = TEXT_MODIFIER_TAGS;
148085
148297
  exports.THIRD_PARTY_ROUTES = THIRD_PARTY_ROUTES;
148086
148298
  exports.TOASTR_MESSAGES = TOASTR_MESSAGES;
148299
+ exports.TeamMembers = TeamMembers;
148087
148300
  exports.USER_AGENTS = USER_AGENTS;
148088
148301
  exports.WebhooksPage = WebhooksPage;
148089
148302
  exports.ZAPIER_LIMIT_EXHAUSTED_MESSAGE = ZAPIER_LIMIT_EXHAUSTED_MESSAGE;