@bigbinary/neeto-playwright-commons 1.9.6 → 1.9.8

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 : {};
@@ -2766,6 +2769,10 @@ class CustomCommands {
2766
2769
  await uploadFile;
2767
2770
  await test$1.expect(this.page.getByTestId(NEETO_IMAGE_UPLOADER_SELECTORS.uploadedImage)).toHaveAttribute("src", new RegExp(imageName), { timeout: 20000 });
2768
2771
  };
2772
+ this.verifyTooltip = async ({ triggerElement, content, }) => {
2773
+ await triggerElement.hover();
2774
+ await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.tooltip)).toContainText(content);
2775
+ };
2769
2776
  this.page = page;
2770
2777
  this.responses = [];
2771
2778
  this.request = request;
@@ -12702,6 +12709,10 @@ const CHAT_WIDGET_TEXTS = {
12702
12709
  };
12703
12710
  const MEMBER_TEXTS = {
12704
12711
  agent: "Agent",
12712
+ admin: "Admin",
12713
+ selectAll: "Select All",
12714
+ hide: "Hide all",
12715
+ show: "Show all",
12705
12716
  };
12706
12717
  const INTEGRATIONS_TEXTS = {
12707
12718
  connectHeader: (integration) => `Connect your ${integration} account`,
@@ -14039,6 +14050,232 @@ class ImageUploader {
14039
14050
  }
14040
14051
  }
14041
14052
 
