@bigbinary/neeto-playwright-commons 4.3.3 → 4.3.5

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 +96 -9
  2. package/index.js +144 -85
  3. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -524,7 +524,7 @@ declare class CustomCommands {
524
524
  }: VerifyTooltipProps) => Promise<void>;
525
525
  /**
526
526
  *
527
- * Method to verify title, content and the help link of help popover by hovering the trigger element.
527
+ * Method to verify title, content and the help link of help popover by hovering the trigger element. Locates the title, content, and link directly via their own testids (rather than inside a shared tooltip container).
528
528
  *
529
529
  * customPageContext (optional): The custom page on which tooltip needs to be verified. Defaults to this.page.
530
530
  *
@@ -576,6 +576,7 @@ declare class CustomCommands {
576
576
  * @endexample
577
577
  */
578
578
  verifyHelpText: (helpURL: string) => Promise<void>;
579
+ private hidePopoverContent;
579
580
  /**
580
581
  *
581
582
  * Method to verify the term in the search term block.
@@ -2537,7 +2538,9 @@ declare class HelpAndProfilePage {
2537
2538
  }: HelpAndProfilePageInitializerProps);
2538
2539
  /**
2539
2540
  *
2540
- * Opens the Help Center and expects the chat button within it to be visible.
2541
+ * Opens the Help Center by clicking the floating action menu button and expects
2542
+ *
2543
+ * the chat button within it to be visible.
2541
2544
  *
2542
2545
  * @example
2543
2546
  *
@@ -2643,9 +2646,9 @@ declare class HelpAndProfilePage {
2643
2646
  private uploadImage;
2644
2647
  /**
2645
2648
  *
2646
- * Updates basic profile info in the profile pane (image, fields, dropdowns,
2649
+ * Updates basic profile info in the profile sheet (image, fields, dropdowns,
2647
2650
  *
2648
- * submit, then waits for the pane to close).
2651
+ * submit, then waits for the sheet to close).
2649
2652
  *
2650
2653
  * contact: First name, last name, and optional phone number. settings:
2651
2654
  *
@@ -2688,7 +2691,7 @@ declare class HelpAndProfilePage {
2688
2691
  openProfile: () => Promise<void>;
2689
2692
  /**
2690
2693
  *
2691
- * Asserts displayed values in the My profile side pane. Use after the pane is open
2694
+ * Asserts displayed values in the My profile sheet. Use after the sheet is open
2692
2695
  *
2693
2696
  * (for example after openProfile).
2694
2697
  *
@@ -4319,6 +4322,10 @@ interface GenerateRandomFileProps {
4319
4322
  fileType: FileType;
4320
4323
  fileName?: string;
4321
4324
  }
4325
+ interface ReadFileAsBrowserFileProps {
4326
+ filePath: string;
4327
+ mimeType: string;
4328
+ }
4322
4329
  /**
4323
4330
  *
4324
4331
  * Used to serialize a File object into a format that can be passed into the browser context using Playwright’s evaluateHandle.
@@ -4384,6 +4391,32 @@ declare const generateRandomFile: ({
4384
4391
  file: File;
4385
4392
  fileName: string;
4386
4393
  };
4394
+ /**
4395
+ *
4396
+ * Used to read a file from disk and build a MIME-correct File object suitable for uploadFileViaDispatchV2, unlike generateRandomFile which fills the file with random bytes.
4397
+ *
4398
+ * filePath: Absolute (or already-resolved) path of the file to read.
4399
+ *
4400
+ * mimeType: MIME type to set on the resulting File object.
4401
+ *
4402
+ * Returns a File object named after filePath's basename.
4403
+ *
4404
+ * @example
4405
+ *
4406
+ * import path from "path";
4407
+ *
4408
+ * import { readFileAsBrowserFile } from "@utils/fileUtils";
4409
+ *
4410
+ * const file = readFileAsBrowserFile({
4411
+ * filePath: path.join(__dirname, "../assets/files/sample.docx"),
4412
+ * mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
4413
+ * });
4414
+ * @endexample
4415
+ */
4416
+ declare const readFileAsBrowserFile: ({
4417
+ filePath,
4418
+ mimeType
4419
+ }: ReadFileAsBrowserFileProps) => File;
4387
4420
  type emailCondition = "Contains" | "Does not contain" | "Is" | "Is not" | "Starts with" | "Does not start with" | "Ends with" | "Does not end with";
