@bigbinary/neeto-playwright-commons 4.8.4 → 4.8.6

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 +31 -3
  2. package/index.js +87 -24
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -4165,6 +4165,8 @@ declare class EditorPage {
4165
4165
  private fixedMenuOptions;
4166
4166
  private moreMenuOptions;
4167
4167
  private verifyFontSize;
4168
+ private verifyFontSizeV1;
4169
+ private verifyFontSizeV2;
4168
4170
  private verifyTextModifiers;
4169
4171
  private verifyTextDeskModifier;
4170
4172
  private openHighlighterContainer;
@@ -4647,6 +4649,8 @@ declare const DATE_RANGES: {
4647
4649
  };
4648
4650
  declare const CERTIFICATE_LIMIT_EXCEEDED_REGEXP = "too many certificates \\(\\d+\\) already issued for \"neetoautomation.com\"";
4649
4651
  declare const CERTIFICATE_LIMIT_EXCEEDED_MESSAGE = "Certificate limit exceeded for custom domain";
4652
+ declare const CERTIFICATE_PROVISION_FAILED_MESSAGE = "Certificate provisioning failed for custom domain";
4653
+ declare const CERTIFICATE_PROVISION_FAILED_REGEXP = "provisioning certificate for your domain";
4650
4654
  declare const EXPORT_FILE_TYPES: {
4651
4655
  readonly pdf: "pdf";
4652
4656
  readonly excel: "excel";
@@ -6006,7 +6010,21 @@ declare class CustomDomainPage {
6006
6010
  private addCustomDomain;
6007
6011
  /**
6008
6012
  *
6009
- * Validates the custom domain via UI.
6013
+ * Validates the custom domain via UI. Clicks Validate once, then polls
6014
+ *
6015
+ * GET /api/v1/custom_domains until the domain status is active. Skips the
6016
+ *
6017
+ * test when certificate infrastructure is outside the suite's control (Let's
6018
+ *
6019
+ * Encrypt certificate limit exceeded, or neetoCustomDomains.certificateProvisionFailed).
6020
+ *
6021
+ * Does not wait for the success toast — staging validation is asynchronous and
6022
+ *
6023
+ * that toast is only emitted on a synchronous 200. After the domain is
6024
+ *
6025
+ * active, closes the validation pane if it is still open so later UI steps can
6026
+ *
6027
+ * reach the domain list.
6010
6028
  *
6011
6029
  * domain: The custom domain string to validate.
6012
6030
  *
@@ -6016,6 +6034,7 @@ declare class CustomDomainPage {
6016
6034
  * @endexample
6017
6035
  */
6018
6036
  validateCustomDomain: (domain: string) => Promise<void>;
6037
+ private getProductSubdomainFromHostname;
6019
6038
  private getDomainStatus;
6020
6039
  private loginToCustomDomain;
6021
6040
  private waitForTrustedSSL;
@@ -6088,7 +6107,10 @@ declare class CustomDomainPage {
6088
6107
  * @endexample
6089
6108
  */
6090
6109
  disconnectViaRequest: () => Promise<void>;
6091
- private isCertificateLimitExceeded;
6110
+ private getValidationPaneBody;
6111
+ private getValidationPane;
6112
+ private getCertificateInfrastructureSkipReason;
6113
+ private closeValidationPane;
6092
6114
  }
6093
6115
  declare class IPRestrictionsPage {
6094
6116
  page: Page;
@@ -7528,6 +7550,11 @@ declare const AUDIT_LOGS_SELECTORS: {
7528
7550
  */
7529
7551
  declare const COMMON_SELECTORS: {
7530
7552
  emailInputError: string;
7553
+ nuiSelectInput: string;
7554
+ customSelectInput: (label: string) => string;
7555
+ tableWrapper: string;
7556
+ phoneCountryPicker: string;
7557
+ phoneCountryPickerSearch: string;
7531
7558
  pane: string;
7532
7559
  sideBar: string;
7533
7560
  copyButton: string;
@@ -7562,6 +7589,7 @@ declare const COMMON_SELECTORS: {
7562
7589
  sheetHeader: string;
7563
7590
  sheetWrapper: string;
7564
7591
  sheetBody: string;
7592
+ sheetFooter: string;
7565
7593
  sheetCloseButton: string;
7566
7594
  dialogHeader: string;
7567
7595
  dialogBody: string;
@@ -10452,5 +10480,5 @@ declare class InboundEmailApis {
10452
10480
  reply: (emailParams: ReplyInboundEmailParams) => Promise<playwright_core.APIResponse | undefined>;
10453
10481
  private deliverSource;
10454
10482
  }
10455
- export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, 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, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_PLAYWRIGHT_RUN, IS_SHADCN_UI, IS_STAGING_ENV, IS_WEBKIT, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, 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, RolesPageV2, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, SmsApi, SmsUtils, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, exampleEmail, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, 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, mailpitDomainName, minutesAgo, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
10483
+ export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CERTIFICATE_PROVISION_FAILED_MESSAGE, CERTIFICATE_PROVISION_FAILED_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, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_PLAYWRIGHT_RUN, IS_SHADCN_UI, IS_STAGING_ENV, IS_WEBKIT, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, 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, RolesPageV2, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, SmsApi, SmsUtils, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, exampleEmail, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, 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, mailpitDomainName, minutesAgo, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
10456
10484
  export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, EmailMatchCriteria, InboundEmailParams, IntroPageThemeStyle, IntroPageThemeStyleType, OAuthEmailDeliveryProvider, ProjectName, ReplyInboundEmailParams, Sms, SmsFilters, SmsProvider, SmsSearchCriteria, SmsSearchParams, ThemeCategory, ValueOf, WaitForSmsOptions };
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { isPresent, keysToSnakeCase, hyphenate, humanize, noop as noop$2, isNotPresent, keysToCamelCase, findBy, dynamicArray, truncate, isNotEmpty, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
1
+ import { isPresent, keysToSnakeCase, hyphenate, humanize, noop as noop$2, isNotPresent, keysToCamelCase, findBy, dynamicArray, truncate, isNotEmpty, _findBy, isNotEqualDeep, randomPick } from '@bigbinary/neeto-cist';
2
2
  import { faker } from '@faker-js/faker';
3
3
  import * as fs from 'fs';
4
4
  import fs__default, { readFileSync, promises, existsSync, writeFileSync, unlinkSync, mkdirSync, rmSync, createWriteStream } from 'fs';
@@ -374,6 +374,8 @@ const DATE_RANGES = {
374
374
  };
375
375
  const CERTIFICATE_LIMIT_EXCEEDED_REGEXP = `too many certificates \\(\\d+\\) already issued for "${CUSTOM_DOMAIN_SUFFIX}"`;
376
376
  const CERTIFICATE_LIMIT_EXCEEDED_MESSAGE = "Certificate limit exceeded for custom domain";
377
+ const CERTIFICATE_PROVISION_FAILED_MESSAGE = "Certificate provisioning failed for custom domain";
378
+ const CERTIFICATE_PROVISION_FAILED_REGEXP = "provisioning certificate for your domain";
377
379
  const EXPORT_FILE_TYPES = {
378
380
  pdf: "pdf",
379
381
  excel: "excel",
@@ -1032,6 +1034,11 @@ const AUDIT_LOGS_SELECTORS = {
1032
1034
 
1033
1035
  const COMMON_SELECTORS = {
1034
1036
  emailInputError: "email-input-error",
1037
+ nuiSelectInput: "nui-select-input",
1038
+ customSelectInput: (label) => `${hyphenate(label)}-select-input`,
1039
+ tableWrapper: "table-wrapper",
1040
+ phoneCountryPicker: "phonenumber-country-picker",
1041
+ phoneCountryPickerSearch: "phonenumber-country-picker-search",
1035
1042
  pane: "pane-wrapper",
1036
1043
  sideBar: "sidebar",
1037
1044
  copyButton: "copy-button",
@@ -1066,6 +1073,7 @@ const COMMON_SELECTORS = {
1066
1073
  sheetHeader: "sheet-header",
1067
1074
  sheetWrapper: "sheet-wrapper",
1068
1075
  sheetBody: "sheet-body",
1076
+ sheetFooter: "sheet-footer",
1069
1077
  sheetCloseButton: "sheet-close-button",
1070
1078
  dialogHeader: "dialog-header",
1071
1079
  dialogBody: "dialog-body",
@@ -120694,7 +120702,8 @@ class EditorPage {
120694
120702
  await expect(dropdownContainer).toBeHidden();
120695
120703
  return moreMenuButtonLocators;
120696
120704
  };
120697
- verifyFontSize = async () => {
120705
+ verifyFontSize = async () => IS_SHADCN_UI ? this.verifyFontSizeV2() : this.verifyFontSizeV1();
120706
+ verifyFontSizeV1 = async () => {
120698
120707
  const fontsAndTexts = [];
120699
120708
  await this.page
120700
120709
  .getByTestId(NEETO_EDITOR_SELECTORS.neetoEditorFixedMenuFontSize)
@@ -120724,6 +120733,36 @@ class EditorPage {
120724
120733
  }
120725
120734
  return fontsAndTexts;
120726
120735
  };
120736
+ verifyFontSizeV2 = async () => {
120737
+ const fontsAndTexts = [];
120738
+ await this.page
120739
+ .getByTestId(NEETO_EDITOR_SELECTORS.neetoEditorFixedMenuFontSize)
120740
+ .click();
120741
+ const dropdownContainer = this.page.getByTestId(COMMON_SELECTORS.dropdownContainer);
120742
+ const headingMenuItems = await dropdownContainer
120743
+ .getByRole("menuitem")
120744
+ .all();
120745
+ const headingLevels = (await Promise.all(headingMenuItems.map(async (menuItem) => {
120746
+ const dataTestid = await menuItem.getAttribute("data-testid");
120747
+ const headingLevel = dataTestid?.split("-").pop();
120748
+ return /^h[1-5]$/.test(headingLevel || "") ? headingLevel : null;
120749
+ }))).filter(Boolean);
120750
+ const fontSizeDropdown = this.editorWrapper.getByTestId(NEETO_EDITOR_SELECTORS.fontSize);
120751
+ await fontSizeDropdown.click();
120752
+ await expect(dropdownContainer).toBeHidden();
120753
+ for (const headingLevel of headingLevels) {
120754
+ const fontKey = headingLevel;
120755
+ const randomText = await this.fillRandomText();
120756
+ await fontSizeDropdown.click();
120757
+ await dropdownContainer.getByTestId(FONT_SIZE_SELECTORS[fontKey]).click();
120758
+ await expect(this.contentField.getByRole("heading", {
120759
+ level: Number(headingLevel?.slice(1)),
120760
+ name: randomText,
120761
+ })).toBeVisible();
120762
+ fontsAndTexts.push({ key: fontKey, value: randomText });
120763
+ }
120764
+ return fontsAndTexts;
120765
+ };
120727
120766
  verifyTextModifiers = async (modifier, isButtonInMoreMenu) => {
120728
120767
  const modifierKey = modifier;
120729
120768
  const textModifierRole = TEXT_MODIFIER_ROLES[modifierKey];
@@ -122012,36 +122051,38 @@ class CustomDomainPage {
122012
122051
  const validateButton = this.page.getByTestId(CUSTOM_DOMAIN_SELECTORS.customDomainValidateButton);
122013
122052
  await Promise.all([
122014
122053
  expect(validateButton).toBeVisible(),
122015
- expect(this.page
122016
- .getByTestId(IS_SHADCN_UI
122017
- ? COMMON_SELECTORS.sheetWrapper
122018
- : COMMON_SELECTORS.paneBody)
122019
- .getByRole("cell", { name: domain.split(".")[0] })).toBeVisible(),
122054
+ expect(this.getValidationPaneBody().getByRole("cell", {
122055
+ name: domain.split(".")[0],
122056
+ })).toBeVisible(),
122020
122057
  ]);
122021
122058
  await this.neetoPlaywrightUtilities.waitForPageLoad();
122022
122059
  await validateButton.click();
122023
- let isCertificateLimitExceeded = false;
122060
+ const subdomain = this.getProductSubdomainFromHostname(domain);
122061
+ const baseURL = baseURLGenerator(this.product, subdomain);
122062
+ let skipReason = null;
122024
122063
  await expect(async () => {
122025
- isCertificateLimitExceeded = await this.isCertificateLimitExceeded();
122026
- if (isCertificateLimitExceeded)
122064
+ skipReason = await this.getCertificateInfrastructureSkipReason();
122065
+ if (skipReason)
122027
122066
  return;
122028
- await this.neetoPlaywrightUtilities.verifyToast({
122029
- message: this.t("neetoCustomDomains.validation.successMessage"),
122030
- });
122031
- }).toPass({ timeout: 2 * 60_000 });
122032
- if (isCertificateLimitExceeded) {
122033
- test.skip(true, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE);
122067
+ expect(await this.getDomainStatus(domain, baseURL)).toBe("active");
122068
+ }).toPass({ timeout: 2 * 60_000, intervals: [5_000] });
122069
+ await this.closeValidationPane();
122070
+ if (skipReason) {
122071
+ test.skip(true, skipReason);
122034
122072
  return;
122035
122073
  }
122036
- await this.neetoPlaywrightUtilities.waitForPageLoad();
122037
122074
  await expect(validateButton).toBeHidden();
122038
122075
  };
122076
+ getProductSubdomainFromHostname = (hostname) => hostname
122077
+ .replace(RegExp(`\\.${CUSTOM_DOMAIN_SUFFIX}$`, "i"), "")
122078
+ .toLowerCase();
122039
122079
  getDomainStatus = async (hostname, baseURL) => {
122040
122080
  const response = await this.customDomainApi
122041
122081
  .fetch(baseURL)
122042
122082
  .then(response => response?.json());
122043
- const domain = response?.custom_domains?.find((domain) => domain.hostname?.toLowerCase() === hostname.toLowerCase());
122044
- return domain?.status;
122083
+ return _findBy({
122084
+ hostname: (value) => value?.toLowerCase() === hostname.toLowerCase(),
122085
+ }, response?.custom_domains)?.status;
122045
122086
  };
122046
122087
  loginToCustomDomain = async () => {
122047
122088
  await this.page.close();
@@ -122169,10 +122210,32 @@ class CustomDomainPage {
122169
122210
  return;
122170
122211
  await Promise.all(customDomains.map(({ hostname }) => this.customDomainApi.delete(hostname)));
122171
122212
  };
122172
- isCertificateLimitExceeded = () => this.page
122173
- .getByTestId(IS_SHADCN_UI ? COMMON_SELECTORS.sheetWrapper : COMMON_SELECTORS.paneBody)
122174
- .getByText(RegExp(CERTIFICATE_LIMIT_EXCEEDED_REGEXP, "i"))
122175
- .isVisible();
122213
+ getValidationPaneBody = () => this.page.getByTestId(IS_SHADCN_UI ? COMMON_SELECTORS.sheetWrapper : COMMON_SELECTORS.paneBody);
122214
+ getValidationPane = () => this.page.getByTestId(IS_SHADCN_UI ? COMMON_SELECTORS.sheetWrapper : COMMON_SELECTORS.pane);
122215
+ getCertificateInfrastructureSkipReason = async () => {
122216
+ const pane = this.getValidationPaneBody();
122217
+ if (await pane
122218
+ .getByText(RegExp(CERTIFICATE_LIMIT_EXCEEDED_REGEXP, "i"))
122219
+ .isVisible()) {
122220
+ return CERTIFICATE_LIMIT_EXCEEDED_MESSAGE;
122221
+ }
122222
+ const message = this.t("neetoCustomDomains.certificateProvisionFailed");
122223
+ const [hasProvisionFailedMessage, hasProvisionFailedFallback] = await Promise.all([
122224
+ pane.getByText(message).isVisible(),
122225
+ pane
122226
+ .getByText(RegExp(CERTIFICATE_PROVISION_FAILED_REGEXP, "i"))
122227
+ .isVisible(),
122228
+ ]);
122229
+ if (hasProvisionFailedMessage || hasProvisionFailedFallback) {
122230
+ return CERTIFICATE_PROVISION_FAILED_MESSAGE;
122231
+ }
122232
+ return null;
122233
+ };
122234
+ closeValidationPane = async () => {
122235
+ const cancelButton = this.getValidationPane().getByTestId(COMMON_SELECTORS.cancelButton);
122236
+ if (await cancelButton.isVisible())
122237
+ await cancelButton.click();
122238
+ };
122176
122239
  }
122177
122240
 
122178
122241
  class IPRestrictionsPage {
@@ -127388,4 +127451,4 @@ class InboundEmailApis {
127388
127451
  };
127389
127452
  }
127390
127453
 
127391
- export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, 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, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_PLAYWRIGHT_RUN, IS_SHADCN_UI, IS_STAGING_ENV, IS_WEBKIT, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, 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, RolesPageV2, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, SmsApi, SmsUtils, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, exampleEmail, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, 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, mailpitDomainName, minutesAgo, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
127454
+ export { ACTIONS, ADMIN_PANEL_SELECTORS, ALL_RESOURCES, ANALYTICS_RESOURCES, API_KEYS_SELECTORS, API_ROUTES, APP_RESOURCES, AUDIT_LOGS_SELECTORS, ApiKeysApi, ApiKeysPage, ApiKeysPageV2, AuditLogsPage, BASE_URL, CALENDAR_LABELS, CERTIFICATE_LIMIT_EXCEEDED_MESSAGE, CERTIFICATE_LIMIT_EXCEEDED_REGEXP, CERTIFICATE_PROVISION_FAILED_MESSAGE, CERTIFICATE_PROVISION_FAILED_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, CustomCommandsV2, CustomDomainApi, CustomDomainPage, DATE_FORMATS, DATE_PICKER_SELECTORS, DATE_RANGES, DATE_TEXTS, DEFAULT_TIMEZONE_ID, 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, HelpAndProfilePageV2, INTEGRATIONS_TEXTS, INTEGRATION_SELECTORS, IPRestrictionsPage, IP_RESTRICTIONS_SELECTORS, IS_CI, IS_DEV_CI, IS_DEV_ENV, IS_MAILPIT_ENABLED, IS_PLAYWRIGHT_RUN, IS_SHADCN_UI, IS_STAGING_ENV, IS_WEBKIT, ImageUploader, InboundEmailApis, IntegrationBase, IpRestrictionsApi, KEYBOARD_SHORTCUTS_SELECTORS, KEYBOARD_SHORTCUT_TEST_CASES, LIST_MODIFIER_SELECTORS, LIST_MODIFIER_TAGS, LOGIN_SELECTORS, MAILPIT_BASE_URL, MAILPIT_DOMAIN_NAME, MEMBER_FORM_SELECTORS, MEMBER_SELECTORS, MEMBER_TEXTS, MERGE_TAGS_SELECTORS, MICROSOFT_LOGIN_SELECTORS, MICROSOFT_LOGIN_TEXTS, MailerUtils, MailpitApi, 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, RolesPageV2, SIGNUP_SELECTORS, SINGULAR, SLACK_DATA_QA_SELECTORS, SLACK_DEFAULT_CHANNEL, SLACK_SELECTORS, SLACK_WEB_TEXTS, STATUS_TEXTS, STORAGE_STATE, SecurityApi, SidebarSection, SlackApi, SlackPage, SmsApi, SmsUtils, 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, TeamMembersV2, ThankYouApi, ThankYouPage, TwilioApi, USER_AGENTS, WEBHOOK_SELECTORS, WebhookSiteApi, WebhooksPage, ZAPIER_LIMIT_EXHAUSTED_MESSAGE, ZAPIER_SELECTORS, ZAPIER_TEST_EMAIL, ZAPIER_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaApi, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, exampleEmail, executeWithThrottledResources, extractSubdomainFromError, filterUtils, fixedMenuSelector, 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, mailpitDomainName, minutesAgo, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, 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.8.4",
3
+ "version": "4.8.6",
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",