14053
+ const MEMBER_SELECTORS = {
14054
+ membersTab: "members-nav-tab",
14055
+ newButton: "ntm-add-member-button",
14056
+ continueButton: "ntm-manage-member-continue-button",
14057
+ submitButton: "ntm-manage-member-submit-button",
14058
+ searchTextField: "ntm-search-members-input",
14059
+ deactivatedAgentsButton: "ntm-members-menubar-deactivated-block",
14060
+ activatedMembersButton: "ntm-members-menubar-active-block",
14061
+ columnCheckBox: "neeto-ui-columns-checkbox",
14062
+ roleLabel: (role) => `${joinHyphenCase(role)}-radio-label`,
14063
+ teamMembersTable: "ntm-members-table",
14064
+ dropDownIcon: "ntm-members-table-row-dropdown-button",
14065
+ editButton: "ntm-edit-member-button",
14066
+ menuBarHeading: "ntm-members-menubar-heading",
14067
+ activateOrDeactivateMember: "ntm-deactivate-member-button",
14068
+ columnsButton: "columns-dropdown-button",
14069
+ columnsDropdownContainer: "columns-dropdown-container",
14070
+ emailDropdownItemLabel: "email-checkbox-label",
14071
+ roleDropdownItemLabel: "role-checkbox-label",
14072
+ inviteStatusDropdownItemLabel: "invite-status-checkbox-label",
14073
+ heading: "ntm-manage-members-pane-header",
14074
+ activateButton: "ntm-activate-members-button",
14075
+ deactivateButton: "ntm-deactivate-members-button",
14076
+ rolesButton: "ntm-manage-member-roles-button",
14077
+ statusTag: "ntm-member-status-tag",
14078
+ menubarSubLink: (sublink) => `members-menubar-${sublink}-block-sub-link`,
14079
+ takeActionStateOption: (option = "") => `ntm-${hyphenize(option)}-members-button`,
14080
+ checkboxLabel: (label) => `${hyphenize(label)}-checkbox-label`,
14081
+ };
14082
+ const MEMBER_FORM_SELECTORS = {
14083
+ emailTextField: "email-select-input-field",
14084
+ firstNameTextField: "ntm-edit-member-first-name-text-field",
14085
+ lastNameTextField: "ntm-edit-member-last-name-text-field",
14086
+ emailInput: "ntm-manage-member-email-input",
14087
+ emailErrorField: "emails-input-error",
14088
+ cancelButton: "ntm-manage-member-cancel-button",
14089
+ };
14090
+
14091
+ class TeamMembers {
14092
+ constructor({ page, neetoPlaywrightUtilities, }) {
14093
+ this.navigateToTeamMembersSublink = async (sublink = "all") => {
14094
+ await this.page.getByTestId(MEMBER_SELECTORS.membersTab).click();
14095
+ await this.page
14096
+ .getByTestId(MEMBER_SELECTORS.menubarSubLink(sublink))
14097
+ .click();
14098
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14099
+ };
14100
+ this.addMemberViaUI = async ({ emails = [faker.faker.internet.exampleEmail()], role = "standard", } = {}) => {
14101
+ await this.page.getByTestId(MEMBER_SELECTORS.newButton).click();
14102
+ await this.page
14103
+ .getByTestId(MEMBER_FORM_SELECTORS.emailTextField)
14104
+ .fill(emails.join(", "));
14105
+ await this.page.getByTestId(MEMBER_SELECTORS.roleLabel(role)).click();
14106
+ IS_STAGING_ENV &&
14107
+ (await this.page
14108
+ .getByTestId(COMMON_SELECTORS.paneBody)
14109
+ .getByTestId(COMMON_SELECTORS.checkboxLabel)
14110
+ .click());
14111
+ await this.page.getByTestId(MEMBER_SELECTORS.continueButton).click();
14112
+ await this.page.getByTestId(MEMBER_SELECTORS.submitButton).click();
14113
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14114
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14115
+ };
14116
+ this.searchAndVerifyMemberByEmail = async ({ email, interceptOptions, }) => {
14117
+ const searchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14118
+ responseUrl: API_ROUTES.teamMembers.index,
14119
+ ...interceptOptions,
14120
+ });
14121
+ await this.page.getByTestId(MEMBER_SELECTORS.searchTextField).fill(email);
14122
+ await searchMembers;
14123
+ await test$1.expect(this.page.getByTestId(NEETO_FILTERS_SELECTORS.searchTermBlock)).toContainText(email);
14124
+ await test$1.expect(this.page.getByRole("cell", { name: email, exact: true })).toBeVisible();
14125
+ await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.tableSpinner)).toBeHidden();
14126
+ };
14127
+ this.editMemberViaUI = async ({ email = "", firstName = "", lastName = "", role = "standard", } = {}) => {
14128
+ await this.page.getByTestId(MEMBER_SELECTORS.dropDownIcon).click();
14129
+ await this.page.getByTestId(MEMBER_SELECTORS.editButton).click();
14130
+ neetoCist.isPresent(email) &&
14131
+ (await this.page
14132
+ .getByTestId(MEMBER_FORM_SELECTORS.emailInput)
14133
+ .fill(email));
14134
+ neetoCist.isPresent(firstName) &&
14135
+ (await this.page
14136
+ .getByTestId(MEMBER_FORM_SELECTORS.firstNameTextField)
14137
+ .fill(firstName));
14138
+ neetoCist.isPresent(lastName) &&
14139
+ (await this.page
14140
+ .getByTestId(MEMBER_FORM_SELECTORS.lastNameTextField)
14141
+ .fill(lastName));
14142
+ await this.page.getByTestId(MEMBER_SELECTORS.roleLabel(role)).click();
14143
+ await this.page.getByTestId(MEMBER_SELECTORS.submitButton).click();
14144
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14145
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14146
+ };
14147
+ this.toggleMemberStateViaUI = async () => {
14148
+ await this.page.getByTestId(MEMBER_SELECTORS.dropDownIcon).click();
14149
+ await this.page
14150
+ .getByTestId(MEMBER_SELECTORS.activateOrDeactivateMember)
14151
+ .click();
14152
+ await this.page
14153
+ .getByTestId(COMMON_SELECTORS.alertModalSubmitButton)
14154
+ .click();
14155
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14156
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14157
+ };
14158
+ this.filterMembersByMultiSelect = async ({ selectedOptions = [], selectContainerLocator = NEETO_FILTERS_SELECTORS.roleSelectContainer, }) => {
14159
+ await this.page
14160
+ .getByTestId(selectContainerLocator)
14161
+ .getByTestId(COMMON_SELECTORS.actionSelectIndicator)
14162
+ .click();
14163
+ for (const option of selectedOptions) {
14164
+ const fetchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14165
+ responseUrl: API_ROUTES.teamMembers.index,
14166
+ });
14167
+ await this.page
14168
+ .getByTestId(COMMON_SELECTORS.selectOption(option))
14169
+ .click();
14170
+ await fetchMembers;
14171
+ }
14172
+ };
14173
+ this.filterMembers = async ({ email = { id: "", condition: "Is" }, roles = [], name = "", }) => {
14174
+ await this.page.getByTestId(NEETO_FILTERS_SELECTORS.filterButton).click();
14175
+ if (neetoCist.isPresent(email.id)) {
14176
+ await this.page
14177
+ .getByTestId(NEETO_FILTERS_SELECTORS.emailSelectContainer)
14178
+ .getByTestId(COMMON_SELECTORS.actionSelectIndicator)
14179
+ .click();
14180
+ await this.page
14181
+ .getByTestId(COMMON_SELECTORS.selectOption(email.condition))
14182
+ .click();
14183
+ const fetchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14184
+ responseUrl: API_ROUTES.teamMembers.index,
14185
+ });
14186
+ await this.page
14187
+ .getByTestId(NEETO_FILTERS_SELECTORS.filtersEmailFilter)
14188
+ .fill(email.id);
14189
+ await fetchMembers;
14190
+ }
14191
+ if (neetoCist.isPresent(name)) {
14192
+ const fetchMembers = this.neetoPlaywrightUtilities.interceptMultipleResponses({
14193
+ responseUrl: API_ROUTES.teamMembers.index,
14194
+ });
14195
+ await this.page
14196
+ .getByTestId(NEETO_FILTERS_SELECTORS.neetoFiltersNameFilterField)
14197
+ .fill(name);
14198
+ await fetchMembers;
14199
+ }
14200
+ neetoCist.isPresent(roles) &&
14201
+ (await this.filterMembersByMultiSelect({ selectedOptions: roles }));
14202
+ await this.page
14203
+ .getByTestId(NEETO_FILTERS_SELECTORS.filterDoneButton)
14204
+ .click();
14205
+ };
14206
+ // TODO: Change the selector after this issue is resolved: https://github.com/bigbinary/neeto-team-members-nano/issues/258
14207
+ this.getMemberRowByName = (name) => this.page.getByRole("row", { name: `avatar--${name}` });
14208
+ this.takeActionOnMembers = async ({ names = [], state, action, }) => {
14209
+ if (neetoCist.isPresent(names)) {
14210
+ for (const name of names) {
14211
+ await this.getMemberRowByName(name).getByRole("checkbox").click();
14212
+ }
14213
+ }
14214
+ else {
14215
+ await this.page
14216
+ .getByRole("columnheader", { name: MEMBER_TEXTS.selectAll })
14217
+ .click();
14218
+ }
14219
+ await this.page.getByTestId(COMMON_SELECTORS.takeActionDropdown).click();
14220
+ if (neetoCist.isPresent(state)) {
14221
+ await this.page
14222
+ .getByTestId(MEMBER_SELECTORS.takeActionStateOption(state))
14223
+ .click();
14224
+ }
14225
+ else {
14226
+ await this.page
14227
+ .getByRole("button", { name: action === null || action === void 0 ? void 0 : action.actionButtonText })
14228
+ .click();
14229
+ await this.page
14230
+ .getByRole("button", { name: action === null || action === void 0 ? void 0 : action.valueButtonText })
14231
+ .click();
14232
+ }
14233
+ await this.page
14234
+ .getByTestId(COMMON_SELECTORS.alertModalSubmitButton)
14235
+ .click();
14236
+ await this.neetoPlaywrightUtilities.verifySuccessToast();
14237
+ await this.neetoPlaywrightUtilities.waitForPageLoad();
14238
+ };
14239
+ this.performColumnAction = async ({ columnName = "Name", actionButtonText = "Ascending", } = {}) => {
14240
+ await this.page
14241
+ .getByTestId(MEMBER_SELECTORS.teamMembersTable)
14242
+ .getByLabel(columnName)
14243
+ .getByTestId(COMMON_SELECTORS.dropdownIcon)
14244
+ .click();
14245
+ await this.page.getByRole("button", { name: actionButtonText }).click();
14246
+ await test$1.expect(this.page.getByTestId(COMMON_SELECTORS.tableSpinner)).toBeHidden();
14247
+ };
14248
+ this.toggleMemberColumns = async ({ columns = [], bulkAction, }) => {
14249
+ await this.page.getByTestId(COMMON_SELECTORS.columnsDropdownButton).click();
14250
+ if (neetoCist.isPresent(bulkAction)) {
14251
+ await this.page
14252
+ .getByRole("button", {
14253
+ name: bulkAction === "hide" ? "Hide All" : "Show All",
14254
+ })
14255
+ .click();
14256
+ }
14257
+ else {
14258
+ for (const column of columns) {
14259
+ await this.page
14260
+ .getByTestId(COMMON_SELECTORS.columnsSearchInput)
14261
+ .fill(column);
14262
+ await this.page
14263
+ .getByTestId(MEMBER_SELECTORS.checkboxLabel(column))
14264
+ .click();
14265
+ }
14266
+ }
14267
+ await this.page.getByTestId(COMMON_SELECTORS.columnsDropdownButton).click();
14268
+ };
14269
+ this.verifyMemberInTable = ({ name, email }) => test$1.expect(this.getMemberRowByName(name).getByRole("cell", {
14270
+ name: email,
14271
+ exact: true,
14272
+ })).toBeVisible();
14273
+ this.page = page;
14274
+ this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
14275
+ this.t = playwrightI18nextFixture.getI18nInstance().t;
14276
+ }
14277
+ }
14278
+
14042
14279
  const LOGIN_SELECTORS = {
14043
14280
  appleAuthenticationButton: "apple-authentication-button",
14044
14281
  emailTextField: "login-email-text-field",
@@ -14343,40 +14580,6 @@ const networkConditions = {
14343
14580
  },
14344
14581
  };
