@bigbinary/neeto-playwright-commons 4.1.2 → 4.1.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.
Files changed (3) hide show
  1. package/index.d.ts +13 -29
  2. package/index.js +111 -132
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -3593,7 +3593,6 @@ declare class EditorPage {
3593
3593
  calloutSelector: Locator;
3594
3594
  videoUploadOption: Locator;
3595
3595
  todoListSelector: Locator;
3596
- textColorSelector: Locator;
3597
3596
  filePath: string;
3598
3597
  videoPath: string;
3599
3598
  linkUrl: string;
@@ -3625,7 +3624,6 @@ declare class EditorPage {
3625
3624
  private verifyVideoUploadOption;
3626
3625
  private verifyTodoListSelector;
3627
3626
  verifyDynamicVariables: (dynamicVariables: KeyValuePair[]) => Promise<void>;
3628
- private verifyTextColor;
3629
3627
  private verifyCalloutSelector;
3630
3628
  private buttonsAndVerifications;
3631
3629
  private fillRandomText;
@@ -4956,6 +4954,8 @@ declare const ACTIONS: {
4956
4954
  readonly updatedRole: "updatedRole";
4957
4955
  readonly deletedRole: "deletedRole";
4958
4956
  readonly updatedName: "updatedName";
4957
+ readonly connectedIntegration: "connectedIntegration";
4958
+ readonly disconnectedIntegration: "disconnectedIntegration";
4959
4959
  };
4960
4960
  type InviteUsersData = {
4961
4961
  emails: string[];
@@ -4986,6 +4986,10 @@ type DeletedRoleData = {
4986
4986
  type UpdatedNameData = {
4987
4987
  name: string;
4988
4988
  };
4989
+ type IntegrationData = {
4990
+ integrationName: string;
4991
+ detail?: string;
4992
+ };
4989
4993
  type ActionDataMap = {
4990
4994
  [ACTIONS.inviteUsers]: InviteUsersData;
4991
4995
  [ACTIONS.updatedUser]: UpdatedUserData;
@@ -4996,6 +5000,8 @@ type ActionDataMap = {
4996
5000
  [ACTIONS.updatedRole]: UpdatedRoleData;
4997
5001
  [ACTIONS.deletedRole]: DeletedRoleData;
4998
5002
  [ACTIONS.updatedName]: UpdatedNameData;
5003
+ [ACTIONS.connectedIntegration]: IntegrationData;
5004
+ [ACTIONS.disconnectedIntegration]: IntegrationData;
4999
5005
  };
5000
5006
  type ActionDataKey = keyof ActionDataMap;
5001
5007
  type MessageBuilders = { [k in ActionDataKey]: (data: ActionDataMap[k]) => string };
@@ -6176,7 +6182,6 @@ declare const LIST_MODIFIER_TAGS: {
6176
6182
  bulletList: string;
6177
6183
  orderedList: string;
6178
6184
  };
6179
- declare const EDITOR_VERIFY_TEXT_COLOR = "#e60000";
6180
6185
  declare const PHONE_NUMBER_FORMATS: {
6181
6186
  name: string;
6182
6187
  code: string;
@@ -6731,7 +6736,6 @@ declare const NEETO_EDITOR_SELECTORS: {
6731
6736
  strikeOption: string;
6732
6737
  codeBlockOption: string;
6733
6738
  highlightOption: string;
6734
- textColorOption: string;
6735
6739
  emojiOption: string;
6736
6740
  emojiDropdownIcon: string;
6737
6741
  linkInput: string;
@@ -7084,6 +7088,7 @@ declare const NEETO_IMAGE_UPLOADER_SELECTORS: {
7084
7088
  declare const LOGIN_SELECTORS: {
7085
7089
  appleAuthenticationButton: string;
7086
7090
  emailTextField: string;
7091
+ loginAsOliverBtn: string;
7087
7092
  googleAuthenticationButton: string;
7088
7093
  githubAuthenticationButton: string;
7089
7094
  loginViaEmailButton: string;
@@ -8556,27 +8561,7 @@ interface LoginProps {
8556
8561
  loginPath?: string;
8557
8562
  email?: string;
8558
8563
  }
8559
- declare const fillCredentialsAndSubmit: ({
8560
- page,
8561
- loginPath,
8562
- email
8563
- }: LoginProps) => Promise<void>;
8564
- /**
8565
- *
8566
- * Used to login by using email and password. It takes the following parameters:
8567
- *
8568
- * loginPath (optional): The path to which the user should be redirected for login.
8569
- *
8570
- * page: A page object
8571
- *
8572
- * @example
8573
- *
8574
- * import { loginWithoutSSO } from "@neetoplaywright"
8575
- *
8576
- * await loginWithoutSSO({ page, loginPath:"/home" })
8577
- * @endexample
8578
- */
8579
- declare const loginWithoutSSO: ({
8564
+ declare const authenticateUser: ({
8580
8565
  page,
8581
8566
  loginPath,
8582
8567
  email
@@ -8598,9 +8583,8 @@ declare const loginWithoutSSO: ({
8598
8583
  */
8599
8584
  declare const login: ({
8600
8585
  page,
8601
- loginPath,
8602
- email
8603
- }: LoginProps) => Promise<false | void>;
8586
+ loginPath
8587
+ }: Omit<LoginProps, "email">) => Promise<void>;
8604
8588
  /**
8605
8589
  *
8606
8590
  * Function to generate a random email to bypass OTP verification and log into
@@ -9294,5 +9278,5 @@ interface Overrides {
9294
9278
  * @endexample
9295
9279
  */
9296
9280
  declare const definePlaywrightConfig: (overrides: Overrides) => PlaywrightTestConfig<{}, {}>;
9297
- export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EDITOR_VERIFY_TEXT_COLOR, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmailDeliveryUtils, EmbedBase, FILE_FORMATS, FONTS_RESOURCES, FONT_SIZE_SELECTORS, FROM_EMAIL_ENV_KEYS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_RESOURCES, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
9281
+ export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmailDeliveryUtils, EmbedBase, FILE_FORMATS, FONTS_RESOURCES, FONT_SIZE_SELECTORS, FROM_EMAIL_ENV_KEYS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_RESOURCES, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
9298
9282
  export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, EmailMatchCriteria, IntroPageThemeStyle, IntroPageThemeStyleType, OAuthEmailDeliveryProvider, ProjectName, ThemeCategory, ValueOf };
package/index.js CHANGED
@@ -1300,78 +1300,8 @@ const imageRegex = (imageName) => {
1300
1300
  return new RegExp(`${baseName}.*\\.${extension}$`);
1301
1301
  };
1302
1302
 
1303
- const DESCRIPTION_EDITOR_TEXTS = {
1304
- fontSize: "Font size",
1305
- paragraph: "Paragraph",
1306
- normalText: "Normal text",
1307
- pasteLink: "Paste the link here...",
1308
- invalidURLError: "Please enter a valid URL",
1309
- pasteURL: "Paste URL",
1310
- delete: "Delete",
1311
- linkTag: "a",
1312
- link: "Link",
1313
- cannedResponseHeader: "Canned responses",
1314
- paragraphOption: "paragraph",
1315
- search: "Search",
1316
- emoji: "Emoji",
1317
- };
1318
- const EXPANDED_FONT_SIZE = {
1319
- h1: "Heading 1",
1320
- h2: "Heading 2",
1321
- h3: "Heading 3",
1322
- h4: "Heading 4",
1323
- h5: "Heading 5",
1324
- };
1325
- const TEXT_MODIFIER_TAGS = {
1326
- underline: "u",
1327
- strike: "s",
1328
- };
1329
- const TEXT_MODIFIER_ROLES = {
1330
- bold: "strong",
1331
- italic: "emphasis",
1332
- code: "code",
1333
- blockquote: "blockquote",
1334
- codeBlock: "code",
1335
- };
1336
- const LIST_MODIFIER_TAGS = {
1337
- bulletList: "ul",
1338
- orderedList: "ol",
1339
- };
1340
- const EDITOR_VERIFY_TEXT_COLOR = "#e60000";
1341
-
1342
- const basicHTMLContent = (content) => `
1343
- <!DOCTYPE html>
1344
- <html lang="en">
1345
- <head>
1346
- <meta charset="UTF-8" />
1347
- <meta name="viewport" content="width=device-width" />
1348
- </head>
1349
- <body>
1350
- ${content}
1351
- </body>
1352
- </html>`;
1353
- const hexToRGB = (hex) => {
1354
- let r = "", g = "", b = "";
1355
- if (hex.length === 4) {
1356
- r = `0x${hex[1]}${hex[1]}`;
1357
- g = `0x${hex[2]}${hex[2]}`;
1358
- b = `0x${hex[3]}${hex[3]}`;
1359
- }
1360
- else if (hex.length === 7) {
1361
- r = `0x${hex[1]}${hex[2]}`;
1362
- g = `0x${hex[3]}${hex[4]}`;
1363
- b = `0x${hex[5]}${hex[6]}`;
1364
- }
1365
- return `rgb(${Number(r)}, ${Number(g)}, ${Number(b)})`;
1366
- };
1367
-
1368
1303
  const optionSelector = (option) => `neeto-editor-fixed-menu-${option}-option`;
1369
1304
  const fixedMenuSelector = (selector) => `neeto-editor-fixed-menu-${selector}`;
1370
- const editorTextColorStylePattern = (hex = EDITOR_VERIFY_TEXT_COLOR) => {
1371
- const normalized = hex.replace("#", "");
1372
- const [r, g, b] = hexToRGB(hex).match(/\d+/g) ?? [];
1373
- return new RegExp(`color:\\s*(#${normalized}|rgb\\(\\s*${r}\\s*,\\s*${g}\\s*,\\s*${b}\\s*\\))`, "i");
1374
- };
1375
1305
 
1376
1306
  const NEETO_EDITOR_SELECTORS = {
1377
1307
  fontSize: optionSelector("font-size"),
@@ -1381,7 +1311,6 @@ const NEETO_EDITOR_SELECTORS = {
1381
1311
  strikeOption: optionSelector("strike"),
1382
1312
  codeBlockOption: optionSelector("code"),
1383
1313
  highlightOption: optionSelector("highlight"),
1384
- textColorOption: optionSelector("text-color"),
1385
1314
  emojiOption: optionSelector("emoji"),
1386
1315
  emojiDropdownIcon: "emoji-dropdown-icon",
1387
1316
  linkInput: fixedMenuSelector("link-option-input"),
@@ -1575,6 +1504,7 @@ const NEETO_IMAGE_UPLOADER_SELECTORS = {
1575
1504
  const LOGIN_SELECTORS = {
1576
1505
  appleAuthenticationButton: "apple-authentication-button",
1577
1506
  emailTextField: "login-email-text-field",
1507
+ loginAsOliverBtn: "login-as-oliver-btn",
1578
1508
  googleAuthenticationButton: "google-authentication-button",
1579
1509
  githubAuthenticationButton: "github-authentication-button",
1580
1510
  loginViaEmailButton: "login-via-email-button",
@@ -2565,34 +2495,42 @@ const THEMES_TEXTS = {
2565
2495
  darkThemeClass: /neeto-ui-theme--dark/,
2566
2496
  };
2567
2497
 
2568
- const fillCredentialsAndSubmit = async ({ page, loginPath, email = CREDENTIALS.email, }) => {
2569
- loginPath && (await page.goto(loginPath, { timeout: 30_000 }));
2570
- await page.waitForLoadState("load", { timeout: 35_000 });
2571
- await expect(page.getByTestId(COMMON_SELECTORS.pageLoader)).toBeHidden({
2572
- timeout: 30_000,
2573
- });
2498
+ const loginAsOliver = async (page) => {
2499
+ const loginAsOliverBtn = page.getByTestId(LOGIN_SELECTORS.loginAsOliverBtn);
2500
+ await expect(loginAsOliverBtn).toBeVisible({ timeout: 30_000 });
2501
+ await loginAsOliverBtn.click();
2502
+ await expect(loginAsOliverBtn).toBeHidden({ timeout: 20_000 });
2503
+ };
2504
+ const fillCredentials = async (page, email) => {
2574
2505
  const emailInput = page.getByTestId(LOGIN_SELECTORS.emailTextField);
2575
2506
  await emailInput.waitFor({ state: "visible", timeout: 30_000 });
2576
2507
  await emailInput.fill(email);
2577
2508
  await page
2578
2509
  .getByTestId(LOGIN_SELECTORS.passwordTextField)
2579
2510
  .fill(CREDENTIALS.password);
2580
- const submitButton = page.getByTestId(LOGIN_SELECTORS.submitButton);
2581
- await submitButton.click();
2582
- await expect(submitButton).toBeHidden({ timeout: 20_000 });
2511
+ const submitBtn = page.getByTestId(LOGIN_SELECTORS.submitButton);
2512
+ await submitBtn.click();
2513
+ await expect(submitBtn).toBeHidden({ timeout: 20_000 });
2514
+ };
2515
+ const authenticateUser = async ({ page, loginPath, email, }) => {
2516
+ loginPath && (await page.goto(loginPath, { timeout: 30_000 }));
2517
+ await page.waitForLoadState("load", { timeout: 35_000 });
2518
+ await expect(page.getByTestId(COMMON_SELECTORS.pageLoader)).toBeHidden({
2519
+ timeout: 30_000,
2520
+ });
2521
+ !email ? await loginAsOliver(page) : await fillCredentials(page, email);
2583
2522
  await expect(page.getByTestId(COMMON_SELECTORS.floatingActionMenuButton)).toBeVisible({ timeout: 60_000 });
2584
2523
  };
2585
- const loginWithoutSSO = async ({ page, loginPath = "/", email = CREDENTIALS.email, }) => {
2586
- if (shouldSkipSetupAndTeardown())
2524
+ const login = async ({ page, loginPath = "/", }) => {
2525
+ if (shouldSkipSetupAndTeardown() || !IS_DEV_ENV)
2587
2526
  return;
2588
- await fillCredentialsAndSubmit({ page, loginPath, email });
2527
+ await authenticateUser({ page, loginPath });
2589
2528
  const userCredentials = readFileSyncIfExists();
2590
2529
  await page.context().storageState({ path: STORAGE_STATE });
2591
2530
  const mergedCredentials = mergeAll([readFileSyncIfExists(), userCredentials]);
2592
2531
  writeDataToFile(JSON.stringify(mergedCredentials, null, 2));
2593
2532
  updateCredentials({ key: "isLoggedIn", value: "true" });
2594
2533
  };
2595
- const login = async ({ page, loginPath, email }) => IS_DEV_ENV && (await loginWithoutSSO({ page, loginPath, email }));
2596
2534
  const generateRandomBypassEmail = () => `cpt${process.env.OTP_BYPASS_KEY}+${faker.number.int()}@bigbinary.com`;
2597
2535
 
2598
2536
  const extractSubdomainFromError = (errorString) => {
@@ -17999,7 +17937,7 @@ class OrganizationPage {
17999
17937
  };
18000
17938
  loginViaSSO = async (email = generateRandomBypassEmail(), loginTimeout = 2 * 60 * 1000) => {
18001
17939
  if (IS_DEV_ENV) {
18002
- await fillCredentialsAndSubmit({ page: this.page, email });
17940
+ await authenticateUser({ page: this.page, email });
18003
17941
  return;
18004
17942
  }
18005
17943
  await this.fillEmailAndSubmit(email, loginTimeout);
@@ -18033,7 +17971,7 @@ class OrganizationPage {
18033
17971
  };
18034
17972
  loginAndOnboard = async ({ email, firstName, lastName, country, handleOnboarding, baseURL = process.env.BASE_URL, fetchOtpFromEmail, }) => {
18035
17973
  if (IS_DEV_ENV) {
18036
- await fillCredentialsAndSubmit({
17974
+ await authenticateUser({
18037
17975
  page: this.page,
18038
17976
  email,
18039
17977
  loginPath: `${baseURL}${ROUTES.admin}`,
@@ -18059,7 +17997,7 @@ class OrganizationPage {
18059
17997
  lastName: credentials.lastName,
18060
17998
  subdomainName: credentials.subdomainName,
18061
17999
  });
18062
- await fillCredentialsAndSubmit({
18000
+ await authenticateUser({
18063
18001
  page: this.page,
18064
18002
  email: credentials.email,
18065
18003
  loginPath: `${baseURLGenerator(appName, credentials.subdomainName)}${ROUTES.admin}`,
@@ -69597,6 +69535,32 @@ class FastmailApi {
69597
69535
  });
69598
69536
  }
69599
69537
 
69538
+ const basicHTMLContent = (content) => `
69539
+ <!DOCTYPE html>
69540
+ <html lang="en">
69541
+ <head>
69542
+ <meta charset="UTF-8" />
69543
+ <meta name="viewport" content="width=device-width" />
69544
+ </head>
69545
+ <body>
69546
+ ${content}
69547
+ </body>
69548
+ </html>`;
69549
+ const hexToRGB = (hex) => {
69550
+ let r = "", g = "", b = "";
69551
+ if (hex.length === 4) {
69552
+ r = `0x${hex[1]}${hex[1]}`;
69553
+ g = `0x${hex[2]}${hex[2]}`;
69554
+ b = `0x${hex[3]}${hex[3]}`;
69555
+ }
69556
+ else if (hex.length === 7) {
69557
+ r = `0x${hex[1]}${hex[2]}`;
69558
+ g = `0x${hex[3]}${hex[4]}`;
69559
+ b = `0x${hex[5]}${hex[6]}`;
69560
+ }
69561
+ return `rgb(${Number(r)}, ${Number(g)}, ${Number(b)})`;
69562
+ };
69563
+
69600
69564
  class RailsEmailUtils {
69601
69565
  neetoPlaywrightUtilities;
69602
69566
  railsEmailClient;
@@ -119571,6 +119535,44 @@ class Member {
119571
119535
  };
119572
119536
  }
119573
119537
 
119538
+ const DESCRIPTION_EDITOR_TEXTS = {
119539
+ fontSize: "Font size",
119540
+ paragraph: "Paragraph",
119541
+ normalText: "Normal text",
119542
+ pasteLink: "Paste the link here...",
119543
+ invalidURLError: "Please enter a valid URL",
119544
+ pasteURL: "Paste URL",
119545
+ delete: "Delete",
119546
+ linkTag: "a",
119547
+ link: "Link",
119548
+ cannedResponseHeader: "Canned responses",
119549
+ paragraphOption: "paragraph",
119550
+ search: "Search",
119551
+ emoji: "Emoji",
119552
+ };
119553
+ const EXPANDED_FONT_SIZE = {
119554
+ h1: "Heading 1",
119555
+ h2: "Heading 2",
119556
+ h3: "Heading 3",
119557
+ h4: "Heading 4",
119558
+ h5: "Heading 5",
119559
+ };
119560
+ const TEXT_MODIFIER_TAGS = {
119561
+ underline: "u",
119562
+ strike: "s",
119563
+ };
119564
+ const TEXT_MODIFIER_ROLES = {
119565
+ bold: "strong",
119566
+ italic: "emphasis",
119567
+ code: "code",
119568
+ blockquote: "blockquote",
119569
+ codeBlock: "code",
119570
+ };
119571
+ const LIST_MODIFIER_TAGS = {
119572
+ bulletList: "ul",
119573
+ orderedList: "ol",
119574
+ };
119575
+
119574
119576
  const __dirname$4 = getDirname(import.meta.url);
119575
119577
  class SlashCommandEditorPage {
119576
119578
  page;
@@ -119794,7 +119796,6 @@ class EditorPage {
119794
119796
  calloutSelector;
119795
119797
  videoUploadOption;
119796
119798
  todoListSelector;
119797
- textColorSelector;
119798
119799
  filePath = "../../../e2e/assets/images/sample.png";
119799
119800
  videoPath = "../../../e2e/assets/files/sample.mp4";
119800
119801
  linkUrl = faker.internet.url();
@@ -119832,7 +119833,6 @@ class EditorPage {
119832
119833
  this.tableOption = this.editorWrapper.getByTestId(NEETO_EDITOR_SELECTORS.tableOption);
119833
119834
  this.videoUploadOption = this.editorWrapper.getByTestId(NEETO_EDITOR_SELECTORS.videoUploadOption);
119834
119835
  this.todoListSelector = this.editorWrapper.getByTestId(NEETO_EDITOR_SELECTORS.todoListOption);
119835
- this.textColorSelector = this.editorWrapper.getByTestId(NEETO_EDITOR_SELECTORS.textColorOption);
119836
119836
  }
119837
119837
  cleanString = (selector = "") => selector?.replace("neeto-editor-fixed-menu-", "").replace("-option", "") ||
119838
119838
  "";
@@ -119901,9 +119901,10 @@ class EditorPage {
119901
119901
  .filter({ hasText: randomText })).toBeVisible();
119902
119902
  await this.neetoPlaywrightUtilities.moveCursorAtBottom();
119903
119903
  await this.page.keyboard.press("Enter");
119904
- await this.contentField.click();
119905
- isButtonInMoreMenu && (await this.moreMenuSelector.click());
119906
- await textModifierSelector.click();
119904
+ if (modifierKey !== "codeBlock") {
119905
+ isButtonInMoreMenu && (await this.moreMenuSelector.click());
119906
+ await textModifierSelector.click();
119907
+ }
119907
119908
  return [{ key: modifierKey, value: randomText }];
119908
119909
  };
119909
119910
  verifyTextDeskModifier = async (modifier, isButtonInMoreMenu) => {
@@ -119973,6 +119974,7 @@ class EditorPage {
119973
119974
  await expect(this.contentField
119974
119975
  .locator(LIST_MODIFIER_TAGS[modifierKey])
119975
119976
  .filter({ hasText: randomText })).toBeVisible();
119977
+ await this.neetoPlaywrightUtilities.moveCursorAtBottom();
119976
119978
  isButtonInMoreMenu && (await this.moreMenuSelector.click());
119977
119979
  await listModifierSelector.click();
119978
119980
  return [{ key: modifierKey, value: randomText }];
@@ -120167,31 +120169,6 @@ class EditorPage {
120167
120169
  await expect(this.contentField.getByText(truncate(`${key}:${value}`, 25))).toBeVisible();
120168
120170
  }
120169
120171
  };
120170
- verifyTextColor = async (isButtonInMoreMenu) => {
120171
- const randomText = await this.fillRandomText();
120172
- const colorPickerInput = this.page
120173
- .getByTestId(COMMON_SELECTORS.customDropdownContainer())
120174
- .getByTestId(COMMON_SELECTORS.inputField);
120175
- await expect(async () => {
120176
- isButtonInMoreMenu && (await this.moreMenuSelector.click());
120177
- await this.textColorSelector.click();
120178
- await expect(colorPickerInput).toBeVisible({ timeout: 5_000 });
120179
- await colorPickerInput.fill(EDITOR_VERIFY_TEXT_COLOR);
120180
- // Using .first() to target the button rendered by the Formik editor.
120181
- await this.page
120182
- .getByTestId(COMMON_SELECTORS.customDropdownContainer())
120183
- .getByRole("button")
120184
- // eslint-disable-next-line playwright/no-nth-methods
120185
- .first()
120186
- .click();
120187
- await expect(colorPickerInput).toBeHidden({ timeout: 5_000 });
120188
- }).toPass({ timeout: 40_000 });
120189
- const coloredText = this.contentField.locator("[style]", {
120190
- hasText: randomText,
120191
- });
120192
- await expect(coloredText).toHaveAttribute("style", editorTextColorStylePattern());
120193
- return [{ key: "text-color", value: randomText }];
120194
- };
120195
120172
  verifyCalloutSelector = async (isButtonInMoreMenu) => {
120196
120173
  isButtonInMoreMenu && (await this.moreMenuSelector.click());
120197
120174
  const calloutTypes = ["default", "info", "warning", "error", "success"];
@@ -120227,7 +120204,6 @@ class EditorPage {
120227
120204
  underline: isButtonInMoreMenu => this.verifyTextDeskModifier("underline", isButtonInMoreMenu),
120228
120205
  strike: isButtonInMoreMenu => this.verifyTextDeskModifier("strike", isButtonInMoreMenu),
120229
120206
  highlight: isButtonInMoreMenu => this.verifyTextHighlighter(isButtonInMoreMenu),
120230
- "text-color": isButtonInMoreMenu => this.verifyTextColor(isButtonInMoreMenu),
120231
120207
  bulletList: isButtonInMoreMenu => this.verifyListModifiers("bulletList", isButtonInMoreMenu),
120232
120208
  orderedList: isButtonInMoreMenu => this.verifyListModifiers("orderedList", isButtonInMoreMenu),
120233
120209
  link: isButtonInMoreMenu => this.verifyEditorLinkButton(this.linkUrl, isButtonInMoreMenu),
@@ -120236,7 +120212,6 @@ class EditorPage {
120236
120212
  imageUrl: this.imageUrl,
120237
120213
  filePath: this.filePath,
120238
120214
  isButtonInMoreMenu,
120239
- shouldRemoveImage: true,
120240
120215
  }),
120241
120216
  "canned-responses": isButtonInMoreMenu => this.verifyCannedResponseOption(isButtonInMoreMenu),
120242
120217
  "video-embed": isButtonInMoreMenu => this.verifyVideoEmbedOption(this.videoUrl, isButtonInMoreMenu),
@@ -120255,9 +120230,9 @@ class EditorPage {
120255
120230
  do {
120256
120231
  randomText = faker.lorem.word(10);
120257
120232
  } while (this.wordsUsedInEditor.includes(randomText));
120258
- await this.contentField.click();
120233
+ await this.contentField.focus();
120259
120234
  await this.neetoPlaywrightUtilities.moveCursorAtBottom();
120260
- await this.contentField.fill(randomText);
120235
+ await this.page.keyboard.type(randomText);
120261
120236
  this.wordsUsedInEditor.push(randomText);
120262
120237
  const randomTextLocator = this.contentField.getByText(randomText);
120263
120238
  await randomTextLocator.scrollIntoViewIfNeeded();
@@ -120823,6 +120798,8 @@ const ACTIONS = {
120823
120798
  updatedRole: "updatedRole",
120824
120799
  deletedRole: "deletedRole",
120825
120800
  updatedName: "updatedName",
120801
+ connectedIntegration: "connectedIntegration",
120802
+ disconnectedIntegration: "disconnectedIntegration",
120826
120803
  };
120827
120804
 
120828
120805
  dayjs.extend(utc);
@@ -120849,6 +120826,12 @@ class AuditLogsPage {
120849
120826
  [ACTIONS.updatedRole]: (data) => `${this.admin} updated ${data.roleName} role on Neeto${this.product}.`,
120850
120827
  [ACTIONS.deletedRole]: (data) => `${this.admin} deleted ${data.roleName} role on Neeto${this.product}.`,
120851
120828
  [ACTIONS.updatedName]: (data) => `${this.admin} changed first name from ${data.name} to ${this.admin.split(" ")[0]} in Neeto${this.product}.`,
120829
+ [ACTIONS.connectedIntegration]: (data) => data.detail
120830
+ ? `${this.admin} connected ${data.integrationName} using ${data.detail}.`
120831
+ : `${this.admin} connected ${data.integrationName}.`,
120832
+ [ACTIONS.disconnectedIntegration]: (data) => data.detail
120833
+ ? `${this.admin} disconnected ${data.integrationName} for ${data.detail}.`
120834
+ : `${this.admin} disconnected ${data.integrationName}.`,
120852
120835
  };
120853
120836
  }
120854
120837
  verifyAuditLogs = async ({ action, adminName, data, }) => {
@@ -121219,24 +121202,20 @@ class RolesPage {
121219
121202
  };
121220
121203
  deleteRoleViaUI = async (roleName) => {
121221
121204
  await this.neetoPlaywrightUtilities.waitForPageLoad();
121222
- await this.page.getByTestId(ROLES_SELECTORS.searchTextField).fill(roleName);
121223
- const tableHeaderRoles = this.page.getByTestId(ROLES_SELECTORS.tableHeaderRoleName);
121224
- await expect(tableHeaderRoles).toHaveCount(1);
121225
- await tableHeaderRoles
121205
+ await this.page
121206
+ .getByTestId(ROLES_SELECTORS.tableHeaderRoleName)
121226
121207
  .filter({ hasText: roleName })
121227
121208
  .getByTestId(ROLES_SELECTORS.dropDownIcon)
121228
121209
  .click();
121229
121210
  await this.page.getByTestId(ROLES_SELECTORS.deleteRoleButton).click();
121230
121211
  await expect(this.page.getByTestId(COMMON_SELECTORS.alertTitle)).toHaveText(this.t("neetoTeamMembers.labels.deleteRole"));
121231
- await Promise.all([
121232
- this.page.getByTestId(COMMON_SELECTORS.alertModalSubmitButton).click(),
121233
- this.neetoPlaywrightUtilities.verifyToast(),
121234
- ]);
121212
+ await this.neetoPlaywrightUtilities.clickButtonAndAwaitLoad({
121213
+ locator: this.page.getByTestId(COMMON_SELECTORS.alertModalSubmitButton),
121214
+ });
121215
+ await this.neetoPlaywrightUtilities.verifyToast();
121235
121216
  await expect(this.page
121236
121217
  .getByTestId(ROLES_SELECTORS.tableHeaderRoleTitle)
121237
121218
  .filter({ hasText: roleName })).toBeHidden();
121238
- await expect(this.page.getByTestId(COMMON_SELECTORS.noDataTitle)).toHaveText(this.t("neetoTeamMembers.labels.roleNotFound", PLURAL));
121239
- await expect(this.page.getByTestId(ROLES_SELECTORS.newButton)).toHaveCount(2);
121240
121219
  };
121241
121220
  verifyPermissions = ({ allPermissions, rolePermissions, }) => Promise.all(Object.values(allPermissions).map(async (permission) => rolePermissions.includes(permission)
121242
121221
  ? await expect(this.page.getByTestId(permission)).toBeVisible()
@@ -126117,4 +126096,4 @@ const definePlaywrightConfig = (overrides) => {
126117
126096
  });
126118
126097
  };
126119
126098
 
126120
- export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EDITOR_VERIFY_TEXT_COLOR, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmailDeliveryUtils, EmbedBase, FILE_FORMATS, FONTS_RESOURCES, FONT_SIZE_SELECTORS, FROM_EMAIL_ENV_KEYS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_RESOURCES, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, fillCredentialsAndSubmit, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, loginWithoutSSO, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
126099
+ export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CHANGELOG_WIDGET_SELECTORS, CHAT_WIDGET_SELECTORS, CHAT_WIDGET_TEXTS, COLOR, COMMON_SELECTORS, COMMON_TEXTS, COMMUNITY_TEXTS, CREDENTIALS, CURRENT_TIME_RANGES, CUSTOM_DOMAIN_SELECTORS, CUSTOM_DOMAIN_SUFFIX, ColorPickerUtils, CustomCommands, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_WEBHOOKS_RESPONSE_TEXT, DESCRIPTION_EDITOR_TEXTS, EMBED_SELECTORS, EMOJI_LABEL, EMPTY_STORAGE_STATE, ENGAGE_TEXTS, ENVIRONMENT, EXAMPLE_URL, EXPANDED_FONT_SIZE, EXPORT_FILE_TYPES, EditorPage, EmailDeliveryUtils, EmbedBase, FILE_FORMATS, FONTS_RESOURCES, FONT_SIZE_SELECTORS, FROM_EMAIL_ENV_KEYS, GLOBAL_TRANSLATIONS_PATTERN, GOOGLE_ANALYTICS_SELECTORS, GOOGLE_CALENDAR_DATE_FORMAT, GOOGLE_LOGIN_SELECTORS, GOOGLE_LOGIN_TEXTS, GOOGLE_SHEETS_SELECTORS, GooglePage, HELP_CENTER_ROUTES, HELP_CENTER_SELECTORS, HelpAndProfilePage, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_ENV, IS_STAGING_ENV, ImageUploader, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, Member, MemberApis, MicrosoftPage, NEETO_AUTH_BASE_URL, NEETO_EDITOR_SELECTORS, NEETO_FILTERS_SELECTORS, NEETO_IMAGE_UPLOADER_SELECTORS, NEETO_ROUTES, NEETO_SEO_SELECTORS, NEETO_TEXT_MODIFIER_SELECTORS, NeetoAuthServer, NeetoChatWidget, NeetoEmailDeliveryApi, NeetoTowerApi, ONBOARDING_SELECTORS, ORGANIZATION_TEXTS, OTP_EMAIL_PATTERN, OrganizationPage, PAST_TIME_RANGES, PHONE_NUMBER_FORMATS, PLURAL, PRODUCT_ROLES_ROUTE_MAP, PROFILE_LINKS, PROFILE_SECTION_SELECTORS, PROJECT_NAMES, PROJECT_TRANSLATIONS_PATH, ROLES_SELECTORS, ROUTES, RailsEmailApiClient, RailsEmailUtils, RoleApis, RolesPage, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, TABLE_SELECTORS, TAB_SELECTORS, TAGS_SELECTORS, TEAM_MEMBER_TEXTS, TEXT_MODIFIER_ROLES, TEXT_MODIFIER_SELECTORS, TEXT_MODIFIER_TAGS, THANK_YOU_SELECTORS, THEMES_SELECTORS, THEMES_TEXTS, THIRD_PARTY_RESOURCES, THIRD_PARTY_ROUTES, TIME_RANGES, TOASTR_MESSAGES, TWILIO_SELECTORS, TagsApi, TagsPage, TeamMembers, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, executeWithThrottledResources, extractSubdomainFromError, filterUtils, generatePhoneNumber, generatePhoneNumberDetails, generateRandomBypassEmail, generateRandomFile, generateStagingData, getByDataQA, getClipboardContent, getDirname, getFormattedPhoneNumber, getFullUrl, getGlobalUserProps, getGlobalUserState, getImagePathAndName, getIsoCodeFromPhoneCode, getListCount, globalShortcuts, grantClipboardPermissions, hexToRGB, hexToRGBA, i18nFixture, imageRegex, initializeCredentials, initializeTestData, initializeTotp, isGithubIssueOpen, isStagingOrganizationExpired, joinHyphenCase, joinString, login, networkConditions, networkThrottlingUsingCDP, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-playwright-commons",
3
- "version": "4.1.2",
3
+ "version": "4.1.4",
4
4
  "description": "A package encapsulating common playwright code across neeto projects.",
5
5
  "repository": "git@github.com:bigbinary/neeto-playwright-commons.git",
6
6
  "license": "apache-2.0",