4388
4421
  interface EditMemberProps {
4389
4422
  email: string;
@@ -4509,6 +4542,21 @@ declare class TeamMembers {
4509
4542
  * @endexample
4510
4543
  */
4511
4544
  removeMemberViaUI: (parentLocator?: Locator | Page) => Promise<void>;
4545
+ /**
4546
+ *
4547
+ * Opens the filter pane on page.
4548
+ *
4549
+ * page: An instance of the Playwright Page class representing the web page where the filter pane should be opened.
4550
+ *
4551
+ * @example
4552
+ *
4553
+ * import { Page } from "@playwright/test";
4554
+ * import { filterUtils } from "@neetoplaywright";
4555
+ *
4556
+ * await filterUtils.openFilterPane(page);
4557
+ * @endexample
4558
+ */
4559
+ openFilterPane: () => Promise<void>;
4512
4560
  /**
4513
4561
  *
4514
4562
  * Used to filter members by multi select fields such as role, group, teams, etc. The filter pane should be opened and closed before and after filtering. It takes the following parameters:
@@ -4519,7 +4567,7 @@ declare class TeamMembers {
4519
4567
  *
4520
4568
  * @example
4521
4569
  *
4522
- * await filterUtils.openFilterPane(page);
4570
+ * await teamMembers.openFilterPane();
4523
4571
  * await teamMembers.filterMembersByMultiSelect({
4524
4572
  * selectedOptions: ["Admin", "Standard"],
4525
4573
  * selectContainerLocator: NEETO_FILTERS_SELECTORS.roleSelectContainer
@@ -5209,11 +5257,11 @@ interface VerifyAuditLogProps<T extends ActionDataKey> {
5209
5257
  declare class AuditLogsPage {
5210
5258
  private page;
5211
5259
  private neetoPlaywrightUtilities;
5212
- private readonly currentDate;
5260
+ protected currentDate: string;
5213
5261
  messageBuilders: MessageBuilders;
5214
5262
  private admin;
5215
5263
  constructor(page: Page, neetoPlaywrightUtilities: CustomCommands, /** @deprecated Audit log messages no longer include the product name. */
5216
- product?: NeetoProducts);
5264
+ product?: NeetoProducts, timeZone?: string);
5217
5265
  /**
5218
5266
  *
5219
5267
  * Verifies an audit log entry by building the expected message based on the action type and data, then checking that the audit log content matches the expected message and current date.
@@ -6449,6 +6497,18 @@ declare const PHONE_NUMBER_FORMATS: {
6449
6497
  *
6450
6498
  * paneModalCrossIcon: Selector for pane modal cross icons.
6451
6499
  *
6500
+ * sheetHeader: Selector for a shadcn sheet's header.
6501
+ *
6502
+ * sheetBody: Selector for a shadcn sheet's body.
6503
+ *
6504
+ * sheetCloseButton: Selector for a shadcn sheet's close button.
6505
+ *
6506
+ * dialogHeader: Selector for a shadcn dialog's header.
6507
+ *
6508
+ * dialogBody: Selector for a shadcn dialog's body.
6509
+ *
6510
+ * dialogCloseButton: Selector for a shadcn dialog's close button.
6511
+ *
6452
6512
  * inputField: Selector to get NeetoUI input field.
6453
6513
  *
6454
6514
  * alertBox: Selector for alert box.
@@ -6467,6 +6527,8 @@ declare const PHONE_NUMBER_FORMATS: {
6467
6527
  *
6468
6528
  * inputFieldError: Selector for input field errors.
6469
6529
  *
6530
+ * inputError: Selector for a generic input's error message.
6531
+ *
6470
6532
  * selectDropDownError: Selector for select dropdown errors.
6471
6533
  *
6472
6534
  * subTitleHeading: Selector for subtitle headings.
@@ -6507,6 +6569,8 @@ declare const PHONE_NUMBER_FORMATS: {
6507
6569
  *
6508
6570
  * sidebarToggle: Selector for sidebar toggles.
6509
6571
  *
6572
+ * sidebarExpander: Selector for the button that re-expands a collapsed neeto-molecules v2 sidebar.
6573
+ *
6510
6574
  * subheader: Selector for subheaders.
6511
6575
  *
6512
6576
  * settingsLink: Selector for settings links.
@@ -6577,6 +6641,8 @@ declare const PHONE_NUMBER_FORMATS: {
6577
6641
  *
6578
6642
  * helpPopoverButton: Selector for help popover button,
6579
6643
  *
6644
+ * helpPopoverTitle: Selector for help popover title,
6645
+ *
6580
6646
  * helpPopoverDesc: Selector for help popover description,
6581
6647
  *
6582
6648
  * helpPopoverLinkButton: Selector for help popover link button,
@@ -6635,6 +6701,12 @@ declare const PHONE_NUMBER_FORMATS: {
6635
6701
  *
6636
6702
  * customMenuItem: Selector for a custom menu item.
6637
6703
  *
6704
+ * badgeContainer: Selector for a shadcn badge container.
6705
+ *
6706
+ * badgeCloseButton: Selector for a shadcn badge's dismiss button.
6707
+ *
6708
+ * hotkeyDescription: Selector for a keyboard shortcut's description.
6709
+ *
6638
6710
  */