14345
14582
 
14346
- const MEMBER_SELECTORS = {
14347
- membersTab: "members-nav-tab",
14348
- newButton: "ntm-add-member-button",
14349
- continueButton: "ntm-manage-member-continue-button",
14350
- submitButton: "ntm-manage-member-submit-button",
14351
- searchTextField: "ntm-search-members-input",
14352
- deactivatedAgentsButton: "ntm-members-menubar-deactivated-block",
14353
- activatedMembersButton: "ntm-members-menubar-active-block",
14354
- columnCheckBox: "neeto-ui-columns-checkbox",
14355
- roleLabel: (role) => `${joinHyphenCase(role)}-radio-label`,
14356
- dropDownIcon: "ntm-members-table-row-dropdown-button",
14357
- editButton: "ntm-edit-member-button",
14358
- menuBarHeading: "ntm-members-menubar-heading",
14359
- activateOrDeactivateMember: "ntm-deactivate-member-button",
14360
- columnsButton: "columns-dropdown-button",
14361
- columnsDropdownContainer: "columns-dropdown-container",
14362
- emailDropdownItemLabel: "email-checkbox-label",
14363
- roleDropdownItemLabel: "role-checkbox-label",
14364
- inviteStatusDropdownItemLabel: "invite-status-checkbox-label",
14365
- heading: "ntm-manage-members-pane-header",
14366
- activateButton: "ntm-activate-members-button",
14367
- deactivateButton: "ntm-deactivate-members-button",
14368
- rolesButton: "ntm-manage-member-roles-button",
14369
- statusTag: "ntm-member-status-tag",
14370
- };
14371
- const MEMBER_FORM_SELECTORS = {
14372
- emailTextField: "email-select-input-field",
14373
- firstNameTextField: "ntm-edit-member-first-name-text-field",
14374
- lastNameTextField: "ntm-edit-member-last-name-text-field",
14375
- emailInput: "ntm-manage-member-email-input",
14376
- emailErrorField: "emails-input-error",
14377
- cancelButton: "ntm-manage-member-cancel-button",
14378
- };
14379
-
14380
14583
  const ROLES_SELECTORS = {
14381
14584
  newButton: "ntm-add-role-button",
14382
14585
  proceedButton: "ntm-add-role-submit-button",
@@ -14486,10 +14689,17 @@ const deactivateMemberViaRequest = ({ email, neetoPlaywrightUtilities, }) => nee
14486
14689
  url: API_ROUTES.teamMembers.bulkUpdate,
14487
14690
  body: { users: { active: false, emails: [email] } },
14488
14691
  });
