@bigbinary/neeto-playwright-commons 1.2.0 → 1.3.1

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.js CHANGED
@@ -1,5 +1,4 @@
1
1
  import { expect, defineConfig, devices } from '@playwright/test';
2
- import dayjs from 'dayjs';
3
2
  import * as require$$0 from 'fs';
4
3
  import require$$0__default from 'fs';
5
4
  import require$$2 from 'os';
@@ -8,130 +7,10 @@ import require$$0$2 from 'util';
8
7
  import require$$0$3 from 'stream';
9
8
  import require$$0$4 from 'events';
10
9
  import { mergeDeepLeft, mergeAll } from 'ramda';
10
+ import dayjs from 'dayjs';
11
+ import require$$0$5 from 'i18next';
11
12
  import require$$3 from 'crypto';
12
13
 
13
- const COMMON_SELECTORS = {
14
- toastMessage: "toastr-message-container",
15
- toastIcon: ".Toastify__toast-icon",
16
- toastCloseButton: "toastr-close-button",
17
- dropdownIcon: "nui-dropdown-icon",
18
- checkbox: "nui-checkbox-input",
19
- spinner: ".neeto-ui-spinner",
20
- input: "nui-input-field",
21
- alertModalSubmitButton: "alert-submit-button",
22
- selectContainer: "nui-select-container",
23
- subheaderText: "subheader-left",
24
- };
25
-
26
- class CustomCommands {
27
- constructor(page, request) {
28
- this.interceptMultipleResponses = ({ responseUrl = "", times = 1, baseUrl, }) => Promise.all([...new Array(times)].map(() => this.page.waitForResponse((response) => {
29
- var _a, _b, _c;
30
- if (response.request().resourceType() === "xhr" &&
31
- response.status() === 200 &&
32
- response.url().includes(responseUrl) &&
33
- response
34
- .url()
35
- .startsWith((_a = baseUrl !== null && baseUrl !== void 0 ? baseUrl : process.env.BASE_URL) !== null && _a !== void 0 ? _a : "") &&
36
- !this.responses.includes((_b = response.headers()) === null || _b === void 0 ? void 0 : _b["x-request-id"])) {
37
- this.responses.push((_c = response.headers()) === null || _c === void 0 ? void 0 : _c["x-request-id"]);
38
- return true;
39
- }
40
- return false;
41
- }, { timeout: 10000 })));
42
- this.recursiveMethod = async (callback, condition, timeout, startTime) => {
43
- if (Date.now() - timeout >= startTime) {
44
- return false;
45
- }
46
- else if (await condition()) {
47
- return await callback();
48
- }
49
- return await this.recursiveMethod(callback, condition, timeout, startTime);
50
- };
51
- this.executeRecursively = async ({ callback, condition, timeout = 5000, }) => {
52
- const startTime = Date.now();
53
- await this.recursiveMethod(callback, condition, timeout, startTime);
54
- };
55
- this.verifySuccessToast = async ({ message, closeAfterVerification = true, }) => {
56
- if (message) {
57
- await expect(this.page.getByTestId(COMMON_SELECTORS.toastMessage)).toHaveValue(message);
58
- }
59
- else {
60
- await expect(this.page.locator(COMMON_SELECTORS.toastIcon)).toHaveValue("👍");
61
- closeAfterVerification &&
62
- (await this.page
63
- .getByTestId(COMMON_SELECTORS.toastCloseButton)
64
- .click());
65
- }
66
- };
67
- this.reloadAndWait = async (requestCount) => {
68
- const reloadRequests = this.interceptMultipleResponses({
69
- times: requestCount,
70
- });
71
- await this.page.reload();
72
- await reloadRequests;
73
- };
74
- this.apiRequest = async ({ url, headers: additionalHeaders, body: data, method = "get", params = {}, ...otherOptions }) => {
75
- const csrfToken = await this.page
76
- .locator("[name='csrf-token']")
77
- .getAttribute("content");
78
- const requestOptions = {
79
- headers: {
80
- ...additionalHeaders,
81
- "accept-encoding": "gzip",
82
- "x-csrf-token": csrfToken !== null && csrfToken !== void 0 ? csrfToken : "",
83
- },
84
- data,
85
- params,
86
- ...otherOptions,
87
- };
88
- const httpMethodsHandlers = {
89
- get: () => this.request.get(url, requestOptions),
90
- post: () => this.request.post(url, requestOptions),
91
- put: () => this.request.put(url, requestOptions),
92
- delete: () => this.request.delete(url, requestOptions),
93
- };
94
- return await httpMethodsHandlers[method]();
95
- };
96
- this.verifyFieldValue = values => {
97
- const verifyEachFieldValue = ({ field, value, }) => expect(this.page.getByTestId(field)).toHaveValue(value);
98
- return Array.isArray(values)
99
- ? Promise.all(values.map(value => verifyEachFieldValue(value)))
100
- : verifyEachFieldValue(values);
101
- };
102
- this.page = page;
103
- this.responses = [];
104
- this.request = request;
105
- }
106
- }
107
-
108
- const commands = {
109
- neetoPlaywrightUtilities: async ({ page, request }, use) => {
110
- const commands = new CustomCommands(page, request);
111
- await use(commands);
112
- },
113
- page: async ({ page }, use) => {
114
- await page.goto("/");
115
- await page.waitForLoadState();
116
- await use(page);
117
- },
118
- };
119
-
120
- const ENVIRONMENT = {
121
- development: "development",
122
- staging: "staging",
123
- review: "review",
124
- };
125
- const IS_STAGING_ENV = process.env.TEST_ENV === "staging";
126
- const STORAGE_STATE = "./e2e/auth/user.json";
127
- const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
128
- const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
129
- const CREDENTIALS = {
130
- name: "Oliver Smith",
131
- email: "oliver@example.com",
132
- password: "welcome",
133
- };
134
-
135
14
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
136
15
 
