@bigbinary/neeto-playwright-commons 1.26.12 → 1.26.14
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.cjs.js +150 -76
- package/index.cjs.js.map +1 -1
- package/index.d.ts +77 -23
- package/index.js +149 -78
- package/index.js.map +1 -1
- package/package.json +1 -1
package/index.cjs.js
CHANGED
|
@@ -306,14 +306,18 @@ const ENVIRONMENT = {
|
|
|
306
306
|
review: "review",
|
|
307
307
|
};
|
|
308
308
|
const EXAMPLE_URL = "https://example.com";
|
|
309
|
-
const IS_STAGING_ENV = process.env.TEST_ENV ===
|
|
309
|
+
const IS_STAGING_ENV = process.env.TEST_ENV === ENVIRONMENT.staging;
|
|
310
|
+
const IS_DEV_ENV = process.env.TEST_ENV === ENVIRONMENT.development;
|
|
310
311
|
const STORAGE_STATE = "./e2e/auth/user.json";
|
|
311
312
|
const GLOBAL_TRANSLATIONS_PATTERN = "../node_modules/@bigbinary/**/translations/en.json";
|
|
312
313
|
const PROJECT_TRANSLATIONS_PATH = "../app/javascript/src/translations/en.json";
|
|
313
314
|
const CREDENTIALS = {
|
|
315
|
+
firstName: "Oliver",
|
|
316
|
+
lastName: "Smith",
|
|
314
317
|
name: "Oliver Smith",
|
|
315
318
|
email: "oliver@example.com",
|
|
316
319
|
password: "welcome",
|
|
320
|
+
subdomainName: "spinkart",
|
|
317
321
|
};
|
|
318
322
|
const OTP_EMAIL_PATTERN = "is your login code";
|
|
319
323
|
const SLACK_DEFAULT_CHANNEL = "general";
|
|
@@ -4850,23 +4854,26 @@ const generateStagingData = (product = "invoice") => {
|
|
|
4850
4854
|
const timestamp = jobCompletionIndex
|
|
4851
4855
|
? `${dateTimeString}-${jobCompletionIndex}`
|
|
4852
4856
|
: dateTimeString;
|
|
4853
|
-
const firstName = "André";
|
|
4854
|
-
const lastName = "O'Reilly";
|
|
4857
|
+
const firstName = IS_STAGING_ENV ? "André" : CREDENTIALS.firstName;
|
|
4858
|
+
const lastName = IS_STAGING_ENV ? "O'Reilly" : CREDENTIALS.lastName;
|
|
4855
4859
|
const otpBypassKey = process.env.OTP_BYPASS_KEY;
|
|
4856
|
-
const
|
|
4860
|
+
const isGlobalSetup = !getGlobalUserState(); // For dev global setup staging data, we use the default subdomain `spinkart`.
|
|
4861
|
+
const shouldKeepDefaultDataForDevEnv = isGlobalSetup && IS_DEV_ENV;
|
|
4862
|
+
const stagingOrganization = shouldKeepDefaultDataForDevEnv
|
|
4863
|
+
? CREDENTIALS.subdomainName
|
|
4864
|
+
: `cpt-${product}-${timestamp}`;
|
|
4865
|
+
const email = shouldKeepDefaultDataForDevEnv
|
|
4866
|
+
? CREDENTIALS.email
|
|
4867
|
+
: `cpt${otpBypassKey}+${product}+${timestamp}@bigbinary.com`;
|
|
4857
4868
|
return {
|
|
4858
4869
|
firstName,
|
|
4859
4870
|
lastName,
|
|
4860
4871
|
otp: 111111,
|
|
4861
|
-
domain: `neeto${product}.net`,
|
|
4862
|
-
currentUserName:
|
|
4863
|
-
? joinString(firstName, lastName)
|
|
4864
|
-
: CREDENTIALS.name,
|
|
4872
|
+
domain: IS_STAGING_ENV ? `neeto${product}.net` : `lvh.me`,
|
|
4873
|
+
currentUserName: joinString(firstName, lastName),
|
|
4865
4874
|
businessName: stagingOrganization,
|
|
4866
|
-
subdomainName:
|
|
4867
|
-
email
|
|
4868
|
-
? `cpt${otpBypassKey}+${product}+${timestamp}@bigbinary.com`
|
|
4869
|
-
: CREDENTIALS.email,
|
|
4875
|
+
subdomainName: stagingOrganization,
|
|
4876
|
+
email,
|
|
4870
4877
|
};
|
|
4871
4878
|
};
|
|
4872
4879
|
|
|
@@ -4907,7 +4914,7 @@ const removeCredentialFile = () => {
|
|
|
4907
4914
|
require$$0__namespace.unlink(STORAGE_STATE, error => {
|
|
4908
4915
|
if (!error)
|
|
4909
4916
|
return;
|
|
4910
|
-
console.
|
|
4917
|
+
console.log(error);
|
|
4911
4918
|
});
|
|
4912
4919
|
};
|
|
4913
4920
|
const clearCredentials = () => {
|
|
@@ -4956,7 +4963,12 @@ const shouldSkipSetupAndTeardown = () => { var _a; return ((_a = getGlobalUserSt
|
|
|
4956
4963
|
const shouldSkipCustomDomainSetup = () => process.env.SETUP_CUSTOM_DOMAIN !== "true" || !IS_STAGING_ENV;
|
|
4957
4964
|
const baseURLGenerator = (product, customSubdomain) => {
|
|
4958
4965
|
const { subdomainName } = getGlobalUserState();
|
|
4959
|
-
|
|
4966
|
+
const subdomain = customSubdomain !== null && customSubdomain !== void 0 ? customSubdomain : subdomainName;
|
|
4967
|
+
const railsPort = process.env.RAILS_SERVER_PORT;
|
|
4968
|
+
const baseURL = IS_DEV_ENV
|
|
4969
|
+
? `http://${subdomain}.lvh.me:${railsPort}`
|
|
4970
|
+
: `https://${subdomain}.neeto${product.toLowerCase()}.net`;
|
|
4971
|
+
return baseURL;
|
|
4960
4972
|
};
|
|
4961
4973
|
// trims and replaces multiple whitespace characters in a string with a single space
|
|
4962
4974
|
const squish = (text) => text.trim().replace(/\s+/g, " ");
|
|
@@ -5036,7 +5048,7 @@ const globalShortcuts = (t) => [
|
|
|
5036
5048
|
const generatePhoneNumber = () => `${"+91"} 9${faker.faker.string.numeric(4)} ${faker.faker.string.numeric(5)}`;
|
|
5037
5049
|
const initializeTestData = (product) => {
|
|
5038
5050
|
const credentials = generateStagingData(product.toLowerCase());
|
|
5039
|
-
const baseURL =
|
|
5051
|
+
const baseURL = baseURLGenerator(product, credentials.subdomainName);
|
|
5040
5052
|
return { credentials, baseURL };
|
|
5041
5053
|
};
|
|
5042
5054
|
|
|
@@ -116448,11 +116460,8 @@ class GooglePage extends IntegrationBase {
|
|
|
116448
116460
|
.getByRole("link", { name: GOOGLE_LOGIN_TEXTS.neetoAutomation })
|
|
116449
116461
|
.click();
|
|
116450
116462
|
await test.expect(chooseAnAccountHeading).toBeHidden({ timeout: 10000 });
|
|
116451
|
-
const verificationCode = this.page
|
|
116452
|
-
.locator("form")
|
|
116453
|
-
.getByText(GOOGLE_LOGIN_TEXTS.verificationCode);
|
|
116454
116463
|
this.page.url().includes(THIRD_PARTY_ROUTES.google.totpChallenge) &&
|
|
116455
|
-
(await this.enterTotpCode(
|
|
116464
|
+
(await this.enterTotpCode());
|
|
116456
116465
|
await this.handleNotVerifiedPage();
|
|
116457
116466
|
const signInHeading = this.page.getByRole("heading", {
|
|
116458
116467
|
name: GOOGLE_LOGIN_TEXTS.signInHeading(appName),
|
|
@@ -116491,32 +116500,29 @@ class GooglePage extends IntegrationBase {
|
|
|
116491
116500
|
.click());
|
|
116492
116501
|
await this.page.waitForLoadState("load", { timeout: 25000 });
|
|
116493
116502
|
await this.page.waitForURL(new RegExp(THIRD_PARTY_ROUTES.google.totpChallenge));
|
|
116494
|
-
|
|
116495
|
-
name: GOOGLE_LOGIN_TEXTS.twoStepVerification,
|
|
116496
|
-
level: 2,
|
|
116497
|
-
exact: true,
|
|
116498
|
-
});
|
|
116499
|
-
await test.expect(twoStepVerification).toBeVisible({ timeout: 15000 });
|
|
116500
|
-
await this.enterTotpCode(twoStepVerification);
|
|
116503
|
+
await this.enterTotpCode();
|
|
116501
116504
|
await this.page.waitForLoadState("load", { timeout: 25000 });
|
|
116502
116505
|
await this.page.waitForURL(new RegExp(THIRD_PARTY_ROUTES.google.myAccount));
|
|
116503
116506
|
};
|
|
116504
|
-
this.enterTotpCode = async (
|
|
116507
|
+
this.enterTotpCode = async () => {
|
|
116505
116508
|
let previousToken = null;
|
|
116509
|
+
const codeInput = this.page.getByLabel(GOOGLE_LOGIN_TEXTS.enterCode);
|
|
116510
|
+
await test.expect(codeInput).toBeVisible({ timeout: 20000 });
|
|
116506
116511
|
await test.expect(async () => {
|
|
116507
116512
|
let totpToken = this.totp.generate({ timestamp: Date.now() });
|
|
116508
116513
|
if (totpToken === previousToken) {
|
|
116509
116514
|
const remainingTime = this.totp.remaining({ timestamp: Date.now() });
|
|
116515
|
+
// Wait for the remaining time plus a small buffer to ensure new token is generated
|
|
116510
116516
|
// eslint-disable-next-line playwright/no-wait-for-timeout
|
|
116511
|
-
await this.page.waitForTimeout(remainingTime + 500);
|
|
116517
|
+
await this.page.waitForTimeout(remainingTime + 500);
|
|
116512
116518
|
totpToken = this.totp.generate({ timestamp: Date.now() });
|
|
116513
116519
|
}
|
|
116514
116520
|
previousToken = totpToken;
|
|
116515
|
-
await
|
|
116521
|
+
await codeInput.fill(totpToken);
|
|
116516
116522
|
test.expect(this.totp.validate({ token: totpToken })).not.toBeNull();
|
|
116517
116523
|
await this.page.locator(GOOGLE_LOGIN_SELECTORS.totpNext).click();
|
|
116518
116524
|
await test.expect(this.page.getByText(GOOGLE_LOGIN_TEXTS.wrongCode)).toBeHidden({ timeout: 10000 });
|
|
116519
|
-
await test.expect(
|
|
116525
|
+
await test.expect(codeInput).toBeHidden({ timeout: 15000 });
|
|
116520
116526
|
}).toPass({ timeout: 2 * 60 * 1000 });
|
|
116521
116527
|
};
|
|
116522
116528
|
this.logoutFromGoogle = async () => {
|
|
@@ -116678,7 +116684,7 @@ class MicrosoftPage extends IntegrationBase {
|
|
|
116678
116684
|
const acceptBtn = this.page.locator(MICROSOFT_LOGIN_SELECTORS.acceptButton);
|
|
116679
116685
|
await acceptBtn.click();
|
|
116680
116686
|
await test.expect(acceptBtn).toBeHidden({ timeout: 10000 });
|
|
116681
|
-
await this.page.waitForLoadState("load", { timeout:
|
|
116687
|
+
await this.page.waitForLoadState("load", { timeout: 50000 });
|
|
116682
116688
|
};
|
|
116683
116689
|
this.revokePermissions = async () => {
|
|
116684
116690
|
await this.page.goto(THIRD_PARTY_ROUTES.microsoft.myApps);
|
|
@@ -118505,30 +118511,30 @@ class TeamMembers {
|
|
|
118505
118511
|
}
|
|
118506
118512
|
}
|
|
118507
118513
|
|
|
118508
|
-
const
|
|
118509
|
-
|
|
118510
|
-
neetoPlaywrightUtilities, loginPath = "/", }) => {
|
|
118511
|
-
if (shouldSkipSetupAndTeardown())
|
|
118512
|
-
return;
|
|
118513
|
-
await page.goto(loginPath, { timeout: 20000 });
|
|
118514
|
+
const fillCredentialsAndSubmit = async ({ page, loginPath = "/", email = CREDENTIALS.email, }) => {
|
|
118515
|
+
await page.goto(loginPath, { timeout: 30000 });
|
|
118514
118516
|
await page.waitForLoadState("load", { timeout: 35000 });
|
|
118515
|
-
await page
|
|
118516
|
-
.getByTestId(LOGIN_SELECTORS.emailTextField)
|
|
118517
|
-
.fill(CREDENTIALS.email);
|
|
118517
|
+
await page.getByTestId(LOGIN_SELECTORS.emailTextField).fill(email);
|
|
118518
118518
|
await page
|
|
118519
118519
|
.getByTestId(LOGIN_SELECTORS.passwordTextField)
|
|
118520
118520
|
.fill(CREDENTIALS.password);
|
|
118521
118521
|
const submitButton = page.getByTestId(LOGIN_SELECTORS.submitButton);
|
|
118522
118522
|
await submitButton.click();
|
|
118523
118523
|
await test.expect(submitButton).toBeHidden({ timeout: 15000 });
|
|
118524
|
+
await test.expect(page.getByTestId(COMMON_SELECTORS.floatingActionMenuButton)).toBeVisible({ timeout: 60000 });
|
|
118525
|
+
};
|
|
118526
|
+
const loginWithoutSSO = async ({ page, loginPath = "/", email = CREDENTIALS.email, }) => {
|
|
118527
|
+
if (shouldSkipSetupAndTeardown())
|
|
118528
|
+
return;
|
|
118529
|
+
await fillCredentialsAndSubmit({ page, loginPath, email });
|
|
118524
118530
|
const userCredentials = readFileSyncIfExists();
|
|
118525
118531
|
await page.context().storageState({ path: STORAGE_STATE });
|
|
118526
118532
|
const mergedCredentials = ramda.mergeAll([readFileSyncIfExists(), userCredentials]);
|
|
118527
118533
|
writeDataToFile(JSON.stringify(mergedCredentials, null, 2));
|
|
118528
118534
|
updateCredentials({ key: "isLoggedIn", value: "true" });
|
|
118529
118535
|
};
|
|
118530
|
-
const login = async ({ page, neetoPlaywrightUtilities, loginPath, }) =>
|
|
118531
|
-
(await loginWithoutSSO({ page,
|
|
118536
|
+
const login = async ({ page, neetoPlaywrightUtilities, loginPath, email, }) => IS_DEV_ENV &&
|
|
118537
|
+
(await loginWithoutSSO({ page, loginPath, email }));
|
|
118532
118538
|
const generateRandomBypassEmail = () => `cpt${process.env.OTP_BYPASS_KEY}+${faker.faker.number.int()}@bigbinary.com`;
|
|
118533
118539
|
|
|
118534
118540
|
const extractSubdomainFromError = (errorString) => {
|
|
@@ -118536,13 +118542,43 @@ const extractSubdomainFromError = (errorString) => {
|
|
|
118536
118542
|
const matches = errorString.match(regex);
|
|
118537
118543
|
return matches[1];
|
|
118538
118544
|
};
|
|
118545
|
+
const createOrganizationViaRake = async ({ email, firstName, lastName, subdomainName, }) => {
|
|
118546
|
+
var _a, _b;
|
|
118547
|
+
const workingDirectory = process.env.RAILS_ROOT || "..";
|
|
118548
|
+
const rakeTaskName = "playwright:create_organization";
|
|
118549
|
+
const childProcess = child_process.spawn("bundle", [
|
|
118550
|
+
"exec",
|
|
118551
|
+
"rake",
|
|
118552
|
+
rakeTaskName,
|
|
118553
|
+
"--",
|
|
118554
|
+
`--first_name=${firstName}`,
|
|
118555
|
+
`--last_name=${lastName}`,
|
|
118556
|
+
`--email=${email}`,
|
|
118557
|
+
`--subdomain=${subdomainName}`,
|
|
118558
|
+
], {
|
|
118559
|
+
cwd: workingDirectory,
|
|
118560
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
118561
|
+
});
|
|
118562
|
+
let stdout = "";
|
|
118563
|
+
let stderr = "";
|
|
118564
|
+
(_a = childProcess.stdout) === null || _a === void 0 ? void 0 : _a.on("data", data => {
|
|
118565
|
+
stdout += data.toString("utf-8");
|
|
118566
|
+
});
|
|
118567
|
+
(_b = childProcess.stderr) === null || _b === void 0 ? void 0 : _b.on("data", data => {
|
|
118568
|
+
stderr += data.toString("utf-8");
|
|
118569
|
+
});
|
|
118570
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
118571
|
+
childProcess.on("error", reject);
|
|
118572
|
+
childProcess.on("close", resolve);
|
|
118573
|
+
});
|
|
118574
|
+
if (exitCode !== 0) {
|
|
118575
|
+
throw new Error(`Failed to create organization: ${stderr || stdout || `Exit code ${exitCode}`}`);
|
|
118576
|
+
}
|
|
118577
|
+
return stdout.trim();
|
|
118578
|
+
};
|
|
118539
118579
|
|
|
118540
118580
|
class OrganizationPage {
|
|
118541
118581
|
constructor(page, neetoPlaywrightUtilities) {
|
|
118542
|
-
this.baseUrlGenerator = (appName) => {
|
|
118543
|
-
const { subdomainName } = getGlobalUserState();
|
|
118544
|
-
return `https://${subdomainName}.${appName}.net`;
|
|
118545
|
-
};
|
|
118546
118582
|
this.fillOTP = async (otp = faker.faker.string.numeric(6)) => {
|
|
118547
118583
|
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
118548
118584
|
const otpTextBox = this.page.getByTestId(SIGNUP_SELECTORS.otpTextBox);
|
|
@@ -118557,8 +118593,17 @@ class OrganizationPage {
|
|
|
118557
118593
|
await test.expect(submitButton).toBeHidden({ timeout: 35000 });
|
|
118558
118594
|
};
|
|
118559
118595
|
this.createOrganization = async ({ email, businessName, subdomainName, firstName, lastName, appName, }) => {
|
|
118560
|
-
if (
|
|
118596
|
+
if (shouldSkipSetupAndTeardown())
|
|
118597
|
+
return;
|
|
118598
|
+
if (IS_DEV_ENV) {
|
|
118599
|
+
await createOrganizationViaRake({
|
|
118600
|
+
email,
|
|
118601
|
+
firstName,
|
|
118602
|
+
lastName,
|
|
118603
|
+
subdomainName,
|
|
118604
|
+
});
|
|
118561
118605
|
return;
|
|
118606
|
+
}
|
|
118562
118607
|
const appNameInLowerCase = appName.toLowerCase();
|
|
118563
118608
|
const isNeetoAuth = appNameInLowerCase === "neetoauth";
|
|
118564
118609
|
isNeetoAuth
|
|
@@ -118594,7 +118639,9 @@ class OrganizationPage {
|
|
|
118594
118639
|
subdomainName: user.subdomainName,
|
|
118595
118640
|
appName: `neeto${product}`,
|
|
118596
118641
|
});
|
|
118597
|
-
await
|
|
118642
|
+
await this.neetoPlaywrightUtilities.waitForPageLoad({
|
|
118643
|
+
customPageContext: this.page,
|
|
118644
|
+
});
|
|
118598
118645
|
const userCredentials = readFileSyncIfExists();
|
|
118599
118646
|
await this.page.context().storageState({ path: STORAGE_STATE });
|
|
118600
118647
|
const mergedCredentials = ramda.mergeAll([
|
|
@@ -118605,7 +118652,7 @@ class OrganizationPage {
|
|
|
118605
118652
|
updateCredentials({ key: "isLoggedIn", value: "true" });
|
|
118606
118653
|
updateCredentials({
|
|
118607
118654
|
key: "baseUrl",
|
|
118608
|
-
value:
|
|
118655
|
+
value: baseURLGenerator(product),
|
|
118609
118656
|
});
|
|
118610
118657
|
};
|
|
118611
118658
|
this.updateSubdomainIfExists = async (appName) => {
|
|
@@ -118627,7 +118674,7 @@ class OrganizationPage {
|
|
|
118627
118674
|
key: "businessName",
|
|
118628
118675
|
value: newOrganizationName,
|
|
118629
118676
|
});
|
|
118630
|
-
process.env.BASE_URL =
|
|
118677
|
+
process.env.BASE_URL = baseURLGenerator(appName);
|
|
118631
118678
|
await this.page
|
|
118632
118679
|
.getByTestId(SIGNUP_SELECTORS.organizationNameTextField)
|
|
118633
118680
|
.fill(newOrganizationName);
|
|
@@ -118658,6 +118705,8 @@ class OrganizationPage {
|
|
|
118658
118705
|
await this.fillOTP(otp);
|
|
118659
118706
|
};
|
|
118660
118707
|
this.setupProfile = async ({ firstName = faker.faker.person.firstName(), lastName = faker.faker.person.lastName(), country, } = {}) => {
|
|
118708
|
+
if (IS_DEV_ENV)
|
|
118709
|
+
return;
|
|
118661
118710
|
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
118662
118711
|
await this.page
|
|
118663
118712
|
.getByTestId(SIGNUP_SELECTORS.firstNameTextField)
|
|
@@ -118675,36 +118724,62 @@ class OrganizationPage {
|
|
|
118675
118724
|
});
|
|
118676
118725
|
};
|
|
118677
118726
|
this.loginAndOnboard = async ({ email, firstName, lastName, country, handleOnboarding, baseURL = process.env.BASE_URL, fetchOtpFromEmail, }) => {
|
|
118678
|
-
|
|
118679
|
-
|
|
118680
|
-
|
|
118681
|
-
|
|
118682
|
-
|
|
118683
|
-
|
|
118684
|
-
|
|
118685
|
-
|
|
118727
|
+
if (IS_DEV_ENV) {
|
|
118728
|
+
await fillCredentialsAndSubmit({
|
|
118729
|
+
page: this.page,
|
|
118730
|
+
email,
|
|
118731
|
+
loginPath: `${baseURL}${ROUTES.admin}`,
|
|
118732
|
+
});
|
|
118733
|
+
}
|
|
118734
|
+
else {
|
|
118735
|
+
await this.page.goto(`${baseURL}${ROUTES.admin}`, { timeout: 20000 });
|
|
118736
|
+
fetchOtpFromEmail === undefined
|
|
118737
|
+
? await this.loginViaSSO(email)
|
|
118738
|
+
: await this.loginWithFastmailEmail({ email, fetchOtpFromEmail });
|
|
118739
|
+
await this.setupProfile({ firstName, lastName, country });
|
|
118740
|
+
await this.page.waitForURL(new RegExp(getGlobalUserState().domain), {
|
|
118741
|
+
waitUntil: "load",
|
|
118742
|
+
});
|
|
118743
|
+
}
|
|
118686
118744
|
await handleOnboarding();
|
|
118687
118745
|
};
|
|
118688
118746
|
this.signUp = async ({ credentials, fetchOtpFromEmail, appName, }) => {
|
|
118689
|
-
|
|
118690
|
-
|
|
118691
|
-
|
|
118692
|
-
|
|
118693
|
-
|
|
118747
|
+
if (IS_DEV_ENV) {
|
|
118748
|
+
await createOrganizationViaRake({
|
|
118749
|
+
email: credentials.email,
|
|
118750
|
+
firstName: credentials.firstName,
|
|
118751
|
+
lastName: credentials.lastName,
|
|
118752
|
+
subdomainName: credentials.subdomainName,
|
|
118753
|
+
});
|
|
118754
|
+
await fillCredentialsAndSubmit({
|
|
118755
|
+
page: this.page,
|
|
118694
118756
|
email: credentials.email,
|
|
118695
|
-
|
|
118757
|
+
loginPath: `${baseURLGenerator(appName, credentials.subdomainName)}${ROUTES.admin}`,
|
|
118696
118758
|
});
|
|
118697
118759
|
}
|
|
118698
|
-
|
|
118699
|
-
|
|
118700
|
-
credentials
|
|
118701
|
-
|
|
118702
|
-
|
|
118703
|
-
|
|
118760
|
+
else {
|
|
118761
|
+
let otp = "123456";
|
|
118762
|
+
await this.page.goto(`${ROUTES.neetoAuthSignup}?redirect_uri=${credentials.domain}`, { timeout: 20000 });
|
|
118763
|
+
await this.submitEmail(credentials.email);
|
|
118764
|
+
if (fetchOtpFromEmail !== undefined) {
|
|
118765
|
+
otp = await fetchOtpFromEmail({
|
|
118766
|
+
email: credentials.email,
|
|
118767
|
+
timeout: 4 * 60 * 1000,
|
|
118768
|
+
});
|
|
118769
|
+
}
|
|
118770
|
+
await this.fillOTP(otp);
|
|
118771
|
+
await this.fillOrganizationDetails({
|
|
118772
|
+
credentials,
|
|
118773
|
+
appName,
|
|
118774
|
+
});
|
|
118775
|
+
await this.page.waitForURL(new RegExp(credentials.domain));
|
|
118776
|
+
}
|
|
118704
118777
|
const STORAGE_STATE = await this.page.context().storageState();
|
|
118705
118778
|
return { STORAGE_STATE, baseURL: process.env.BASE_URL };
|
|
118706
118779
|
};
|
|
118707
118780
|
this.fillOrganizationDetails = async ({ credentials, appName, }) => {
|
|
118781
|
+
if (IS_DEV_ENV)
|
|
118782
|
+
return;
|
|
118708
118783
|
const subdomainError = this.page.getByTestId(SIGNUP_SELECTORS.subdomainError);
|
|
118709
118784
|
const organizationSubmitButton = this.page.getByTestId(SIGNUP_SELECTORS.organizationSubmitButton);
|
|
118710
118785
|
await this.neetoPlaywrightUtilities.waitForPageLoad();
|
|
@@ -119683,10 +119758,7 @@ const initializeCredentials = (product) => {
|
|
|
119683
119758
|
}
|
|
119684
119759
|
const stagingData = generateStagingData(product);
|
|
119685
119760
|
writeDataToFile(JSON.stringify({ user: stagingData }, null, 2));
|
|
119686
|
-
|
|
119687
|
-
const baseUrl = `https://${stagingData.subdomainName}.${stagingData.domain}`;
|
|
119688
|
-
process.env.BASE_URL = baseUrl;
|
|
119689
|
-
}
|
|
119761
|
+
process.env.BASE_URL = baseURLGenerator(product, stagingData.subdomainName);
|
|
119690
119762
|
};
|
|
119691
119763
|
|
|
119692
119764
|
const assertColumnHeaderVisibility = async ({ page, columnName, shouldBeVisible, }) => {
|
|
@@ -124629,7 +124701,6 @@ const playdashLighthouseConfig = {
|
|
|
124629
124701
|
tags: process.env.TAG,
|
|
124630
124702
|
};
|
|
124631
124703
|
const isCI = neetoCist.isPresent(process.env.NEETO_CI_JOB_ID);
|
|
124632
|
-
const isDevEnv = process.env.TEST_ENV === ENVIRONMENT.development;
|
|
124633
124704
|
const railsPort = process.env.RAILS_SERVER_PORT;
|
|
124634
124705
|
const vitePort = process.env.VITE_PORT;
|
|
124635
124706
|
const definePlaywrightConfig = (overrides) => {
|
|
@@ -124672,7 +124743,7 @@ const definePlaywrightConfig = (overrides) => {
|
|
|
124672
124743
|
timeout: 5 * 60 * 1000,
|
|
124673
124744
|
workers: isCI ? 6 : 5,
|
|
124674
124745
|
reporter: isCI ? reporter : [["line"]],
|
|
124675
|
-
...(
|
|
124746
|
+
...(IS_DEV_ENV && {
|
|
124676
124747
|
webServer: [
|
|
124677
124748
|
{
|
|
124678
124749
|
command: `bundle exec puma -b tcp://0.0.0.0:${railsPort} -C config/puma.rb`,
|
|
@@ -124791,6 +124862,7 @@ exports.INTEGRATIONS_TEXTS = INTEGRATIONS_TEXTS;
|
|
|
124791
124862
|
exports.INTEGRATION_SELECTORS = INTEGRATION_SELECTORS;
|
|
124792
124863
|
exports.IPRestrictionsPage = IPRestrictionsPage;
|
|
124793
124864
|
exports.IP_RESTRICTIONS_SELECTORS = IP_RESTRICTIONS_SELECTORS;
|
|
124865
|
+
exports.IS_DEV_ENV = IS_DEV_ENV;
|
|
124794
124866
|
exports.IS_STAGING_ENV = IS_STAGING_ENV;
|
|
124795
124867
|
exports.ImageUploader = ImageUploader;
|
|
124796
124868
|
exports.IntegrationBase = IntegrationBase;
|
|
@@ -124876,12 +124948,14 @@ exports.basicHTMLContent = basicHTMLContent;
|
|
|
124876
124948
|
exports.clearCredentials = clearCredentials;
|
|
124877
124949
|
exports.commands = commands;
|
|
124878
124950
|
exports.cpuThrottlingUsingCDP = cpuThrottlingUsingCDP;
|
|
124951
|
+
exports.createOrganizationViaRake = createOrganizationViaRake;
|
|
124879
124952
|
exports.currencyUtils = currencyUtils;
|
|
124880
124953
|
exports.dataQa = dataQa;
|
|
124881
124954
|
exports.decodeQRCodeFromFile = decodeQRCodeFromFile;
|
|
124882
124955
|
exports.definePlaywrightConfig = definePlaywrightConfig;
|
|
124883
124956
|
exports.executeWithThrottledResources = executeWithThrottledResources;
|
|
124884
124957
|
exports.extractSubdomainFromError = extractSubdomainFromError;
|
|
124958
|
+
exports.fillCredentialsAndSubmit = fillCredentialsAndSubmit;
|
|
124885
124959
|
exports.filterUtils = filterUtils;
|
|
124886
124960
|
exports.generatePhoneNumber = generatePhoneNumber;
|
|
124887
124961
|
exports.generatePhoneNumberDetails = generatePhoneNumberDetails;
|