14692
+ const generateRandomTeamMembers = ({ count = 1, role = "standard" }) => neetoCist.dynamicArray(count, () => ({
14693
+ firstName: faker.faker.person.firstName(),
14694
+ lastName: faker.faker.person.lastName(),
14695
+ email: faker.faker.internet.exampleEmail(),
14696
+ role,
14697
+ }));
14489
14698
  const memberUtils = {
14490
14699
  addMemberViaRequest,
14491
14700
  editMemberViaRequest,
14492
14701
  deactivateMemberViaRequest,
14702
+ generateRandomTeamMembers,
14493
14703
  };
14494
14704
 
14495
14705
  const assertColumnHeaderVisibility = async ({ page, columnName, shouldBeVisible, }) => {
@@ -147417,8 +147627,15 @@ const openFilterPane = async (page) => {
147417
147627
  await page.getByTestId(NEETO_FILTERS_SELECTORS.filterButton).click();
147418
147628
  await test$1.expect(page.getByTestId(COMMON_SELECTORS.paneHeader)).toHaveText(playwrightI18nextFixture.getI18nInstance().t("neetoFilters.common.filters"));
147419
147629
  };
147630
+ const clearFiltersFromActionBlock = async (page) => {
147631
+ await page
147632
+ .getByTestId(NEETO_FILTERS_SELECTORS.neetoFiltersBarClearButton)
147633
+ .click();
147634
+ await test$1.expect(page.getByTestId(NEETO_FILTERS_SELECTORS.neetoFiltersBarClearButton)).toBeHidden();
147635
+ };
147420
147636
  const filterUtils = {
147421
147637
  openFilterPane,
147638
+ clearFiltersFromActionBlock,
147422
147639
  };
147423
147640
 
147424
147641
  var main$2 = {exports: {}};
@@ -148080,6 +148297,7 @@ exports.TEXT_MODIFIER_SELECTORS = TEXT_MODIFIER_SELECTORS;
148080
148297
  exports.TEXT_MODIFIER_TAGS = TEXT_MODIFIER_TAGS;
148081
148298
  exports.THIRD_PARTY_ROUTES = THIRD_PARTY_ROUTES;
148082
148299
  exports.TOASTR_MESSAGES = TOASTR_MESSAGES;
148300
+ exports.TeamMembers = TeamMembers;
148083
148301
  exports.USER_AGENTS = USER_AGENTS;
148084
148302
  exports.WebhooksPage = WebhooksPage;
148085
148303
  exports.ZAPIER_LIMIT_EXHAUSTED_MESSAGE = ZAPIER_LIMIT_EXHAUSTED_MESSAGE;