137
16
  var tasks = {};
@@ -6830,6 +6709,21 @@ function assertPatternsInput(input) {
6830
6709
  }
6831
6710
  var out = FastGlob;
6832
6711
 
6712
+ const ENVIRONMENT = {
6713
+ development: "development",
6714
+ staging: "staging",
6715
+ review: "review",
6716
+ };
6717
+ const IS_STAGING_ENV = process.env.TEST_ENV === "staging";
6718
+ const STORAGE_STATE = "./e2e/auth/user.json";
6719
+ const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
6720
+ const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
6721
+ const CREDENTIALS = {
6722
+ name: "Oliver Smith",
6723
+ email: "oliver@example.com",
6724
+ password: "welcome",
6725
+ };
6726
+
6833
6727
  const joinString = (string1, string2, string3 = "", separator = " ") => {
6834
6728
  if (string3 === "") {
6835
6729
  return string1 + separator + string2;
@@ -6874,6 +6768,166 @@ const readTranslations = () => {
6874
6768
  });
6875
6769
  return translations;
6876
6770
  };
6771
+ const hyphenize = input => {
6772
+ const fallbackString = "";
6773
+ if (typeof input === "number")
6774
+ return String(input);
6775
+ if (input && typeof input === "string" && input.replace) {
6776
+ return input
6777
+ .replace(/[\s_]/g, "-")
6778
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
6779
+ .replace(/-+/g, "-")
6780
+ .toLowerCase();
6781
+ }
6782
+ return fallbackString;
6783
+ };
6784
+ const joinHyphenCase = (...args) => args.join(" ").replace(/\s+/g, "-").toLowerCase();
6785
+
6786
+ const COMMON_SELECTORS = {
6787
+ spinner: ".neeto-ui-spinner",
6788
+ subheaderText: "subheader-left",
6789
+ alertTitle: "alert-title",
6790
+ alertModalMessage: "alert-message",
6791
+ alertModalSubmitButton: "alert-submit-button",
6792
+ checkbox: "nui-checkbox-input",
6793
+ checkboxLabel: "nui-checkbox-label",
6794
+ dropdownContainer: "nui-dropdown-container",
6795
+ dropdownIcon: "nui-dropdown-icon",
6796
+ heading: "main-header",
6797
+ paneBody: "pane-body",
6798
+ paneHeader: "pane-header",
6799
+ profileSidebar: "profile-section",
6800
+ selectOption: (label) => `${hyphenize(label)}-select-option`,
6801
+ toastMessage: "toastr-message-container",
6802
+ toastCloseButton: "toastr-close-button",
6803
+ windowAlert: "#alert-box",
6804
+ body: "body",
6805
+ toastIcon: ".Toastify__toast-icon",
6806
+ paneModalCrossIcon: "pane-close-button",
6807
+ inputField: "nui-input-field",
6808
+ alertConfirmationText: "alert-confirmation-text",
6809
+ alertCancelButton: "alert-cancel-button",
6810
+ alertModalCrossIcon: "modal-close-button",
6811
+ saveChangesButton: "save-changes-button",
6812
+ cancelButton: "cancel-button",
6813
+ inputFieldError: "nui-input-error",
6814
+ selectDropDownError: "nui-select-error",
6815
+ subTitleHeading: "menubar-subtitle-heading",
6816
+ noDataTitle: "no-data-title",
6817
+ noDataDescription: "no-data-description",
6818
+ backdrop: "neeto-backdrop",
6819
+ menuBarHeading: "menubar-heading",
6820
+ dropdownWrapper: "nui-select-container-wrapper",
6821
+ toggleButton: "menubar-toggle-button",
6822
+ tooltip: "tooltip-box",
6823
+ articlePageTitle: ".serene-article__title",
6824
+ tabItem: "tab-item",
6825
+ labelInputError: "label-input-error",
6826
+ urlInputError: "url-input-error",
6827
+ noDataPrimaryButton: "no-data-primary-button",
6828
+ modalHeader: "modal-header",
6829
+ nameInputError: "name-input-error",
6830
+ selectContainer: "nui-select-container",
6831
+ dropdownMenu: "nui-select-menu",
6832
+ sidebarToggle: "neeto-molecules-sidebar-toggler",
6833
+ subheader: "subheader",
6834
+ settingsLink: "Settings",
6835
+ ticketFieldTextInput: (label) => `${hyphenize(label)}-text-input`,
6836
+ };
6837
+
6838
+ class CustomCommands {
6839
+ constructor(page, request) {
6840
+ this.interceptMultipleResponses = ({ responseUrl = "", times = 1, baseUrl, }) => Promise.all([...new Array(times)].map(() => this.page.waitForResponse((response) => {
6841
+ var _a, _b, _c;
6842
+ if (response.request().resourceType() === "xhr" &&
6843
+ response.status() === 200 &&
6844
+ response.url().includes(responseUrl) &&
6845
+ response
6846
+ .url()
6847
+ .startsWith((_a = baseUrl !== null && baseUrl !== void 0 ? baseUrl : process.env.BASE_URL) !== null && _a !== void 0 ? _a : "") &&
6848
+ !this.responses.includes((_b = response.headers()) === null || _b === void 0 ? void 0 : _b["x-request-id"])) {
6849
+ this.responses.push((_c = response.headers()) === null || _c === void 0 ? void 0 : _c["x-request-id"]);
6850
+ return true;
6851
+ }
6852
+ return false;
6853
+ }, { timeout: 10000 })));
6854
+ this.recursiveMethod = async (callback, condition, timeout, startTime) => {
6855
+ if (Date.now() - timeout >= startTime) {
6856
+ return false;
6857
+ }
6858
+ else if (await condition()) {
6859
+ return await callback();
6860
+ }
6861
+ return await this.recursiveMethod(callback, condition, timeout, startTime);
6862
+ };
6863
+ this.executeRecursively = async ({ callback, condition, timeout = 5000, }) => {
6864
+ const startTime = Date.now();
6865
+ await this.recursiveMethod(callback, condition, timeout, startTime);
6866
+ };
6867
+ this.verifySuccessToast = async ({ message, closeAfterVerification = true, }) => {
6868
+ if (message) {
6869
+ await expect(this.page.getByTestId(COMMON_SELECTORS.toastMessage)).toHaveValue(message);
6870
+ }
6871
+ else {
6872
+ await expect(this.page.locator(COMMON_SELECTORS.toastIcon)).toHaveValue("👍");
6873
+ closeAfterVerification &&
6874
+ (await this.page
6875
+ .getByTestId(COMMON_SELECTORS.toastCloseButton)
6876
+ .click());
6877
+ }
6878
+ };
6879
+ this.reloadAndWait = async (requestCount) => {
6880
+ const reloadRequests = this.interceptMultipleResponses({
6881
+ times: requestCount,
6882
+ });
6883
+ await this.page.reload();
6884
+ await reloadRequests;
6885
+ };
6886
+ this.apiRequest = async ({ url, headers: additionalHeaders, body: data, method = "get", params = {}, ...otherOptions }) => {
6887
+ const csrfToken = await this.page
6888
+ .locator("[name='csrf-token']")
6889
+ .getAttribute("content");
6890
+ const requestOptions = {
6891
+ headers: {
6892
+ ...additionalHeaders,
6893
+ "accept-encoding": "gzip",
6894
+ "x-csrf-token": csrfToken !== null && csrfToken !== void 0 ? csrfToken : "",
6895
+ },
6896
+ data,
6897
+ params,
6898
+ ...otherOptions,
6899
+ };
6900
+ const httpMethodsHandlers = {
6901
+ get: () => this.request.get(url, requestOptions),
6902
+ post: () => this.request.post(url, requestOptions),
6903
+ put: () => this.request.put(url, requestOptions),
6904
+ delete: () => this.request.delete(url, requestOptions),
6905
+ };
6906
+ return await httpMethodsHandlers[method]();
6907
+ };
6908
+ this.verifyFieldValue = values => {
6909
+ const verifyEachFieldValue = ({ field, value, }) => expect(this.page.getByTestId(field)).toHaveValue(value);
6910
+ return Array.isArray(values)
6911
+ ? Promise.all(values.map(value => verifyEachFieldValue(value)))
6912
+ : verifyEachFieldValue(values);
6913
+ };
6914
+ this.page = page;
6915
+ this.responses = [];
6916
+ this.request = request;
6917
+ }
6918
+ }
6919
+
6920
+ const commands = {
6921
+ neetoPlaywrightUtilities: async ({ page, request }, use) => {
6922
+ const commands = new CustomCommands(page, request);
6923
+ await use(commands);
6924
+ },
6925
+ page: async ({ page }, use) => {
6926
+ await page.goto("/");
6927
+ await page.waitForLoadState();
6928
+ await use(page);
6929
+ },
6930
+ };
6877
6931
 
