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