@bigbinary/neeto-playwright-commons 4.5.1 → 4.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.d.ts +211 -4
- package/index.js +201 -36
- package/package.json +1 -1
package/index.d.ts
CHANGED
|
@@ -387,6 +387,20 @@ declare class CustomCommands {
|
|
|
387
387
|
page,
|
|
388
388
|
options
|
|
389
389
|
}: SelectOptionFromDropdownParams) => Promise<void>;
|
|
390
|
+
selectOptionFromDropdownV1: ({
|
|
391
|
+
label,
|
|
392
|
+
value,
|
|
393
|
+
page,
|
|
394
|
+
options
|
|
395
|
+
}: SelectOptionFromDropdownParams) => Promise<void>;
|
|
396
|
+
waitForSheetOpen: () => Promise<void>;
|
|
397
|
+
waitForSheetClose: () => Promise<void>;
|
|
398
|
+
selectOptionFromDropdownV2: ({
|
|
399
|
+
label,
|
|
400
|
+
value,
|
|
401
|
+
page,
|
|
402
|
+
options
|
|
403
|
+
}: SelectOptionFromDropdownParams) => Promise<void>;
|
|
390
404
|
/**
|
|
391
405
|
*
|
|
392
406
|
* Command to verify the value of a field. It can take either a single object or an array of objects, each representing a field and its expected value.
|
|
@@ -4379,6 +4393,7 @@ declare const DEFAULT_WEBHOOKS_RESPONSE_TEXT: string;
|
|
|
4379
4393
|
*
|
|
4380
4394
|
*/
|
|
4381
4395
|
declare const STORAGE_STATE = "./e2e/auth/user.json";
|
|
4396
|
+
declare const DEFAULT_TIMEZONE_ID = "Asia/Calcutta";
|
|
4382
4397
|
/**
|
|
4383
4398
|
*
|
|
4384
4399
|
* Pattern for global translations file path.
|
|
@@ -4434,6 +4449,7 @@ declare const ZAPIER_TEST_EMAIL: (product: string) => string;
|
|
|
4434
4449
|
declare const MAILPIT_BASE_URL = "https://mailpit.neetodeployapp.com";
|
|
4435
4450
|
declare const MAILPIT_DOMAIN_NAME = "mail.aceinvoice.com";
|
|
4436
4451
|
declare const IS_MAILPIT_ENABLED: boolean;
|
|
4452
|
+
declare const IS_SHADCN_UI: boolean;
|
|
4437
4453
|
declare const mailpitDomainName: () => string;
|
|
4438
4454
|
declare const ZAPIER_TEST_EMAIL_V2: (product: string) => string;
|
|
4439
4455
|
declare const SINGULAR: {
|
|
@@ -5012,6 +5028,30 @@ declare class TeamMembers {
|
|
|
5012
5028
|
}
|
|
5013
5029
|
declare class TeamMembersV2 extends TeamMembers {
|
|
5014
5030
|
fillMemberForm: (emails: string[], role?: string) => Promise<void>;
|
|
5031
|
+
openMemberPane: () => Promise<void>;
|
|
5032
|
+
/**
|
|
5033
|
+
*
|
|
5034
|
+
* Used to add a member using the add button in the header. It takes the following parameters:
|
|
5035
|
+
*
|
|
5036
|
+
* emails (optional): The emails of the members to be added. Default is an example email.
|
|
5037
|
+
*
|
|
5038
|
+
* role (optional): The role of the new members. Default is standard.
|
|
5039
|
+
*
|
|
5040
|
+
* @example
|
|
5041
|
+
*
|
|
5042
|
+
* await teamMembers.addMemberViaUI({
|
|
5043
|
+
* emails: ["sam@example.com", "tom@example.com"],
|
|
5044
|
+
* role: "admin",
|
|
5045
|
+
* });
|
|
5046
|
+
* @endexample
|
|
5047
|
+
*/
|
|
5048
|
+
addMemberViaUI: ({
|
|
5049
|
+
emails,
|
|
5050
|
+
role
|
|
5051
|
+
}?: {
|
|
5052
|
+
emails?: string[];
|
|
5053
|
+
role?: string;
|
|
5054
|
+
}) => Promise<void>;
|
|
5015
5055
|
submit: () => Promise<void>;
|
|
5016
5056
|
/**
|
|
5017
5057
|
*
|
|
@@ -5141,6 +5181,72 @@ declare class TeamMembersV2 extends TeamMembers {
|
|
|
5141
5181
|
* @endexample
|
|
5142
5182
|
*/
|
|
5143
5183
|
verifyNoDataTitle: (email: string) => Promise<void>;
|
|
5184
|
+
protected applyFilter: () => Promise<void>;
|
|
5185
|
+
/**
|
|
5186
|
+
*
|
|
5187
|
+
* Used to perform an action on a column header in the team members table. It takes the following parameters:
|
|
5188
|
+
*
|
|
5189
|
+
* columnName (optional): The name of the column to perform the action on. Default is Name.
|
|
5190
|
+
*
|
|
5191
|
+
* actionButtonText (optional): The text of the action button to be clicked. Default is Ascending.
|
|
5192
|
+
*
|
|
5193
|
+
* @example
|
|
5194
|
+
*
|
|
5195
|
+
* await teamMembers.performColumnAction({
|
|
5196
|
+
* columnName: "Role",
|
|
5197
|
+
* actionButtonText: "Hide column",
|
|
5198
|
+
* });
|
|
5199
|
+
* @endexample
|
|
5200
|
+
* @example
|
|
5201
|
+
*
|
|
5202
|
+
* await teamMembers.performColumnAction();
|
|
5203
|
+
*
|
|
5204
|
+
* // This will sort the `name` column in ascending order.
|
|
5205
|
+
* @endexample
|
|
5206
|
+
*/
|
|
5207
|
+
performColumnAction: ({
|
|
5208
|
+
columnName,
|
|
5209
|
+
actionButtonText
|
|
5210
|
+
}?: {
|
|
5211
|
+
columnName?: string;
|
|
5212
|
+
actionButtonText?: "Ascending" | "Descending" | "Hide column";
|
|
5213
|
+
}) => Promise<void>;
|
|
5214
|
+
/**
|
|
5215
|
+
*
|
|
5216
|
+
* Used to take action on members by selecting the members and clicking on the take action button in the subheader. It takes the following parameters:
|
|
5217
|
+
*
|
|
5218
|
+
* names (optional): The names of the members to take action on. If not provided, all members will be selected.
|
|
5219
|
+
*
|
|
5220
|
+
* state (optional): The state to change the members to.
|
|
5221
|
+
*
|
|
5222
|
+
* action (optional): An object with actionButtonText and valueButtonText as keys to take action on the members. actionButtonText and valueButtonText are the text of the action button to be clicked and the value of the action to be changed to, respectively.
|
|
5223
|
+
*
|
|
5224
|
+
* @example
|
|
5225
|
+
*
|
|
5226
|
+
* await teamMembers.takeActionOnMembers({
|
|
5227
|
+
* names: ["Sam", "Tom"],
|
|
5228
|
+
* state: "Deactivate",
|
|
5229
|
+
* });
|
|
5230
|
+
* @endexample
|
|
5231
|
+
* @example
|
|
5232
|
+
*
|
|
5233
|
+
* await teamMembers.takeActionOnMembers({
|
|
5234
|
+
* action: { actionButtonText: "Change role", valueButtonText: "Admin" },
|
|
5235
|
+
* });
|
|
5236
|
+
* @endexample
|
|
5237
|
+
*/
|
|
5238
|
+
takeActionOnMembers: ({
|
|
5239
|
+
names,
|
|
5240
|
+
state,
|
|
5241
|
+
action
|
|
5242
|
+
}: {
|
|
5243
|
+
names?: string[];
|
|
5244
|
+
state?: "activate" | "deactivate" | undefined;
|
|
5245
|
+
action?: {
|
|
5246
|
+
actionButtonText: string;
|
|
5247
|
+
valueButtonText: string;
|
|
5248
|
+
} | undefined;
|
|
5249
|
+
}) => Promise<void>;
|
|
5144
5250
|
}
|
|
5145
5251
|
interface BasicUserInfo {
|
|
5146
5252
|
firstName: string;
|
|
@@ -5152,6 +5258,7 @@ interface CreateOrganizationProps$1 extends BasicUserInfo {
|
|
|
5152
5258
|
businessName: string;
|
|
5153
5259
|
subdomainName: string;
|
|
5154
5260
|
appName: string;
|
|
5261
|
+
shouldSignupViaApi?: boolean;
|
|
5155
5262
|
}
|
|
5156
5263
|
interface LoginAndOnboardParams extends BasicUserInfo {
|
|
5157
5264
|
handleOnboarding: () => Promise<void>;
|
|
@@ -5239,7 +5346,8 @@ declare class OrganizationPage {
|
|
|
5239
5346
|
subdomainName,
|
|
5240
5347
|
firstName,
|
|
5241
5348
|
lastName,
|
|
5242
|
-
appName
|
|
5349
|
+
appName,
|
|
5350
|
+
shouldSignupViaApi
|
|
5243
5351
|
}: CreateOrganizationProps$1) => Promise<void>;
|
|
5244
5352
|
/**
|
|
5245
5353
|
*
|
|
@@ -5252,7 +5360,11 @@ declare class OrganizationPage {
|
|
|
5252
5360
|
* await organizationPage.setupOrganization("Chat")
|
|
5253
5361
|
* @endexample
|
|
5254
5362
|
*/
|
|
5255
|
-
setupOrganization: (product: string
|
|
5363
|
+
setupOrganization: (product: string, {
|
|
5364
|
+
shouldSignupViaApi
|
|
5365
|
+
}?: {
|
|
5366
|
+
shouldSignupViaApi?: boolean;
|
|
5367
|
+
}) => Promise<void>;
|
|
5256
5368
|
/**
|
|
5257
5369
|
*
|
|
5258
5370
|
* Used to update already existing subdomain name. It takes the following parameters:
|
|
@@ -5395,11 +5507,13 @@ declare class OrganizationPage {
|
|
|
5395
5507
|
signUp: ({
|
|
5396
5508
|
credentials,
|
|
5397
5509
|
fetchOtpFromEmail,
|
|
5398
|
-
appName
|
|
5510
|
+
appName,
|
|
5511
|
+
shouldSignupViaApi
|
|
5399
5512
|
}: {
|
|
5400
5513
|
credentials: Credentials;
|
|
5401
5514
|
fetchOtpFromEmail?: FetchOtpFromEmail;
|
|
5402
5515
|
appName: string;
|
|
5516
|
+
shouldSignupViaApi?: boolean;
|
|
5403
5517
|
}) => Promise<{
|
|
5404
5518
|
STORAGE_STATE: {
|
|
5405
5519
|
cookies: Array<{
|
|
@@ -7212,6 +7326,7 @@ declare const COMMON_SELECTORS: {
|
|
|
7212
7326
|
toastBody: string;
|
|
7213
7327
|
paneModalCrossIcon: string;
|
|
7214
7328
|
sheetHeader: string;
|
|
7329
|
+
sheetWrapper: string;
|
|
7215
7330
|
sheetBody: string;
|
|
7216
7331
|
sheetCloseButton: string;
|
|
7217
7332
|
dialogHeader: string;
|
|
@@ -7949,6 +8064,7 @@ declare const MEMBER_SELECTORS: {
|
|
|
7949
8064
|
exportCancelBtn: string;
|
|
7950
8065
|
downloadButton: string;
|
|
7951
8066
|
manageAppListChk: string;
|
|
8067
|
+
takeActionDropdown: string;
|
|
7952
8068
|
menubarSubLink: (sublink: string) => string;
|
|
7953
8069
|
takeActionStateOption: (option?: string) => string;
|
|
7954
8070
|
checkboxLabel: (label: string) => string;
|
|
@@ -9415,6 +9531,97 @@ declare const createOrganizationViaRake: ({
|
|
|
9415
9531
|
lastName,
|
|
9416
9532
|
subdomainName
|
|
9417
9533
|
}: CreateOrganizationProps) => Promise<string>;
|
|
9534
|
+
interface CreateOrganizationViaApiProps extends CreateOrganizationProps {
|
|
9535
|
+
page: Page;
|
|
9536
|
+
businessName: string;
|
|
9537
|
+
redirectUri?: string;
|
|
9538
|
+
timeZone?: string;
|
|
9539
|
+
}
|
|
9540
|
+
/**
|
|
9541
|
+
*
|
|
9542
|
+
* Creates a fully signed-up organization (org + owner + product sync) in a single
|
|
9543
|
+
*
|
|
9544
|
+
* request to neeto-auth-web's non-production POST /api/v1/internal/quick_setups
|
|
9545
|
+
*
|
|
9546
|
+
* endpoint, then navigates the page to the returned one-time-token login URL so
|
|
9547
|
+
*
|
|
9548
|
+
* the session cookie is set. Staging-only replacement for the multi-step UI
|
|
9549
|
+
*
|
|
9550
|
+
* signup flow. The request is authenticated with process.env.OTP_BYPASS_KEY
|
|
9551
|
+
*
|
|
9552
|
+
* and the email must follow the cypress bypass convention
|
|
9553
|
+
*
|
|
9554
|
+
* (cpt<key>...@bigbinary.com).
|
|
9555
|
+
*
|
|
9556
|
+
* page: A page object.
|
|
9557
|
+
*
|
|
9558
|
+
* email: The email address for the organization owner.
|
|
9559
|
+
*
|
|
9560
|
+
* firstName: The first name of the organization owner.
|
|
9561
|
+
*
|
|
9562
|
+
* lastName: The last name of the organization owner.
|
|
9563
|
+
*
|
|
9564
|
+
* businessName: The organization name.
|
|
9565
|
+
*
|
|
9566
|
+
* subdomainName: The subdomain name for the organization.
|
|
9567
|
+
*
|
|
9568
|
+
* redirectUri (optional): Bare host+path the login should land on, e.g.
|
|
9569
|
+
*
|
|
9570
|
+
* neetocal.net/admin. Omit for neetoAuth itself.
|
|
9571
|
+
*
|
|
9572
|
+
* timeZone (optional): Time zone applied to the owner's neetoAuth profile,
|
|
9573
|
+
*
|
|
9574
|
+
* mirroring what the signup form auto-detects from the browser. Defaults to
|
|
9575
|
+
*
|
|
9576
|
+
* Asia/Calcutta — the timezoneId the Playwright browsers run with.
|
|
9577
|
+
*
|
|
9578
|
+
* Staging signups performed by OrganizationPage.createOrganization,
|
|
9579
|
+
*
|
|
9580
|
+
* OrganizationPage.setupOrganization, and OrganizationPage.signUp use this
|
|
9581
|
+
*
|
|
9582
|
+
* API by default (shouldSignupViaApi defaults to true). Pass
|
|
9583
|
+
*
|
|
9584
|
+
* shouldSignupViaApi: false to fall back to the full UI signup flow (signup
|
|
9585
|
+
*
|
|
9586
|
+
* page → OTP → organization form → profile form) — useful when the signup UI
|
|
9587
|
+
*
|
|
9588
|
+
* itself is under test:
|
|
9589
|
+
*
|
|
9590
|
+
* @example
|
|
9591
|
+
*
|
|
9592
|
+
* await organizationPage.setupOrganization(PRODUCT, { shouldSignupViaApi: false });
|
|
9593
|
+
*
|
|
9594
|
+
* await organizationPage.signUp({ credentials, appName, shouldSignupViaApi: false });
|
|
9595
|
+
* @endexample
|
|
9596
|
+
* Signups with fetchOtpFromEmail always use the UI flow regardless of the
|
|
9597
|
+
*
|
|
9598
|
+
* mode, since real-mailbox emails cannot use the cypress OTP bypass.
|
|
9599
|
+
*
|
|
9600
|
+
* @example
|
|
9601
|
+
*
|
|
9602
|
+
* import { createOrganizationViaApi } from "@neetoplaywright";
|
|
9603
|
+
*
|
|
9604
|
+
* await createOrganizationViaApi({
|
|
9605
|
+
* page,
|
|
9606
|
+
* email: "cptkey+cal@bigbinary.com",
|
|
9607
|
+
* firstName: "John",
|
|
9608
|
+
* lastName: "Doe",
|
|
9609
|
+
* businessName: "myorganization",
|
|
9610
|
+
* subdomainName: "myorganization",
|
|
9611
|
+
* redirectUri: "neetocal.net/admin",
|
|
9612
|
+
* });
|
|
9613
|
+
* @endexample
|
|
9614
|
+
*/
|
|
9615
|
+
declare const createOrganizationViaApi: ({
|
|
9616
|
+
page,
|
|
9617
|
+
email,
|
|
9618
|
+
firstName,
|
|
9619
|
+
lastName,
|
|
9620
|
+
businessName,
|
|
9621
|
+
subdomainName,
|
|
9622
|
+
redirectUri,
|
|
9623
|
+
timeZone
|
|
9624
|
+
}: CreateOrganizationViaApiProps) => Promise<void>;
|
|
9418
9625
|
interface AssertColumnHeaderVisibilityProps {
|
|
9419
9626
|
page: Page;
|
|
9420
9627
|
columnName: string;
|
|
@@ -10118,5 +10325,5 @@ declare class InboundEmailApis {
|
|
|
10118
10325
|
reply: (emailParams: ReplyInboundEmailParams) => Promise<playwright_core.APIResponse | undefined>;
|
|
10119
10326
|
private deliverSource;
|
|
10120
10327
|
}
|
|
10121
|
-
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_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_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, RolesPageV2, 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, 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, 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 };
|
|
10328
|
+
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_ENV, IS_MAILPIT_ENABLED, IS_SHADCN_UI, 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, RolesPageV2, 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, 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, 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 };
|
|
10122
10329
|
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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isPresent, keysToSnakeCase, hyphenate, isNotPresent, noop as noop$2,
|
|
1
|
+
import { isPresent, keysToSnakeCase, hyphenate, humanize, isNotPresent, noop as noop$2, findBy, dynamicArray, truncate, isNotEmpty, 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';
|
|
@@ -310,6 +310,7 @@ const IS_DEV_ENV = process.env.TEST_ENV === ENVIRONMENT.development;
|
|
|
310
310
|
const IS_CI = isPresent(process.env.NEETO_CI_JOB_ID);
|
|
311
311
|
const DEFAULT_WEBHOOKS_RESPONSE_TEXT = JSON.stringify({ success: true });
|
|
312
312
|
const STORAGE_STATE = "./e2e/auth/user.json";
|
|
313
|
+
const DEFAULT_TIMEZONE_ID = "Asia/Calcutta";
|
|
313
314
|
const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
|
|
314
315
|
const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
|
|
315
316
|
const CREDENTIALS = {
|
|
@@ -327,6 +328,7 @@ const ZAPIER_TEST_EMAIL = (product) => `neeto-${product}-zapier-test@${process.e
|
|
|
327
328
|
const MAILPIT_BASE_URL = "https://mailpit.neetodeployapp.com";
|
|
328
329
|
const MAILPIT_DOMAIN_NAME = "mail.aceinvoice.com";
|
|
329
330
|
const IS_MAILPIT_ENABLED = isPresent(process.env.MAILPIT_DOMAIN_NAME);
|
|
331
|
+
const IS_SHADCN_UI = isPresent(process.env.IS_SHADCN_UI);
|
|
330
332
|
const mailpitDomainName = () => process.env.MAILPIT_DOMAIN_NAME || MAILPIT_DOMAIN_NAME;
|
|
331
333
|
const ZAPIER_TEST_EMAIL_V2 = (product) => `neeto-${product}-zapier-test@${mailpitDomainName()}`;
|
|
332
334
|
// constants for translation
|
|
@@ -1008,6 +1010,7 @@ const COMMON_SELECTORS = {
|
|
|
1008
1010
|
toastBody: ".Toastify__toast-body",
|
|
1009
1011
|
paneModalCrossIcon: "pane-close-button",
|
|
1010
1012
|
sheetHeader: "sheet-header",
|
|
1013
|
+
sheetWrapper: "sheet-wrapper",
|
|
1011
1014
|
sheetBody: "sheet-body",
|
|
1012
1015
|
sheetCloseButton: "sheet-close-button",
|
|
1013
1016
|
dialogHeader: "dialog-header",
|
|
@@ -1641,6 +1644,7 @@ const MEMBER_SELECTORS = {
|
|
|
1641
1644
|
exportCancelBtn: "export-cancel-button",
|
|
1642
1645
|
downloadButton: "download-button",
|
|
1643
1646
|
manageAppListChk: "ntm-manage-members-app-list-checkbox",
|
|
1647
|
+
takeActionDropdown: "ntm-members-take-action-dropdown-button",
|
|
1644
1648
|
menubarSubLink: (sublink) => `members-${sublink}-block-sub-link`,
|
|
1645
1649
|
takeActionStateOption: (option = "") => `ntm-${hyphenate(option)}-members-button`,
|
|
1646
1650
|
checkboxLabel: (label) => `${hyphenate(label)}-checkbox-label`,
|
|
@@ -2243,6 +2247,11 @@ class CustomCommands {
|
|
|
2243
2247
|
return await this.request[method](formattedUrl, requestOptions);
|
|
2244
2248
|
};
|
|
2245
2249
|
selectOptionFromDropdown = async ({ label = "nui", value, page = this.page, options = {}, }) => {
|
|
2250
|
+
IS_SHADCN_UI
|
|
2251
|
+
? await this.selectOptionFromDropdownV2({ label, value, page, options })
|
|
2252
|
+
: await this.selectOptionFromDropdownV1({ label, value, page, options });
|
|
2253
|
+
};
|
|
2254
|
+
selectOptionFromDropdownV1 = async ({ label = "nui", value, page = this.page, options = {}, }) => {
|
|
2246
2255
|
Object.assign({
|
|
2247
2256
|
visibilityTimeout: 2_000,
|
|
2248
2257
|
textAssertionTimeout: 1_000,
|
|
@@ -2262,6 +2271,29 @@ class CustomCommands {
|
|
|
2262
2271
|
});
|
|
2263
2272
|
}).toPass({ timeout: options.retryTimeout });
|
|
2264
2273
|
};
|
|
2274
|
+
waitForSheetOpen = () => expect(this.page.getByTestId(COMMON_SELECTORS.sheetHeader)).toBeInViewport({
|
|
2275
|
+
timeout: 10_000,
|
|
2276
|
+
ratio: 1,
|
|
2277
|
+
});
|
|
2278
|
+
waitForSheetClose = () => expect(this.page.getByTestId(COMMON_SELECTORS.sheetWrapper)).toHaveCount(0, { timeout: 10_000 });
|
|
2279
|
+
selectOptionFromDropdownV2 = async ({ label = "nui", value, page = this.page, options = {}, }) => {
|
|
2280
|
+
Object.assign({
|
|
2281
|
+
visibilityTimeout: 2_000,
|
|
2282
|
+
textAssertionTimeout: 1_000,
|
|
2283
|
+
retryTimeout: 20_000,
|
|
2284
|
+
}, options);
|
|
2285
|
+
const menu = page.getByTestId(COMMON_SELECTORS.customDropDownMenu(label));
|
|
2286
|
+
const container = page.getByTestId(COMMON_SELECTORS.customSelectContainer(label));
|
|
2287
|
+
await expect(async () => {
|
|
2288
|
+
await container.click();
|
|
2289
|
+
await expect(menu).toBeVisible({ timeout: options.visibilityTimeout });
|
|
2290
|
+
await page.keyboard.type(value);
|
|
2291
|
+
await menu.getByRole("option", { name: value, exact: true }).click();
|
|
2292
|
+
await expect(container).toContainText(value, {
|
|
2293
|
+
timeout: options.textAssertionTimeout,
|
|
2294
|
+
});
|
|
2295
|
+
}).toPass({ timeout: options.retryTimeout });
|
|
2296
|
+
};
|
|
2265
2297
|
verifyFieldValue = values => {
|
|
2266
2298
|
const verifyEachFieldValue = ({ field, value, }) => expect(this.page.getByTestId(field)).toHaveValue(value);
|
|
2267
2299
|
return Array.isArray(values)
|
|
@@ -2796,6 +2828,34 @@ const createOrganizationViaRake = async ({ email, firstName, lastName, subdomain
|
|
|
2796
2828
|
}
|
|
2797
2829
|
return stdout.trim();
|
|
2798
2830
|
};
|
|
2831
|
+
const createOrganizationViaApi = async ({ page, email, firstName, lastName, businessName, subdomainName, redirectUri, timeZone = DEFAULT_TIMEZONE_ID, }) => {
|
|
2832
|
+
if (!process.env.OTP_BYPASS_KEY) {
|
|
2833
|
+
throw new Error("OTP_BYPASS_KEY environment variable is required to create organizations via the quick setups API.");
|
|
2834
|
+
}
|
|
2835
|
+
const response = await page.request.post(`${NEETO_AUTH_BASE_URL()}/api/v1/internal/quick_setups`, {
|
|
2836
|
+
headers: {
|
|
2837
|
+
Authorization: `Token token="${process.env.OTP_BYPASS_KEY}"`,
|
|
2838
|
+
},
|
|
2839
|
+
data: {
|
|
2840
|
+
setup: {
|
|
2841
|
+
email,
|
|
2842
|
+
first_name: firstName,
|
|
2843
|
+
last_name: lastName,
|
|
2844
|
+
organization_name: humanize(businessName),
|
|
2845
|
+
subdomain: subdomainName,
|
|
2846
|
+
redirect_uri: redirectUri,
|
|
2847
|
+
time_zone: timeZone,
|
|
2848
|
+
},
|
|
2849
|
+
},
|
|
2850
|
+
timeout: 120_000,
|
|
2851
|
+
});
|
|
2852
|
+
if (!response.ok()) {
|
|
2853
|
+
throw new Error(`Quick organization setup failed with status ${response.status()}: ${await response.text()}`);
|
|
2854
|
+
}
|
|
2855
|
+
// The OTT in the login URL expires in 150 seconds; navigate immediately.
|
|
2856
|
+
const { login_url: loginUrl } = await response.json();
|
|
2857
|
+
await page.goto(loginUrl, { timeout: 30_000 });
|
|
2858
|
+
};
|
|
2799
2859
|
|
|
2800
2860
|
//! otpauth 9.5.0 | (c) Héctor Molinero Fernández | MIT | https://github.com/hectorm/otpauth
|
|
2801
2861
|
//! noble-hashes 2.0.1 | (c) Paul Miller | MIT | https://github.com/paulmillr/noble-hashes
|
|
@@ -18028,7 +18088,7 @@ class OrganizationPage {
|
|
|
18028
18088
|
const maybeLaterButton = this.page.getByTestId(LOGIN_SELECTORS.authenticatorAppLaterButton);
|
|
18029
18089
|
(await maybeLaterButton.isVisible()) && (await maybeLaterButton.click());
|
|
18030
18090
|
};
|
|
18031
|
-
createOrganization = async ({ email, businessName, subdomainName, firstName, lastName, appName, }) => {
|
|
18091
|
+
createOrganization = async ({ email, businessName, subdomainName, firstName, lastName, appName, shouldSignupViaApi = true, }) => {
|
|
18032
18092
|
if (shouldSkipSetupAndTeardown())
|
|
18033
18093
|
return;
|
|
18034
18094
|
if (IS_DEV_ENV) {
|
|
@@ -18042,28 +18102,43 @@ class OrganizationPage {
|
|
|
18042
18102
|
}
|
|
18043
18103
|
const appNameInLowerCase = appName.toLowerCase();
|
|
18044
18104
|
const isNeetoAuth = appNameInLowerCase === "neetoauth";
|
|
18045
|
-
|
|
18046
|
-
|
|
18047
|
-
|
|
18048
|
-
|
|
18049
|
-
|
|
18050
|
-
|
|
18051
|
-
|
|
18105
|
+
if (!shouldSignupViaApi) {
|
|
18106
|
+
isNeetoAuth
|
|
18107
|
+
? await this.page.goto(ROUTES.neetoAuthSignup, { timeout: 20_000 })
|
|
18108
|
+
: await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${appNameInLowerCase}.net/admin`, { timeout: 20_000 });
|
|
18109
|
+
await this.submitEmail(email);
|
|
18110
|
+
await this.fillOTP();
|
|
18111
|
+
await this.fillOrganizationDetails({
|
|
18112
|
+
credentials: {
|
|
18113
|
+
firstName,
|
|
18114
|
+
lastName,
|
|
18115
|
+
email,
|
|
18116
|
+
currentUserName: email,
|
|
18117
|
+
businessName,
|
|
18118
|
+
subdomainName,
|
|
18119
|
+
domain: appNameInLowerCase,
|
|
18120
|
+
},
|
|
18121
|
+
appName: appNameInLowerCase,
|
|
18122
|
+
});
|
|
18123
|
+
}
|
|
18124
|
+
else {
|
|
18125
|
+
await createOrganizationViaApi({
|
|
18126
|
+
page: this.page,
|
|
18127
|
+
email,
|
|
18052
18128
|
firstName,
|
|
18053
18129
|
lastName,
|
|
18054
|
-
email,
|
|
18055
|
-
currentUserName: email,
|
|
18056
18130
|
businessName,
|
|
18057
18131
|
subdomainName,
|
|
18058
|
-
|
|
18059
|
-
|
|
18060
|
-
|
|
18061
|
-
|
|
18132
|
+
redirectUri: isNeetoAuth
|
|
18133
|
+
? undefined
|
|
18134
|
+
: `${appNameInLowerCase}.net/admin`,
|
|
18135
|
+
});
|
|
18136
|
+
}
|
|
18062
18137
|
await this.page.waitForURL(new RegExp(getGlobalUserState().domain), {
|
|
18063
18138
|
waitUntil: "load",
|
|
18064
18139
|
});
|
|
18065
18140
|
};
|
|
18066
|
-
setupOrganization = async (product) => {
|
|
18141
|
+
setupOrganization = async (product, { shouldSignupViaApi } = {}) => {
|
|
18067
18142
|
if (!IS_STAGING_ENV || shouldSkipSetupAndTeardown())
|
|
18068
18143
|
return;
|
|
18069
18144
|
const { user } = readFileSyncIfExists();
|
|
@@ -18074,6 +18149,7 @@ class OrganizationPage {
|
|
|
18074
18149
|
lastName: user.lastName,
|
|
18075
18150
|
subdomainName: user.subdomainName,
|
|
18076
18151
|
appName: `neeto${product}`,
|
|
18152
|
+
shouldSignupViaApi,
|
|
18077
18153
|
});
|
|
18078
18154
|
await this.neetoPlaywrightUtilities.waitForPageLoad({
|
|
18079
18155
|
customPageContext: this.page,
|
|
@@ -18218,7 +18294,7 @@ class OrganizationPage {
|
|
|
18218
18294
|
}
|
|
18219
18295
|
await handleOnboarding();
|
|
18220
18296
|
};
|
|
18221
|
-
signUp = async ({ credentials, fetchOtpFromEmail, appName, }) => {
|
|
18297
|
+
signUp = async ({ credentials, fetchOtpFromEmail, appName, shouldSignupViaApi = true, }) => {
|
|
18222
18298
|
if (IS_DEV_ENV) {
|
|
18223
18299
|
await createOrganizationViaRake({
|
|
18224
18300
|
email: credentials.email,
|
|
@@ -18232,7 +18308,7 @@ class OrganizationPage {
|
|
|
18232
18308
|
loginPath: `${baseURLGenerator(appName, credentials.subdomainName)}${ROUTES.admin}`,
|
|
18233
18309
|
});
|
|
18234
18310
|
}
|
|
18235
|
-
else {
|
|
18311
|
+
else if (fetchOtpFromEmail !== undefined || !shouldSignupViaApi) {
|
|
18236
18312
|
let otp = "123456";
|
|
18237
18313
|
await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${credentials.domain}`, { timeout: 20_000 });
|
|
18238
18314
|
await this.submitEmail(credentials.email);
|
|
@@ -18249,6 +18325,18 @@ class OrganizationPage {
|
|
|
18249
18325
|
});
|
|
18250
18326
|
await this.page.waitForURL(new RegExp(credentials.domain));
|
|
18251
18327
|
}
|
|
18328
|
+
else {
|
|
18329
|
+
await createOrganizationViaApi({
|
|
18330
|
+
page: this.page,
|
|
18331
|
+
email: credentials.email,
|
|
18332
|
+
firstName: credentials.firstName,
|
|
18333
|
+
lastName: credentials.lastName,
|
|
18334
|
+
businessName: credentials.businessName,
|
|
18335
|
+
subdomainName: credentials.subdomainName,
|
|
18336
|
+
redirectUri: credentials.domain,
|
|
18337
|
+
});
|
|
18338
|
+
await this.page.waitForURL(new RegExp(credentials.domain));
|
|
18339
|
+
}
|
|
18252
18340
|
const STORAGE_STATE = await this.page.context().storageState();
|
|
18253
18341
|
return { STORAGE_STATE, baseURL: process.env.BASE_URL };
|
|
18254
18342
|
};
|
|
@@ -70357,8 +70445,10 @@ class MailerUtils {
|
|
|
70357
70445
|
};
|
|
70358
70446
|
generateRandomEmailV2 = () => {
|
|
70359
70447
|
const domain = mailpitDomainName();
|
|
70360
|
-
const [localPart] = faker.internet
|
|
70361
|
-
|
|
70448
|
+
const [localPart] = faker.internet
|
|
70449
|
+
.email({ provider: domain, allowSpecialCharacters: false })
|
|
70450
|
+
.split("@");
|
|
70451
|
+
return `${localPart}.${faker.string.alpha(8).toLowerCase()}@${domain}`;
|
|
70362
70452
|
};
|
|
70363
70453
|
getLatestMessageIdV2 = async (subject, { timeout = 10_000, receivedAfter = dateTimeOneHourAgo(), } = {}) => {
|
|
70364
70454
|
if (IS_DEV_ENV) {
|
|
@@ -119891,7 +119981,15 @@ class ZapierPage extends IntegrationBase {
|
|
|
119891
119981
|
.getByRole("button", { name: ZAPIER_WEB_TEXTS.editThisZap })
|
|
119892
119982
|
.click();
|
|
119893
119983
|
await this.zapierWebPage.waitForLoadState();
|
|
119894
|
-
|
|
119984
|
+
const publishBtn = this.navbar.getByTestId(ZAPIER_SELECTORS.publishButton);
|
|
119985
|
+
const editBtn = this.zapierWebPage.getByRole("button", {
|
|
119986
|
+
name: ZAPIER_WEB_TEXTS.editExistingDraft,
|
|
119987
|
+
});
|
|
119988
|
+
await expect(publishBtn.or(editBtn)).toBeVisible({ timeout: 25_000 });
|
|
119989
|
+
if (await editBtn.isHidden())
|
|
119990
|
+
return;
|
|
119991
|
+
await editBtn.click();
|
|
119992
|
+
await expect(publishBtn).toBeVisible({ timeout: 25_000 });
|
|
119895
119993
|
};
|
|
119896
119994
|
openMoreOptions = async () => {
|
|
119897
119995
|
await this.firstStepBlock.waitFor({ timeout: 25_000 });
|
|
@@ -119907,6 +120005,9 @@ class ZapierPage extends IntegrationBase {
|
|
|
119907
120005
|
await this.zapToggle.click();
|
|
119908
120006
|
await expect(this.zapToggle.getByTestId(ZAPIER_SELECTORS.spinner)).toBeHidden({ timeout: 30_000 });
|
|
119909
120007
|
await expect(checkbox).toBeChecked({ timeout: 15_000 });
|
|
120008
|
+
await expect(this.zapierWebPage.getByRole("dialog")).toBeVisible({
|
|
120009
|
+
timeout: 15_000,
|
|
120010
|
+
});
|
|
119910
120011
|
};
|
|
119911
120012
|
reconnectAccount = async (zapierApiKey) => {
|
|
119912
120013
|
this.stepBlock = this.zapierWebPage.getByTestId(ZAPIER_SELECTORS.stepBlock);
|
|
@@ -120007,7 +120108,9 @@ class ZapierPage extends IntegrationBase {
|
|
|
120007
120108
|
});
|
|
120008
120109
|
await this.zapierWebPage.close();
|
|
120009
120110
|
};
|
|
120010
|
-
verifyZapIsTriggered = ({ productName, submittedEmail, zapTriggeredAfter, timeout = 2 * 60_000, }) =>
|
|
120111
|
+
verifyZapIsTriggered = ({ productName, submittedEmail, zapTriggeredAfter, timeout = 2 * 60_000, }) => IS_MAILPIT_ENABLED
|
|
120112
|
+
? this.mailerUtils.findMessageV2({ to: ZAPIER_TEST_EMAIL(productName), body: submittedEmail }, { timeout, receivedAfter: zapTriggeredAfter })
|
|
120113
|
+
: this.mailerUtils.findMessage({ to: ZAPIER_TEST_EMAIL(productName), body: submittedEmail }, { timeout, receivedAfter: zapTriggeredAfter });
|
|
120011
120114
|
skipIfTaskLimitIsExhausted = async () => {
|
|
120012
120115
|
// Zapier provides 100 free task limit for free account; skip test if it's exhausted
|
|
120013
120116
|
const universalSidebar = this.zapierWebPage.locator(ZAPIER_SELECTORS.universalSidebar);
|
|
@@ -120132,7 +120235,7 @@ class Member {
|
|
|
120132
120235
|
generateRandomTeamMembers = ({ count = 1, role = "standard" }) => dynamicArray(count, () => ({
|
|
120133
120236
|
firstName: faker.person.firstName(),
|
|
120134
120237
|
lastName: faker.person.lastName(),
|
|
120135
|
-
email: faker.internet.exampleEmail(),
|
|
120238
|
+
email: faker.internet.exampleEmail({ allowSpecialCharacters: false }),
|
|
120136
120239
|
role,
|
|
120137
120240
|
}));
|
|
120138
120241
|
getUserIdViaAPI = async (email) => {
|
|
@@ -121166,7 +121269,7 @@ class TeamMembers {
|
|
|
121166
121269
|
.click();
|
|
121167
121270
|
await continueBtn.click();
|
|
121168
121271
|
};
|
|
121169
|
-
addMemberViaUI = async ({ emails = [faker.internet.exampleEmail()], role = "standard", } = {}) => {
|
|
121272
|
+
addMemberViaUI = async ({ emails = [faker.internet.exampleEmail({ allowSpecialCharacters: false })], role = "standard", } = {}) => {
|
|
121170
121273
|
await this.openMemberPane();
|
|
121171
121274
|
await this.fillMemberForm(emails, role);
|
|
121172
121275
|
await this.submit();
|
|
@@ -121382,24 +121485,35 @@ class TeamMembers {
|
|
|
121382
121485
|
class TeamMembersV2 extends TeamMembers {
|
|
121383
121486
|
fillMemberForm = async (emails, role) => {
|
|
121384
121487
|
await this.page
|
|
121385
|
-
.getByTestId(
|
|
121386
|
-
.
|
|
121387
|
-
|
|
121488
|
+
.getByTestId(MEMBER_FORM_SELECTORS.emailTextField)
|
|
121489
|
+
.pressSequentially(emails.join(", "));
|
|
121490
|
+
const continueBtn = this.page.getByTestId(MEMBER_SELECTORS.continueButton);
|
|
121388
121491
|
await this.page.keyboard.press("Enter");
|
|
121492
|
+
await expect(continueBtn).toBeEnabled();
|
|
121389
121493
|
role &&
|
|
121390
121494
|
(await this.neetoPlaywrightUtilities.toggleElement({
|
|
121391
121495
|
locator: this.page.getByRole("radio", { name: role, exact: true }),
|
|
121392
121496
|
}));
|
|
121393
|
-
const continueBtn = this.page.getByTestId(MEMBER_SELECTORS.continueButton);
|
|
121394
121497
|
await continueBtn.click();
|
|
121395
121498
|
if (IS_DEV_ENV)
|
|
121396
121499
|
return;
|
|
121397
|
-
await this.page
|
|
121398
|
-
.getByTestId(COMMON_SELECTORS.paneBody)
|
|
121399
|
-
.getByTestId(COMMON_SELECTORS.checkboxLabel)
|
|
121400
|
-
.click();
|
|
121500
|
+
await this.page.getByTestId(MEMBER_SELECTORS.manageAppListChk).click();
|
|
121401
121501
|
await continueBtn.click();
|
|
121402
121502
|
};
|
|
121503
|
+
openMemberPane = async () => {
|
|
121504
|
+
await this.page.getByTestId(MEMBER_SELECTORS.newButton).click();
|
|
121505
|
+
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
121506
|
+
const continueButton = this.page.getByTestId(MEMBER_SELECTORS.continueButton);
|
|
121507
|
+
await expect(continueButton).toBeVisible();
|
|
121508
|
+
await this.neetoPlaywrightUtilities.waitForSheetOpen();
|
|
121509
|
+
await expect(continueButton.getByTestId(COMMON_SELECTORS.uiSpinner)).toBeHidden({ timeout: 35_000 });
|
|
121510
|
+
};
|
|
121511
|
+
addMemberViaUI = async ({ emails = [faker.internet.exampleEmail({ allowSpecialCharacters: false })], role = "standard", } = {}) => {
|
|
121512
|
+
await this.openMemberPane();
|
|
121513
|
+
await this.fillMemberForm(emails, role);
|
|
121514
|
+
await this.submit();
|
|
121515
|
+
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
121516
|
+
};
|
|
121403
121517
|
submit = async () => {
|
|
121404
121518
|
const pane = this.page.getByRole("dialog");
|
|
121405
121519
|
const submitBtn = this.page.getByTestId(MEMBER_SELECTORS.submitButton);
|
|
@@ -121424,6 +121538,7 @@ class TeamMembersV2 extends TeamMembers {
|
|
|
121424
121538
|
await expect(this.page
|
|
121425
121539
|
.getByTestId(MEMBER_SELECTORS.submitButton)
|
|
121426
121540
|
.getByTestId(COMMON_SELECTORS.uiSpinner)).toHaveCount(0, { timeout: 35_000 });
|
|
121541
|
+
await this.neetoPlaywrightUtilities.waitForSheetOpen();
|
|
121427
121542
|
isPresent(email) &&
|
|
121428
121543
|
(await this.page
|
|
121429
121544
|
.getByTestId(MEMBER_FORM_SELECTORS.emailInput)
|
|
@@ -121492,6 +121607,57 @@ class TeamMembersV2 extends TeamMembers {
|
|
|
121492
121607
|
await expect(this.page.getByTestId(COMMON_SELECTORS.noDataTitleV2)).toBeVisible({ timeout: 10_000 });
|
|
121493
121608
|
await filterUtils.clearFiltersFromActionBlock(this.page);
|
|
121494
121609
|
};
|
|
121610
|
+
applyFilter = async () => {
|
|
121611
|
+
await expect(this.page.getByTestId(NEETO_FILTERS_SELECTORS.neetoFiltersBarClearButton)).toBeVisible();
|
|
121612
|
+
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
121613
|
+
await expect(this.page.locator(COMMON_SELECTORS.tableSpinner)).toBeHidden({
|
|
121614
|
+
timeout: 30_000,
|
|
121615
|
+
});
|
|
121616
|
+
await this.page
|
|
121617
|
+
.getByTestId(NEETO_FILTERS_SELECTORS.filterDoneButton)
|
|
121618
|
+
.click();
|
|
121619
|
+
await this.neetoPlaywrightUtilities.waitForSheetClose();
|
|
121620
|
+
};
|
|
121621
|
+
performColumnAction = async ({ columnName = "Name", actionButtonText = "Ascending", } = {}) => {
|
|
121622
|
+
await this.page
|
|
121623
|
+
.getByTestId(TABLE_SELECTORS.columnHeaderTitle(hyphenate(columnName)))
|
|
121624
|
+
.getByTestId(TABLE_SELECTORS.columnMenuButton)
|
|
121625
|
+
.click();
|
|
121626
|
+
await this.page.getByRole("menuitem", { name: actionButtonText }).click();
|
|
121627
|
+
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
121628
|
+
await expect(this.page.locator(COMMON_SELECTORS.tableSpinner)).toBeHidden();
|
|
121629
|
+
};
|
|
121630
|
+
takeActionOnMembers = async ({ names = [], state, action, }) => {
|
|
121631
|
+
if (isPresent(names)) {
|
|
121632
|
+
for (const name of names) {
|
|
121633
|
+
await this.getMemberRowByName(name).getByRole("checkbox").click();
|
|
121634
|
+
}
|
|
121635
|
+
}
|
|
121636
|
+
else {
|
|
121637
|
+
await this.page
|
|
121638
|
+
.getByRole("columnheader", { name: MEMBER_TEXTS.selectAll })
|
|
121639
|
+
.click();
|
|
121640
|
+
}
|
|
121641
|
+
await this.page.getByTestId(MEMBER_SELECTORS.takeActionDropdown).click();
|
|
121642
|
+
if (isPresent(state)) {
|
|
121643
|
+
await this.page
|
|
121644
|
+
.getByTestId(MEMBER_SELECTORS.takeActionStateOption(state))
|
|
121645
|
+
.click();
|
|
121646
|
+
}
|
|
121647
|
+
else {
|
|
121648
|
+
await this.page
|
|
121649
|
+
.getByRole("menuitem", { name: action?.actionButtonText })
|
|
121650
|
+
.click();
|
|
121651
|
+
await this.page
|
|
121652
|
+
.getByRole("menuitem", { name: action?.valueButtonText })
|
|
121653
|
+
.click();
|
|
121654
|
+
}
|
|
121655
|
+
await this.page
|
|
121656
|
+
.getByTestId(COMMON_SELECTORS.alertModalSubmitButton)
|
|
121657
|
+
.click();
|
|
121658
|
+
await this.neetoPlaywrightUtilities.verifyToast();
|
|
121659
|
+
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
121660
|
+
};
|
|
121495
121661
|
}
|
|
121496
121662
|
|
|
121497
121663
|
dayjs.extend(customParseFormat);
|
|
@@ -121590,7 +121756,6 @@ class ApiKeysPageV2 extends ApiKeysPage {
|
|
|
121590
121756
|
fillApiKeyDetails = async ({ label, expiryDate }) => {
|
|
121591
121757
|
const dialog = this.page.getByRole("dialog");
|
|
121592
121758
|
await this.page
|
|
121593
|
-
.getByTestId(COMMON_SELECTORS.paneBody)
|
|
121594
121759
|
.getByTestId(COMMON_SELECTORS.customInputField("name"))
|
|
121595
121760
|
.fill(label);
|
|
121596
121761
|
isPresent(expiryDate) && (await this.enableExpiryDate(expiryDate));
|
|
@@ -126946,11 +127111,11 @@ const definePlaywrightConfig = (overrides) => {
|
|
|
126946
127111
|
...globalOverrides,
|
|
126947
127112
|
use: {
|
|
126948
127113
|
baseURL: process.env.BASE_URL,
|
|
126949
|
-
trace: "on",
|
|
127114
|
+
trace: { mode: "on", attachments: false },
|
|
126950
127115
|
screenshot: "only-on-failure",
|
|
126951
127116
|
navigationTimeout: 35_000,
|
|
126952
127117
|
actionTimeout: 10 * 1000,
|
|
126953
|
-
timezoneId:
|
|
127118
|
+
timezoneId: DEFAULT_TIMEZONE_ID,
|
|
126954
127119
|
geolocation: { latitude: 18.553187, longitude: 73.948313 }, // BB Pune office
|
|
126955
127120
|
permissions: ["geolocation"],
|
|
126956
127121
|
...useOverrides,
|
|
@@ -127101,4 +127266,4 @@ class InboundEmailApis {
|
|
|
127101
127266
|
};
|
|
127102
127267
|
}
|
|
127103
127268
|
|
|
127104
|
-
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_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_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, RolesPageV2, 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, 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, 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 };
|
|
127269
|
+
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_ENV, IS_MAILPIT_ENABLED, IS_SHADCN_UI, 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, RolesPageV2, 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, 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, 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
|
+
"version": "4.6.1",
|
|
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",
|