6639
6711
  declare const COMMON_SELECTORS: {
6640
6712
  emailInputError: string;
@@ -6669,6 +6741,12 @@ declare const COMMON_SELECTORS: {
6669
6741
  toastContainer: string;
6670
6742
  toastBody: string;
6671
6743
  paneModalCrossIcon: string;
6744
+ sheetHeader: string;
6745
+ sheetBody: string;
6746
+ sheetCloseButton: string;
6747
+ dialogHeader: string;
6748
+ dialogBody: string;
6749
+ dialogCloseButton: string;
6672
6750
  inputField: string;
6673
6751
  alertBox: string;
6674
6752
  tableContainer: string;
@@ -6678,6 +6756,7 @@ declare const COMMON_SELECTORS: {
6678
6756
  saveChangesButton: string;
6679
6757
  cancelButton: string;
6680
6758
  inputFieldError: string;
6759
+ inputError: string;
6681
6760
  selectDropDownError: string;
6682
6761
  subTitleHeading: string;
6683
6762
  noDataTitle: string;
@@ -6699,6 +6778,7 @@ declare const COMMON_SELECTORS: {
6699
6778
  selectContainer: string;
6700
6779
  dropdownMenu: string;
6701
6780
  sidebarToggle: string;
6781
+ sidebarExpander: string;
6702
6782
  subheader: string;
6703
6783
  settingsLink: string;
6704
6784
  ticketFieldTextInput: (label: string) => string;
@@ -6733,6 +6813,8 @@ declare const COMMON_SELECTORS: {
6733
6813
  navigationHeader: string;
6734
6814
  buttonSpinner: string;
6735
6815
  pendingTagContainer: string;
6816
+ badgeContainer: string;
6817
+ badgeCloseButton: string;
6736
6818
  nextYearButton: string;
6737
6819
  popoverTitle: string;
6738
6820
  productSwitcherSearchInput: string;
@@ -6740,6 +6822,7 @@ declare const COMMON_SELECTORS: {
6740
6822
  helpPopoverButton: string;
6741
6823
  helpPopoverDesc: string;
6742
6824
  helpPopoverLinkButton: string;
6825
+ helpPopoverTitle: string;
6743
6826
  copyToClipboardButton: string;
6744
6827
  subheaderRight: string;
6745
6828
  secretKeyInputField: string;
@@ -6774,6 +6857,7 @@ declare const COMMON_SELECTORS: {
6774
6857
  switchLabel: string;
6775
6858
  antdSliderRail: string;
6776
6859
  card: string;
6860
+ hotkeyDescription: string;
6777
6861
  columnVisibilityBtn: (action: "hide-all" | "reset") => string;
6778
6862
  customSwitch: (switchLabel: string) => string;
6779
6863
  customMenuItem: (label: string) => string;
@@ -7438,6 +7522,8 @@ declare const MEMBER_FORM_SELECTORS: {
7438
7522
  *
7439
7523
  * profilePopup: Selector for the profile popup.
7440
7524
  *
7525
+ * profileMoreDropdownButton: Selector for the "more actions" dropdown trigger in the profile sheet.
7526
+ *
7441
7527
  * myProfileButton: Selector for the "My Profile" button.
7442
7528
  *
7443
7529
  * profileOrganizationSettingsButton: Selector for the profile organization settings button.
@@ -7459,6 +7545,7 @@ declare const PROFILE_SECTION_SELECTORS: {
7459
7545
  profileSectionButton: string;
7460
7546
  profilePopup: string;
7461
7547
  profileExpandMenuBtn: string;
7548
+ profileMoreDropdownButton: string;
7462
7549
  myProfileButton: string;
7463
7550
  updateEmailMenuBtn: string;
7464
7551
  workspaceDisplay: string;
@@ -9527,5 +9614,5 @@ declare class InboundEmailApis {
9527
9614
  reply: (emailParams: ReplyInboundEmailParams) => Promise<playwright_core.APIResponse | undefined>;
9528
9615
  private deliverSource;
9529
9616
  }
9530
- 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_MAILPIT_ENABLED, IS_STAGING_ENV, 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, 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_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, 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, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
9617
+ 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_MAILPIT_ENABLED, IS_STAGING_ENV, 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, 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_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, 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, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileAsBrowserFile, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, _default as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
9531
9618
  export type { BaseThemeStyle, BaseThemeStyleType, ColumnMenuAction, CountryProps, CustomFixture, EmailDeliveryConnectParams, EmailDeliveryProvider, EmailDeliveryVerifiedEmail, EmailDeliveryVerifyEmailParams, EmailDeliveryVerifyEmailResponse, EmailMatchCriteria, InboundEmailParams, IntroPageThemeStyle, IntroPageThemeStyleType, OAuthEmailDeliveryProvider, ProjectName, ReplyInboundEmailParams, ThemeCategory, ValueOf };
package/index.js CHANGED
@@ -1007,6 +1007,12 @@ const COMMON_SELECTORS = {
1007
1007
  toastContainer: ".Toastify__toast-container",
1008
1008
  toastBody: ".Toastify__toast-body",
1009
1009
  paneModalCrossIcon: "pane-close-button",
1010
+ sheetHeader: "sheet-header",
1011
+ sheetBody: "sheet-body",
1012
+ sheetCloseButton: "sheet-close-button",
1013
+ dialogHeader: "dialog-header",
1014
+ dialogBody: "dialog-body",
1015
+ dialogCloseButton: "dialog-close-button",
1010
1016
  inputField: "nui-input-field",
1011
1017
  alertBox: "alert-box",
1012
1018
  tableContainer: "table-container",
@@ -1016,11 +1022,12 @@ const COMMON_SELECTORS = {
1016
1022
  saveChangesButton: "save-changes-button",
1017
1023
  cancelButton: "cancel-button",
1018
1024
  inputFieldError: "nui-input-error",
1025
+ inputError: "input-error",
1019
1026
  selectDropDownError: "nui-select-error",
1020
1027
  subTitleHeading: "menubar-subtitle-heading",
1021
- noDataTitle: "no-data-title",
1022
- noDataDescription: "no-data-description",
1023
- noDataHelpText: "no-data-help-text",
1028
+ noDataTitle: "empty-state-title",
1029
+ noDataDescription: "empty-state-description",
1030
+ noDataHelpText: "empty-state-help-text",
1024
1031
  backdrop: "neeto-backdrop",
1025
1032
  menuBarHeading: "menubar-heading",
1026
1033
  dropdownWrapper: "nui-select-container-wrapper",
@@ -1030,13 +1037,14 @@ const COMMON_SELECTORS = {
1030
1037
  tabItem: "tab-item",
1031
1038
  labelInputError: "label-input-error",
1032
1039
  urlInputError: "url-input-error",
1033
- noDataPrimaryButton: "no-data-primary-button",
1040
+ noDataPrimaryButton: "empty-state-primary-button",
1034
1041
  modalHeader: "modal-header",
1035
1042
  avatar: "nui-avatar",
1036
1043
  nameInputError: "name-input-error",
1037
1044
  selectContainer: "nui-select-container",
1038
1045
  dropdownMenu: "nui-select-menu",
1039
1046
  sidebarToggle: "neeto-molecules-sidebar-toggler",
1047
+ sidebarExpander: "neeto-molecules-sidebar-expander",
1040
1048
  subheader: "subheader",
1041
1049
  settingsLink: "Settings",
1042
1050
  ticketFieldTextInput: (label) => `${hyphenate(label)}-text-input`,
@@ -1071,6 +1079,8 @@ const COMMON_SELECTORS = {
1071
1079
  navigationHeader: "navigation-header",
1072
1080
  buttonSpinner: ".neeto-ui-btn__spinner",
1073
1081
  pendingTagContainer: "pending-tag-container",
1082
+ badgeContainer: "badge-container",
1083
+ badgeCloseButton: "badge-close-button",
1074
1084
  nextYearButton: "next-year-button",
1075
1085
  popoverTitle: "popover-title",
1076
1086
  productSwitcherSearchInput: "product-switcher-search-input",
@@ -1078,6 +1088,7 @@ const COMMON_SELECTORS = {
1078
1088
  helpPopoverButton: "help-popover-button",
1079
1089
  helpPopoverDesc: "help-popover-description",
1080
1090
  helpPopoverLinkButton: "help-popover-link-button",
1091
+ helpPopoverTitle: "help-popover-title",
1081
1092
  copyToClipboardButton: "copy-to-clipboard-button",
1082
1093
  subheaderRight: "subheader-right",
1083
1094
  secretKeyInputField: "secret-key-input-field",
@@ -1112,6 +1123,7 @@ const COMMON_SELECTORS = {
1112
1123
  switchLabel: "nui-switch-item",
1113
1124
  antdSliderRail: ".ant-slider-rail",
1114
1125
  card: "neeto-molecules-card",
1126
+ hotkeyDescription: "hotkey-description",
1115
1127
  columnVisibilityBtn: (action) => `column-visibility-${action}-button`,
1116
1128
  customSwitch: (switchLabel) => `${hyphenate(switchLabel)}-switch`,
1117
1129
  customMenuItem: (label) => `${hyphenate(label)}-menu-item`,
@@ -1644,6 +1656,7 @@ const PROFILE_SECTION_SELECTORS = {
1644
1656
  profileSectionButton: "profile-section",
1645
1657
  profilePopup: "profile-popup",
1646
1658
  profileExpandMenuBtn: "profile-expand-menu-button",
1659
+ profileMoreDropdownButton: "profile-more-dropdown-button",
1647
1660
  myProfileButton: "profile-my-profile-button",
1648
1661
  updateEmailMenuBtn: "update-email-menu-button",
1649
1662
  workspaceDisplay: "workspace-display",
@@ -2056,6 +2069,10 @@ const generateRandomFile = ({ sizeInKB, fileType, fileName = `sample.${fileType}
2056
2069
  const file = new File([blob], fileName, { type: mimeType });
2057
2070
  return { file, fileName };
2058
2071
  };
2072
+ const readFileAsBrowserFile = ({ filePath, mimeType, }) => {
2073
+ const buffer = new Uint8Array(readFileSync(filePath));
2074
+ return new File([buffer], path__default.basename(filePath), { type: mimeType });
2075
+ };
2059
2076
 
2060
2077
  const __dirname$6 = getDirname(import.meta.url);
2061
2078
  const getImagePathAndName = (localImagePath) => {
@@ -2228,7 +2245,7 @@ class CustomCommands {
2228
2245
  retryTimeout: 20_000,
2229
2246
  }, options);
2230
2247
  const menu = page.getByTestId(COMMON_SELECTORS.customDropDownMenu(label));
2231
- const container = page.getByTestId(COMMON_SELECTORS.customSelectValueContainer(label));
2248
+ const container = page.getByTestId(COMMON_SELECTORS.customSelectContainer(label));
2232
2249
  await expect(async () => {
2233
2250
  await container.click();
2234
2251
  await expect(menu).toBeVisible({
@@ -2294,17 +2311,26 @@ class CustomCommands {
2294
2311
  await this.hideTooltip(triggerElement, customPageContext);
2295
2312
  };
2296
2313
  verifyHelpPopover = async ({ triggerElement = this.page.getByTestId(COMMON_SELECTORS.helpPopoverButton), title, content, helpURL, customPageContext = this.page, }) => {
2297
- const tooltipBox = customPageContext.getByTestId(COMMON_SELECTORS.tooltip);
2298
2314
  await triggerElement.hover();
2299
- title &&
2300
- (await expect(tooltipBox.getByRole("heading", { name: title })).toBeVisible());
2301
- content && (await expect(tooltipBox).toContainText(content));
2315
+ const getPopoverContentLocator = () => {
2316
+ if (title) {
2317
+ return customPageContext.getByTestId(COMMON_SELECTORS.helpPopoverTitle);
2318
+ }
2319
+ if (content) {
2320
+ return customPageContext.getByTestId(COMMON_SELECTORS.helpPopoverDesc);
2321
+ }
2322
+ return customPageContext.getByTestId(COMMON_SELECTORS.helpPopoverLinkButton);
2323
+ };
2324
+ const popoverContentLocator = getPopoverContentLocator();
2325
+ title && (await expect(popoverContentLocator).toHaveText(title));
2326
+ content &&
2327
+ (await expect(customPageContext.getByTestId(COMMON_SELECTORS.helpPopoverDesc)).toContainText(content));
2302
2328
  helpURL &&
2303
2329
  (await Promise.all([
2304
2330
  this.assertHelpURLIsValid(helpURL),
2305
- expect(tooltipBox.getByTestId(COMMON_SELECTORS.helpPopoverLinkButton)).toHaveAttribute("href", new RegExp(helpURL, "i")),
2331
+ expect(customPageContext.getByTestId(COMMON_SELECTORS.helpPopoverLinkButton)).toHaveAttribute("href", new RegExp(helpURL, "i")),
2306
2332
  ]));
2307
- await this.hideTooltip(triggerElement, customPageContext);
2333
+ await this.hidePopoverContent(triggerElement, popoverContentLocator, customPageContext);
2308
2334
  };
2309
2335
  assertHelpURLIsValid = async (helpURL) => {
2310
2336
  const response = await this.request.get(helpURL);
@@ -2316,11 +2342,39 @@ class CustomCommands {
2316
2342
  .isHidden();
2317
2343
  if (isNoDataTitleHidden)
2318
2344
  return;
2345
+ const helpLink = this.page
2346
+ .getByTestId(COMMON_SELECTORS.noDataHelpText)
2347
+ .getByRole("link")
2348
+ .or(this.page
2349
+ .getByTestId(COMMON_SELECTORS.noDataDescription)
2350
+ .getByRole("link"));
2319
2351
  await Promise.all([
2320
2352
  this.assertHelpURLIsValid(helpURL),
2321
- expect(this.page.getByTestId(COMMON_SELECTORS.noDataHelpText).getByRole("link")).toHaveAttribute("href", new RegExp(helpURL, "i")),
2353
+ expect(helpLink).toHaveAttribute("href", new RegExp(helpURL, "i")),
2322
2354
  ]);
2323
2355
  };
2356
+ hidePopoverContent = async (triggerElement, contentLocator, customPageContext = this.page) => {
2357
+ const boundingBox = await triggerElement.boundingBox();
2358
+ if (!boundingBox) {
2359
+ throw new Error("Trigger element bounding box not found");
2360
+ }
2361
+ const { x, y, width, height } = boundingBox;
2362
+ const moves = [
2363
+ [x + width + 10, y],
2364
+ [x, y + height + 10],
2365
+ [x - 10, y],
2366
+ [x, y - 10],
2367
+ ];
2368
+ await expect(async () => {
2369
+ for (const [moveX, moveY] of moves) {
2370
+ await customPageContext.mouse.move(moveX, moveY);
2371
+ const isHidden = await contentLocator.isHidden();
2372
+ if (isHidden)
2373
+ break;
2374
+ }
2375
+ await expect(contentLocator).toBeHidden();
2376
+ }).toPass({ timeout: 30_000 });
2377
+ };
2324
2378
  verifySearchTermBlock = async (searchTerm) => {
2325
2379
  const filtersSearchTermBlock = this.page.getByTestId(NEETO_FILTERS_SELECTORS.filtersTermBlock());
2326
2380
  if (searchTerm) {
@@ -2384,7 +2438,7 @@ class CustomCommands {
2384
2438
  await Promise.all([
2385
2439
  expect(header).toContainText(titles),
2386
2440
  expect(header).toHaveCount(titlesAndRoutes.length),
2387
- expect(header.getByRole("link", { name: last?.title, exact: true })).toHaveCount(0),
2441
+ expect(header.getByRole("link", { name: last?.title, exact: true })).toHaveAttribute("aria-disabled", "true"),
2388
2442
  ...links.map(({ title, route }) => expect(header.getByRole("link", { name: title, exact: true })).toHaveAttribute("href", route)),
2389
2443
  ]);
2390
2444
  };
@@ -118761,7 +118815,7 @@ class HelpAndProfilePage {
118761
118815
  const floatingActionMenuBtn = this.page.getByTestId(COMMON_SELECTORS.floatingActionMenuButton);
118762
118816
  await expect(async () => {
118763
118817
  await floatingActionMenuBtn.scrollIntoViewIfNeeded();
118764
- await floatingActionMenuBtn.hover();
118818
+ await floatingActionMenuBtn.click();
118765
118819
  await expect(this.helpMenuBtn).toBeVisible();
118766
118820
  }).toPass({ timeout: 60_000 });
118767
118821
  };
@@ -118863,7 +118917,7 @@ class HelpAndProfilePage {
118863
118917
  await this.page.keyboard.press(openKeyboardShortcut);
118864
118918
  await expect(keyboardShortcutsPane).not.toHaveCSS("width", "1px");
118865
118919
  await Promise.all([
118866
- expect(keyItem.locator("p")).toHaveText(shortcuts.map(shortcut => shortcut.description)),
118920
+ expect(keyItem.getByTestId(COMMON_SELECTORS.hotkeyDescription)).toHaveText(shortcuts.map(shortcut => shortcut.description)),
118867
118921
  expect(keyItem.locator("div")).toHaveText(formattedSequences),
118868
118922
  ]);
118869
118923
  });
@@ -118911,13 +118965,9 @@ class HelpAndProfilePage {
118911
118965
  };
118912
118966
  openAuthLinkAndVerify = async ({ linkTestId, redirectLink, }) => {
118913
118967
  await this.page
118914
- .getByTestId(COMMON_SELECTORS.pane)
118915
- .getByTestId(COMMON_SELECTORS.dropdownIcon)
118916
- .click();
118917
- await this.page
118918
- .getByTestId(COMMON_SELECTORS.dropdownContainer)
118919
- .getByTestId(linkTestId)
118968
+ .getByTestId(PROFILE_SECTION_SELECTORS.profileMoreDropdownButton)
118920
118969
  .click();
118970
+ await this.page.getByTestId(linkTestId).click();
118921
118971
  await expect(this.page).toHaveURL(new RegExp(NEETO_AUTH_BASE_URL(readFileSyncIfExists()?.user?.subdomainName)));
118922
118972
  await expect(this.page).toHaveURL(new RegExp(redirectLink));
118923
118973
  await this.page.goBack();
@@ -118965,8 +119015,7 @@ class HelpAndProfilePage {
118965
119015
  return;
118966
119016
  }
118967
119017
  await this.page
118968
- .getByTestId(COMMON_SELECTORS.paneBody)
118969
- .getByTestId(COMMON_SELECTORS.dropdownIcon)
119018
+ .getByTestId(PROFILE_SECTION_SELECTORS.profileMoreDropdownButton)
118970
119019
  .click();
118971
119020
  await this.page
118972
119021
  .getByTestId(PROFILE_SECTION_SELECTORS.imageUploadBtn)
@@ -118980,7 +119029,7 @@ class HelpAndProfilePage {
118980
119029
  };
118981
119030
  updateBasicInfo = async ({ contact, settings, imageName, }) => {
118982
119031
  await expect(this.page
118983
- .getByTestId(COMMON_SELECTORS.pane)
119032
+ .getByTestId(COMMON_SELECTORS.sheetBody)
118984
119033
  .getByTestId(COMMON_SELECTORS.uiSpinner)).toBeHidden();
118985
119034
  await this.uploadImage(imageName);
118986
119035
  await this.fillTextFields(contact);
@@ -118990,7 +119039,7 @@ class HelpAndProfilePage {
118990
119039
  .or(this.page.getByTestId(PROFILE_SECTION_SELECTORS.profileSubmitBtn))
118991
119040
  .click();
118992
119041
  await this.neetoPlaywrightUtilities.waitForPageLoad();
118993
- await expect(this.page.getByTestId(COMMON_SELECTORS.paneModalCrossIcon)).toBeHidden();
119042
+ await expect(this.page.getByTestId(COMMON_SELECTORS.sheetCloseButton)).toBeHidden();
118994
119043
  };
118995
119044
  openProfile = async () => {
118996
119045
  await this.openHelpCenter();
@@ -119000,7 +119049,7 @@ class HelpAndProfilePage {
119000
119049
  await this.page
119001
119050
  .getByTestId(PROFILE_SECTION_SELECTORS.myProfileButton)
119002
119051
  .click();
119003
- await expect(this.page.getByTestId(COMMON_SELECTORS.paneHeader)).toContainText(this.t("neetoTeamMembers.profile.common.myProfile"));
119052
+ await expect(this.page.getByTestId(COMMON_SELECTORS.sheetHeader)).toContainText(this.t("neetoTeamMembers.profile.common.myProfile"));
119004
119053
  };
119005
119054
  verifyProfileSidePane = async ({ contact, settings }) => {
119006
119055
  const timeZone = settings?.timeZone;
@@ -119048,8 +119097,7 @@ class HelpAndProfilePage {
119048
119097
  await test$1.step("3: Verify basic info", async () => {
119049
119098
  await this.openProfile();
119050
119099
  await this.page
119051
- .getByTestId(COMMON_SELECTORS.pane)
119052
- .getByTestId(COMMON_SELECTORS.dropdownIcon)
119100
+ .getByTestId(PROFILE_SECTION_SELECTORS.profileMoreDropdownButton)
119053
119101
  .click();
119054
119102
  await this.page
119055
119103
  .getByTestId(PROFILE_SECTION_SELECTORS.editBasicInfoMenuBtn)
@@ -120854,7 +120902,7 @@ const openFilterPane = async (page) => {
120854
120902
  .getByTestId(NEETO_FILTERS_SELECTORS.filterButton)
120855
120903
  .or(page.getByTestId(COMMON_SELECTORS.filterButon))
120856
120904
  .click();
120857
- await expect(page.getByTestId(COMMON_SELECTORS.paneHeader)).toHaveText(getI18nInstance().t("neetoFilters.common.filters"));
120905
+ await expect(page.getByTestId(NEETO_FILTERS_SELECTORS.filterPaneHeading)).toHaveText(getI18nInstance().t("neetoFilters.common.filters"));
120858
120906
  };
120859
120907
  const clearFiltersFromActionBlock = async (page) => {
120860
120908
  const isClearButtonVisible = await page
@@ -120900,12 +120948,13 @@ class TeamMembers {
120900
120948
  };
120901
120949
  fillMemberForm = async (emails, role) => {
120902
120950
  await this.page
120903
- .getByTestId(MEMBER_FORM_SELECTORS.emailTextField)
120951
+ .getByTestId(COMMON_SELECTORS.emailInputWrapper)
120952
+ .getByRole("textbox")
120904
120953
  .fill(emails.join(", "));
120905
120954
  await this.page.keyboard.press("Enter");
120906
120955
  role &&
120907
120956
  (await this.neetoPlaywrightUtilities.toggleElement({
120908
- locator: this.page.getByTestId(MEMBER_SELECTORS.roleLabel(role)),
120957
+ locator: this.page.getByRole("radio", { name: role, exact: true }),
120909
120958
  }));
120910
120959
  const continueBtn = this.page.getByTestId(MEMBER_SELECTORS.continueButton);
120911
120960
  await continueBtn.click();
@@ -120924,7 +120973,7 @@ class TeamMembers {
120924
120973
  await this.neetoPlaywrightUtilities.waitForPageLoad();
120925
120974
  };
120926
120975
  submit = async () => {
120927
- const pane = this.page.getByTestId(COMMON_SELECTORS.paneBody);
120976
+ const pane = this.page.getByRole("dialog");
120928
120977
  const submitBtn = this.page.getByTestId(MEMBER_SELECTORS.submitButton);
120929
120978
  const buttonSpinner = submitBtn.getByTestId(COMMON_SELECTORS.uiSpinner);
120930
120979
  await expect(submitBtn).toBeVisible({ timeout: 10_000 });
@@ -120947,9 +120996,12 @@ class TeamMembers {
120947
120996
  await expect(this.page.getByRole("cell", { name: email, exact: true })).toBeVisible();
120948
120997
  };
120949
120998
  editMemberViaUI = async ({ email = "", firstName = "", lastName = "", role = "standard", } = {}) => {
120999
+ await expect(this.page.getByTestId(MEMBER_SELECTORS.dropDownIcon)).toHaveCount(1);
120950
121000
  await this.page.getByTestId(MEMBER_SELECTORS.dropDownIcon).click();
120951
121001
  await this.page.getByTestId(MEMBER_SELECTORS.editButton).click();
120952
- await this.neetoPlaywrightUtilities.waitForPaneToLoad();
121002
+ const editPane = this.page.getByRole("dialog");
121003
+ await expect(editPane).toBeVisible({ timeout: 35_000 });
121004
+ await expect(editPane.getByTestId(COMMON_SELECTORS.uiSpinner)).toHaveCount(0, { timeout: 35_000 });
120953
121005
  await expect(this.page
120954
121006
  .getByTestId(MEMBER_SELECTORS.submitButton)
120955
121007
  .getByTestId(COMMON_SELECTORS.uiSpinner)).toHaveCount(0, { timeout: 35_000 });
@@ -120966,7 +121018,7 @@ class TeamMembers {
120966
121018
  .getByTestId(MEMBER_FORM_SELECTORS.lastNameTextField)
120967
121019
  .fill(lastName));
120968
121020
  await this.neetoPlaywrightUtilities.toggleElement({
120969
- locator: this.page.getByTestId(MEMBER_SELECTORS.roleLabel(role)),
121021
+ locator: this.page.getByRole("radio", { name: role, exact: true }),
120970
121022
  });
120971
121023
  await this.submit();
120972
121024
  await this.neetoPlaywrightUtilities.waitForPageLoad();
@@ -120980,14 +121032,21 @@ class TeamMembers {
120980
121032
  await this.neetoPlaywrightUtilities.verifyToast();
120981
121033
  await this.neetoPlaywrightUtilities.waitForPageLoad();
120982
121034
  };
121035
+ openFilterPane = async () => {
121036
+ await this.page
121037
+ .getByTestId(NEETO_FILTERS_SELECTORS.filterButton)
121038
+ .or(this.page.getByTestId(COMMON_SELECTORS.filterButon))
121039
+ .click();
121040
+ await expect(this.page.getByTestId(NEETO_FILTERS_SELECTORS.filterPaneHeading)).toHaveText(this.t("neetoFilters.common.filters"));
121041
+ };
120983
121042
  filterMembersByMultiSelect = async ({ selectedOptions = [], selectContainerLocator = NEETO_FILTERS_SELECTORS.roleSelectContainer, }) => {
120984
121043
  await this.page
120985
121044
  .getByTestId(selectContainerLocator)
120986
- .getByTestId(COMMON_SELECTORS.actionSelectIndicator)
120987
- .click();
121045
+ .getByRole("combobox")
121046
+ .click({ timeout: 30_000 });
120988
121047
  for (const option of selectedOptions) {
120989
121048
  await this.page
120990
- .getByTestId(COMMON_SELECTORS.selectOption(option))
121049
+ .getByRole("option", { name: option, exact: true })
120991
121050
  .click();
120992
121051
  }
120993
121052
  await this.neetoPlaywrightUtilities.waitForPageLoad();
@@ -120995,14 +121054,14 @@ class TeamMembers {
120995
121054
  };
120996
121055
  filterMembers = async ({ email = { id: "", condition: "Is" }, roles = [], name = "", }) => {
120997
121056
  await filterUtils.clearFiltersFromActionBlock(this.page);
120998
- await filterUtils.openFilterPane(this.page);
121057
+ await this.openFilterPane();
120999
121058
  if (isPresent(email.id)) {
121000
121059
  await this.page
121001
121060
  .getByTestId(NEETO_FILTERS_SELECTORS.emailSelectContainer)
121002
- .getByTestId(COMMON_SELECTORS.actionSelectIndicator)
121061
+ .getByRole("combobox")
121003
121062
  .click();
121004
121063
  await this.page
121005
- .getByTestId(COMMON_SELECTORS.selectOption(email.condition))
121064
+ .getByRole("option", { name: email.condition, exact: true })
121006
121065
  .click();
121007
121066
  await this.page
121008
121067
  .getByTestId(NEETO_FILTERS_SELECTORS.filtersEmailFilter)
@@ -121135,39 +121194,38 @@ class ApiKeysPage {
121135
121194
  this.t = getI18nInstance().t;
121136
121195
  }
121137
121196
  enableExpiryDate = async (expiryDate) => {
121138
- const userProps = await getGlobalUserProps(this.page);
121139
- const normalizedDate = dayjs(expiryDate, DATE_FORMATS.date);
121140
- const formattedExpiryDate = normalizedDate.format(userProps?.dateFormat);
121141
- const expiryDateInput = this.page
121142
- .getByTestId(COMMON_SELECTORS.paneBody)
121143
- .getByTestId(ADMIN_PANEL_SELECTORS.expiryDateInput);
121144
- const nextYearBtn = this.page.getByLabel(DATE_TEXTS.nextYear, {
121145
- exact: true,
121197
+ const dialog = this.page.getByRole("dialog");
121198
+ const neverExpiresCheckbox = dialog.getByRole("checkbox", {
121199
+ name: this.t("neetoApiKeys.fields.neverExpire"),
121146
121200
  });
121147
- await this.page
121148
- .getByTestId(COMMON_SELECTORS.checkboxInput("never-expires"))
121149
- .uncheck();
121150
- await expiryDateInput.click();
121151
- await expect(nextYearBtn).toBeVisible();
121152
- await expiryDateInput.pressSequentially(formattedExpiryDate, {
121153
- delay: 250,
121201
+ await expect(async () => {
121202
+ await neverExpiresCheckbox.uncheck();
121203
+ await expect(neverExpiresCheckbox).not.toBeChecked();
121204
+ }).toPass({ timeout: 10_000 });
121205
+ const userProps = await getGlobalUserProps(this.page);
121206
+ const formattedExpiryDate = dayjs(expiryDate, DATE_FORMATS.date).format(userProps?.dateFormat);
121207
+ const expiryDateInput = dialog.getByRole("textbox", {
121208
+ name: this.t("neetoApiKeys.fields.expiryDate"),
121154
121209
  });
121155
- await Promise.all([
121156
- expect(expiryDateInput).toHaveValue(formattedExpiryDate),
121157
- expect(this.page.getByRole("button", { name: CALENDAR_LABELS.month })).toHaveText(normalizedDate.format(DATE_FORMATS.month)),
121158
- expect(this.page.getByRole("button", { name: CALENDAR_LABELS.year })).toHaveText(normalizedDate.format(DATE_FORMATS.year)),
121159
- expect(this.page.getByTitle(normalizedDate.format(DATE_FORMATS.calendarDate))).toHaveClass(RegExp(DATE_PICKER_SELECTORS.selectedDateInCalendarClass)),
121160
- ]);
121161
- await this.page.keyboard.press("Enter");
121162
- await expect(nextYearBtn).toBeHidden({ timeout: 15_000 });
121210
+ await expect(async () => {
121211
+ await expiryDateInput.fill(formattedExpiryDate);
121212
+ await expect(expiryDateInput).toHaveValue(formattedExpiryDate);
121213
+ }).toPass({ timeout: 10_000 });
121163
121214
  };
121164
121215
  fillApiKeyDetails = async ({ label, expiryDate }) => {
121216
+ const dialog = this.page.getByRole("dialog");
121165
121217
  await this.page
121166
121218
  .getByTestId(COMMON_SELECTORS.paneBody)
121167
121219
  .getByTestId(COMMON_SELECTORS.customInputField("name"))
121168
121220
  .fill(label);
121169
121221
  isPresent(expiryDate) && (await this.enableExpiryDate(expiryDate));
121170
- await this.neetoPlaywrightUtilities.saveChanges({ isPane: true });
121222
+ const saveChangesButton = this.page.getByTestId(COMMON_SELECTORS.saveChangesButton);
121223
+ await expect(saveChangesButton).toBeEnabled({ timeout: 10_000 });
121224
+ await saveChangesButton.click();
121225
+ await Promise.all([
121226
+ expect(dialog).toBeHidden(),
121227
+ this.neetoPlaywrightUtilities.verifyToast(),
121228
+ ]);
121171
121229
  };
121172
121230
  verifyApiKey = ({ targetRow, label, date }) => Promise.all([
121173
121231
  expect(targetRow.getByRole("cell", { name: label })).toBeVisible(),
@@ -121175,11 +121233,11 @@ class ApiKeysPage {
121175
121233
  expect(targetRow.getByRole("cell", {
121176
121234
  name: this.t("neetoApiKeys.common.never"),
121177
121235
  })).toBeVisible(),
121178
- expect(targetRow.getByTestId(TAGS_SELECTORS.tagContainer)).toHaveText(this.t("neetoApiKeys.tags.active")),
121236
+ expect(targetRow.getByTestId(COMMON_SELECTORS.badgeContainer)).toHaveText(this.t("neetoApiKeys.tags.active")),
121179
121237
  ]);
121180
121238
  editApiKey = async ({ label, expiryDate }) => {
121181
121239
  await this.page
121182
- .getByTestId(COMMON_SELECTORS.dropdownContainer)
121240
+ .getByRole("menu")
121183
121241
  .getByTestId(API_KEYS_SELECTORS.editApiKeyButton)
121184
121242
  .click();
121185
121243
  await this.fillApiKeyDetails({ label, expiryDate });
@@ -121187,7 +121245,7 @@ class ApiKeysPage {
121187
121245
  deleteApiKey = async (targetRow) => {
121188
121246
  await targetRow.getByTestId(COMMON_SELECTORS.dropdownIcon).click();
121189
121247
  await this.page
121190
- .getByTestId(COMMON_SELECTORS.dropdownContainer)
121248
+ .getByRole("menu")
121191
121249
  .getByTestId(API_KEYS_SELECTORS.deleteApiKeyButton)
121192
121250
  .click();
121193
121251
  await this.page
@@ -121222,11 +121280,10 @@ class AuditLogsPage {
121222
121280
  admin;
121223
121281
  constructor(page, neetoPlaywrightUtilities,
121224
121282
  /** @deprecated Audit log messages no longer include the product name. */
121225
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
121226
- product) {
121283
+ product, timeZone = "Asia/Kolkata") {
121227
121284
  this.page = page;
121228
121285
  this.neetoPlaywrightUtilities = neetoPlaywrightUtilities;
121229
- this.currentDate = dayjs().tz("Asia/Kolkata").format("MMM D, YYYY");
121286
+ this.currentDate = dayjs().tz(timeZone).format("MMM D, YYYY");
121230
121287
  this.messageBuilders = {
121231
121288
  [ACTIONS.inviteUsers]: (data) => `${this.admin} added ${data.emails.join(", ").toLowerCase()}.`,
121232
121289
  [ACTIONS.updatedUser]: (data) => `${this.admin} changed ${data.emails[0].toLowerCase()}'s email from ${data.emails[0].toLowerCase()} to ${data.emails[1].toLowerCase()}.`,
@@ -121599,12 +121656,12 @@ class RolesPage {
121599
121656
  : this.page;
121600
121657
  parentPermission &&
121601
121658
  (await parentPermissionSelector
121602
- .getByTestId(COMMON_SELECTORS.customCheckboxLabel(parentPermission))
121603
- .click({ force: true }));
121659
+ .getByLabel(parentPermission, { exact: true })
121660
+ .click());
121604
121661
  for (const permission of permissions) {
121605
121662
  await parentPermissionSelector
121606
- .getByTestId(COMMON_SELECTORS.customCheckboxLabel(permission))
121607
- .click({ force: true }); // Used force: true because disabling the parent permission disables the child permissions means the checkboxes label become disable
121663
+ .getByLabel(permission, { exact: true })
121664
+ .click();
121608
121665
  }
121609
121666
  await Promise.all([
121610
121667
  this.page.getByTestId(ROLES_SELECTORS.proceedButton).click(),
@@ -122191,13 +122248,14 @@ const verifyFreezeColumnAction = async (page, t) => {
122191
122248
  document.body.style.zoom = "0.25";
122192
122249
  }));
122193
122250
  await unFreezeAllColumns({ columnHeaders, columnOffset, page, t });
122194
- await toggleColumnState({ columnHeaders, columnOffset, page });
122251
+ await toggleColumnState({ columnHeaders, columnOffset, page, t });
122195
122252
  await validateColumnNames(columnHeaders, columnOffset, originalColumnNames);
122196
122253
  await toggleColumnState({
122197
122254
  columnHeaders,
122198
122255
  columnOffset,
122199
122256
  action: "Unfreeze",
122200
122257
  page,
122258
+ t,
122201
122259
  });
122202
122260
  await expect(columnHeader).toHaveText(originalColumnNames);
122203
122261
  moreThanFiveColumns &&
@@ -122214,21 +122272,22 @@ const unFreezeAllColumns = async ({ columnHeaders, columnOffset, page, t, }) =>
122214
122272
  for (let i = columnHeaders.length - 1; i >= columnOffset; i--) {
122215
122273
  const currentHeader = columnHeaders[i];
122216
122274
  await currentHeader.getByTestId(TABLE_SELECTORS.columnMenuButton).click();
122217
- await expect(page.getByTestId(COMMON_SELECTORS.dropdownContainer)).toBeVisible();
122275
+ await expect(page.getByRole("menu")).toBeVisible();
122218
122276
  (await unFreezeColumnButton.isVisible())
122219
122277
  ? await unFreezeColumnButton.click()
122220
- : await currentHeader
122221
- .getByTestId(TABLE_SELECTORS.columnMenuButton)
122222
- .click();
122278
+ : await page.keyboard.press("Escape");
122223
122279
  }
122224
122280
  };
122225
- const toggleColumnState = async ({ columnHeaders, columnOffset, action = "Freeze", page, }) => {
122281
+ const toggleColumnState = async ({ columnHeaders, columnOffset, action = "Freeze", page, t, }) => {
122226
122282
  const firstColumnIndex = columnOffset;
122227
122283
  const lastColumnIndex = columnHeaders.length - 1;
122228
122284
  const targetIndex = action === "Freeze" ? lastColumnIndex : firstColumnIndex;
122285
+ const toggleButtonText = action === "Freeze"
122286
+ ? t("neetoui.table.freezeColumn")
122287
+ : t("neetoui.table.unFreezeColumn");
122229
122288
  const toggleButton = page
122230
122289
  .getByTestId(TABLE_SELECTORS.freezeUnfreezeButton)
122231
- .filter({ hasText: action });
122290
+ .filter({ hasText: toggleButtonText });
122232
122291
  for (let i = firstColumnIndex; i < lastColumnIndex; i++) {
122233
122292
  const columnHeader = columnHeaders[targetIndex];
122234
122293
  (await page.getByTestId(COMMON_SELECTORS.tooltip).isVisible()) &&
@@ -122238,9 +122297,9 @@ const toggleColumnState = async ({ columnHeaders, columnOffset, action = "Freeze
122238
122297
  }
122239
122298
  };
122240
122299
  const validateColumnNames = async (columnHeaders, columnOffset, originalColumnNames) => {
122241
- for (let i = columnOffset; i < originalColumnNames.length - 1; i++) {
122242
- const expectedName = originalColumnNames[i + 1];
122243
- await expect(columnHeaders[i]).toHaveText(expectedName);
122300
+ const lastColumnIndex = columnHeaders.length - 1;
122301
+ for (let i = columnOffset; i < lastColumnIndex; i++) {
122302
+ await expect(columnHeaders[i]).toHaveText(originalColumnNames[columnOffset + lastColumnIndex - i]);
122244
122303
  }
122245
122304
  };
122246
122305
  const verifyReorderColumns = async (page) => {
@@ -126573,4 +126632,4 @@ class InboundEmailApis {
126573
126632
  };
126574
126633
  }
126575
126634
 
126576
- 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_MAILPIT_ENABLED, IS_STAGING_ENV, 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, 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_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, 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, networkConditions, networkThrottlingUsingCDP, optionSelector, readFileSyncIfExists, removeCredentialFile, serializeFileForBrowser, shouldSkipCustomDomainSetup, shouldSkipSetupAndTeardown, simulateClickWithDelay, simulateTypingWithDelay, skipTest, squish, stealth as stealthTest, tableUtils, toCamelCase, updateCredentials, warmup, withCookieCache, writeDataToFile };
126635
+ 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_MAILPIT_ENABLED, IS_STAGING_ENV, 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, 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_TEST_EMAIL_V2, ZAPIER_WEB_TEXTS, ZapierPage, authenticateUser, baseURLGenerator, basicHTMLContent, clearCredentials, commands, cpuThrottlingUsingCDP, createOrganizationViaRake, currencyUtils, dataQa, decodeQRCodeFromFile, definePlaywrightConfig, 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, 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.3.3",
3
+ "version": "4.3.5",
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",