6878
6932
  const generateStagingData = (product = "invoice") => {
6879
6933
  const timestamp = dayjs().format("YYYYMMDDHH");
@@ -6897,7 +6951,86 @@ const generateStagingData = (product = "invoice") => {
6897
6951
  };
6898
6952
  };
6899
6953
 
6900
- const i18n = {
6954
+ var __create = Object.create;
6955
+ var __defProp = Object.defineProperty;
6956
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6957
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6958
+ var __getProtoOf = Object.getPrototypeOf;
6959
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6960
+ var __export = (target, all) => {
6961
+ for (var name in all)
6962
+ __defProp(target, name, { get: all[name], enumerable: true });
6963
+ };
6964
+ var __copyProps = (to, from, except, desc) => {
6965
+ if (from && typeof from === "object" || typeof from === "function") {
6966
+ for (let key of __getOwnPropNames(from))
6967
+ if (!__hasOwnProp.call(to, key) && key !== except)
6968
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
6969
+ }
6970
+ return to;
6971
+ };
6972
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
6973
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
6974
+ mod
6975
+ ));
6976
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
6977
+
6978
+ // src/index.ts
6979
+ var src_exports = {};
6980
+ __export(src_exports, {
6981
+ createI18nFixture: () => createI18nFixture,
6982
+ getI18nInstance: () => getI18nInstance,
6983
+ initI18n: () => initI18n
6984
+ });
6985
+ var dist = __toCommonJS(src_exports);
6986
+
6987
+ // src/i18n.ts
6988
+ var import_i18next = __toESM(require$$0$5);
6989
+ var storedI18n;
6990
+ async function initI18n({
6991
+ plugins,
6992
+ options,
6993
+ cache
6994
+ }) {
6995
+ if (!cache || !storedI18n || !storedI18n.isInitialized) {
6996
+ const i18n2 = plugins.reduce(
6997
+ (i18n3, plugin) => i18n3 = i18n3.use(plugin),
6998
+ import_i18next.default.createInstance()
6999
+ );
7000
+ await i18n2.init(options);
7001
+ storedI18n = i18n2;
7002
+ }
7003
+ return storedI18n;
7004
+ }
7005
+ function getI18nInstance() {
7006
+ if (!storedI18n) {
7007
+ throw new Error("No i18n instance initialized");
7008
+ }
7009
+ return storedI18n;
7010
+ }
7011
+
7012
+ // src/fixture.ts
7013
+ var createI18nFixture = ({
7014
+ plugins = [],
7015
+ options = {},
7016
+ cache = true,
7017
+ auto = true
7018
+ }) => {
7019
+ return {
7020
+ i18n: [
7021
+ async ({}, use) => {
7022
+ const i18nInitialized = await initI18n({ plugins, options, cache });
7023
+ await use(i18nInitialized);
7024
+ },
7025
+ { auto }
7026
+ ],
7027
+ t: async ({ i18n: i18n2 }, use) => {
7028
+ await use(i18n2.t);
7029
+ }
7030
+ };
7031
+ };
7032
+
7033
+ const i18nFixture = dist.createI18nFixture({
6901
7034
  // i18n configuration options
6902
7035
  options: {
6903
7036
  debug: false,
@@ -6910,17 +7043,24 @@ const i18n = {
6910
7043
  // Run as auto fixture to be available through all tests by getI18nInstance()
6911
7044
  // Default: true
6912
7045
  auto: true,
6913
- };
7046
+ });
6914
7047
 
6915
7048
  const BASE_URL = "/api/v1";
6916
7049
  const ROUTES = {
6917
7050
  neetoAuth: "https://app.neetoauth.net",
7051
+ neetoAuthSignup: "https://app.neetoauth.net/signups/new",
6918
7052
  profile: "/profile",
6919
7053
  login: `${BASE_URL}/login`,
6920
7054
  signup: `${BASE_URL}/signups`,
6921
7055
  subdomainAvailability: `${BASE_URL}/subdomain_availability`,
6922
7056
  countries: `${BASE_URL}/countries`,
6923
7057
  neetoApps: `${BASE_URL}/neeto_apps`,
7058
+ teamMembers: {
7059
+ all: "/team_members*/**",
7060
+ bulkUpdate: "/team_members/teams/bulk_update",
7061
+ index: "/team_members/teams",
7062
+ show: (id) => `/team_members/teams/${id}`,
7063
+ },
6924
7064
  };
6925
7065
 
6926
7066
  const SIGNUP_SELECTORS = {
@@ -6952,10 +7092,9 @@ class OrganizationPage {
6952
7092
  const defaultOtp = "123456";
6953
7093
  const appNameInLowerCase = appName.toLowerCase();
6954
7094
  const isNeetoAuth = appNameInLowerCase === "neetoauth";
6955
- const authUrl = "https://app.neetoauth.net/signups/new";
6956
7095
  isNeetoAuth
6957
- ? await this.page.goto(authUrl)
6958
- : await this.page.goto(`${authUrl}?redirect_uri=${appNameInLowerCase}.net`);
7096
+ ? await this.page.goto(ROUTES.neetoAuthSignup)
7097
+ : await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${appNameInLowerCase}.net`);
6959
7098
  await this.page.getByTestId(SIGNUP_SELECTORS.emailTextField).fill(email);
6960
7099
  const signup = this.neetoPlaywrightUtilities.interceptMultipleResponses({
6961
7100
  responseUrl: ROUTES.signup,
@@ -7057,6 +7196,62 @@ class OrganizationPage {
7057
7196
  }
7058
7197
  }
7059
7198
 
7199
+ const NEETO_EDITOR_SELECTORS = {
7200
+ boldOption: "neeto-editor-fixed-menu-bold-option",
7201
+ italicOption: "neeto-editor-fixed-menu-italic-option",
7202
+ underlineOption: "neeto-editor-fixed-menu-underline-option",
7203
+ strikeOption: "neeto-editor-fixed-menu-strike-option",
7204
+ codeBlockOption: "neeto-editor-fixed-menu-code-option",
7205
+ highlightOption: "neeto-editor-fixed-menu-highlight-option",
7206
+ linkInput: "neeto-editor-fixed-menu-link-option-input",
7207
+ linkSubmitButton: "neeto-editor-fixed-menu-link-option-link-button",
7208
+ commandList: (index) => `neeto-editor-command-list-item-${index}`,
7209
+ imageUploadUrlSubmitButton: "neeto-editor-media-upload-url-submit",
7210
+ imageUploadUrlInputTextField: "neeto-editor-media-upload-url-input",
7211
+ uploadInput: "neeto-editor-media-uploader-input",
7212
+ editorMenuBarWrapper: "neeto-editor-fixed-menu-wrapper",
7213
+ undoOption: "neeto-editor-fixed-menu-undo-option",
7214
+ redoOption: "neeto-editor-fixed-menu-redo-option",
7215
+ imageWrapper: "neeto-editor-image-wrapper",
7216
+ };
7217
+
7218
+ const NEETO_FILTERS_SELECTORS = {
7219
+ emailSelectContainer: "email-select-container-wrapper",
7220
+ filterPaneHeading: "neeto-filters-pane-header",
7221
+ neetoFiltersEmailBlock: "neeto-filters-email-block",
7222
+ neetoFiltersRoleBlock: "neeto-filters-role-block",
7223
+ neetoFiltersBarClearButton: "neeto-filters-bar-clear-btn",
7224
+ neetoFiltersNameFilterField: "neeto-filters-name-filter",
7225
+ neetoFilterNameBlock: "neeto-filters-name-block",
7226
+ roleSelectContainer: "role-select-container-wrapper",
7227
+ filterButton: "neeto-filters-toggle-btn",
7228
+ filtersClearButton: "neeto-filters-clear-btn",
7229
+ filterDoneButton: "neeto-filters-done-btn",
7230
+ filteredMembersCount: "ntm-filtered-members-count",
7231
+ allMenubarBlock: "ntm-members-menubar-all-block",
7232
+ filtersEmailFilter: "neeto-filters-email-filter",
7233
+ paneModalCrossIcon: "neeto-filters-close-button",
7234
+ };
7235
+
7236
+ const HELP_CENTER_SELECTORS = {
7237
+ helpButton: "help-button",
7238
+ documentationButton: "help-link-help-center-button",
7239
+ keyboardShortcutButton: "help-link-keyboard-shortcut-button",
7240
+ chatButton: "help-link-live-chat-button",
7241
+ whatsNewButton: "help-link-changelog-button",
7242
+ whatsNewWidgetInfo: "h1",
7243
+ whatsNewWidgetCloseButton: ".nc-widget-header__btn",
7244
+ keyboardShortcutPaneHeading: "keyboard-shortcuts-pane-title",
7245
+ keyboardShortcutPaneCrossIcon: "keyboard-shortcuts-pane-close-button",
7246
+ };
7247
+ const CHAT_WIDGET_SELECTORS = {
7248
+ chatWidgetHomeCard: "neeto-chat-widget-cta-title",
7249
+ widgetSubmitButton: "neeto-chat-widget-pre-chat-submit-btn",
7250
+ chatBubbleMessage: "neeto-chat-widget-chat-message-bubble",
7251
+ chatCloseButton: ".neeto-chat-widget-icon--close",
7252
+ widgetIframe: "#neetochat-iframe",
7253
+ };
7254
+
7060
7255
  const LOGIN_SELECTORS = {
7061
7256
  appleAuthenticationButton: "apple-authentication-button",
7062
7257
  emailTextField: "login-email-text-field",
@@ -7069,7 +7264,77 @@ const LOGIN_SELECTORS = {
7069
7264
  twitterAuthenticationButton: "twitter-authentication-button",
7070
7265
  };
7071
7266
 
7072
- const COMMON_TEXTS = { edit: "Edit" };
7267
+ const MEMBER_SELECTORS = {
7268
+ membersTab: "members-nav-tab",
7269
+ newButton: "ntm-add-member-button",
7270
+ continueButton: "ntm-manage-member-continue-button",
7271
+ submitButton: "ntm-manage-member-submit-button",
7272
+ searchTextField: "ntm-search-members-input",
7273
+ deactivatedAgentsButton: "ntm-members-menubar-deactivated-block",
7274
+ activatedMembersButton: "ntm-members-menubar-active-block",
7275
+ columnCheckBox: "neeto-ui-columns-checkbox",
7276
+ roleLabel: (role) => `${joinHyphenCase(role)}-radio-label`,
7277
+ dropDownIcon: "ntm-members-table-row-dropdown-button",
7278
+ editButton: "ntm-edit-member-button",
7279
+ menuBarHeading: "ntm-members-menubar-heading",
7280
+ activateOrDeactivateMember: "ntm-deactivate-member-button",
7281
+ columnsButton: "columns-dropdown-button",
7282
+ columnsDropdownContainer: "columns-dropdown-container",
7283
+ emailDropdownItemLabel: "email-checkbox-label",
7284
+ roleDropdownItemLabel: "role-checkbox-label",
7285
+ inviteStatusDropdownItemLabel: "invite-status-checkbox-label",
7286
+ heading: "ntm-manage-members-pane-header",
7287
+ activateButton: "ntm-activate-members-button",
7288
+ deactivateButton: "ntm-deactivate-members-button",
7289
+ rolesButton: "ntm-manage-member-roles-button",
7290
+ statusTag: "ntm-member-status-tag",
7291
+ };
7292
+ const MEMBER_FORM_SELECTORS = {
7293
+ emailTextField: "email-select-input-field",
7294
+ firstNameTextField: "ntm-edit-member-first-name-text-field",
7295
+ lastNameTextField: "ntm-edit-member-last-name-text-field",
7296
+ emailInput: "ntm-manage-member-email-input",
7297
+ emailErrorField: "emails-input-error",
7298
+ cancelButton: "ntm-manage-member-cancel-button",
7299
+ };
7300
+
7301
+ const ROLES_SELECTORS = {
7302
+ newButton: "ntm-add-role-button",
7303
+ proceedButton: "ntm-add-role-submit-button",
7304
+ cancelButton: "ntm-add-role-cancel-button",
7305
+ tableHeaderRoleName: "ntm-roles-table-role-header",
7306
+ nameTextField: "ntm-add-role-name-text-field",
7307
+ searchTextField: "ntm-search-roles-input",
7308
+ updateRolePaneHeading: "ntm-add-role-title",
7309
+ updateRoleCancelButton: "ntm-add-role-cancel-button",
7310
+ descriptionTextField: "ntm-add-role-description-text-field",
7311
+ permissionCategoryTitle: "ntm-roles-permission-category-title",
7312
+ headerColumn: "ntm-roles-table-header",
7313
+ dropDownIcon: "ntm-roles-table-header-role-dropdown-button",
7314
+ tableHeaderRoleTitle: "ntm-roles-table-header-role-title",
7315
+ };
7316
+
7317
+ const TAGS_SELECTORS = {
7318
+ newTagButton: "add-new-tag-button",
7319
+ tagNameTextField: "tag-name-text-field",
7320
+ editButton: "tags-edit-button",
7321
+ deleteButton: "tags-delete-button",
7322
+ cancelButton: "neeto-tags-manage-tag-cancel-button",
7323
+ submitButton: "neeto-tags-manage-tag-submit-button",
7324
+ searchTextField: "neeto-tags-search-text-input-field",
7325
+ descriptionTextArea: "tag-description-text-area",
7326
+ };
7327
+ const MERGE_TAGS_SELECTORS = {
7328
+ mergeTagsButton: "neeto-tags-merge-tags-button",
7329
+ mergeButton: "neeto-tags-merge-button",
7330
+ sourceSearchTextField: "neeto-tags-merge-source-search-text-input-field",
7331
+ sourceTagsList: "neeto-tags-merge-source-tags-list",
7332
+ destinationTagsList: "neeto-tags-merge-destination-tags-list",
7333
+ destinationSearchTextField: "neeto-tags-merge-destination-search-text-input-field",
7334
+ cancelButton: "neeto-tags-merge-cancel-button",
7335
+ proceedButton: "neeto-tags-merge-proceed-button",
7336
+ disabledTag: ".neeto-ui-cursor-not-allowed",
7337
+ };
7073
7338
 
7074
7339
  const initializeCredentials = (product) => {
7075
7340
  const { user } = readFileSyncIfExists();
@@ -7562,5 +7827,5 @@ const definePlaywrightConfig = (overrides) => {
7562
7827
  });
7563
7828
  };
7564
7829
 
7565
- export { BASE_URL, COMMON_SELECTORS, COMMON_TEXTS, CREDENTIALS, CustomCommands, ENVIRONMENT, GLOBAL_TRANSLATIONS_PATTERN, IS_STAGING_ENV, LOGIN_SELECTORS, OrganizationPage, PROJECT_TRANSLATIONS_PATH, ROUTES, SIGNUP_SELECTORS, STORAGE_STATE, clearCredentials, commands, definePlaywrightConfig, generateStagingData, i18n, initializeCredentials, joinString, login, loginWithoutSSO, readFileSyncIfExists, readTranslations, updateCredentials, writeDataToFile };
7830
+ export { BASE_URL, CHAT_WIDGET_SELECTORS, COMMON_SELECTORS, CREDENTIALS, CustomCommands, ENVIRONMENT, GLOBAL_TRANSLATIONS_PATTERN, HELP_CENTER_SELECTORS, IS_STAGING_ENV, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MERGE_TAGS_SELECTORS, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, OrganizationPage, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, SIGNUP_SELECTORS, STORAGE_STATE, TAGS_SELECTORS, clearCredentials, commands, definePlaywrightConfig, generateStagingData, hyphenize, i18nFixture, initializeCredentials, joinHyphenCase, joinString, login, loginWithoutSSO, readFileSyncIfExists, readTranslations, updateCredentials, writeDataToFile };
7566
7831
  //# sourceMappingURL=index.js.map