feat: add configurable user creation flow script
This commit is contained in:
parent
8a087240b9
commit
059fe05e14
1 changed files with 117 additions and 0 deletions
117
scripts/create_user_drmoralestorres.mjs
Normal file
117
scripts/create_user_drmoralestorres.mjs
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
import path from "node:path"
|
||||
import { BrowserManager } from "../dist/browser/manager.js"
|
||||
|
||||
const browser = new BrowserManager(path.resolve("./artifacts"))
|
||||
const out = {}
|
||||
|
||||
const sleep = (ms) => new Promise((r) => setTimeout(r, ms))
|
||||
|
||||
const appBaseUrl = process.env.APP_BASE_URL ?? "https://app.drmoralestorres.com"
|
||||
const loginEmail = process.env.LOGIN_EMAIL
|
||||
const loginPassword = process.env.LOGIN_PASSWORD
|
||||
const newUserName = process.env.NEW_USER_NAME ?? "Nuevo Usuario"
|
||||
const newUserEmail = process.env.NEW_USER_EMAIL
|
||||
const newUserPassword = process.env.NEW_USER_PASSWORD
|
||||
const newUserRoleValue = process.env.NEW_USER_ROLE_VALUE ?? "1"
|
||||
|
||||
if (!loginEmail || !loginPassword || !newUserEmail || !newUserPassword) {
|
||||
throw new Error(
|
||||
"Missing required env vars: LOGIN_EMAIL, LOGIN_PASSWORD, NEW_USER_EMAIL, NEW_USER_PASSWORD",
|
||||
)
|
||||
}
|
||||
|
||||
const run = async () => {
|
||||
out.open = await browser.open({
|
||||
headless: false,
|
||||
width: 1366,
|
||||
height: 900,
|
||||
browserKind: "testing",
|
||||
persistentProfile: true,
|
||||
userDataDir: "/home/pancho/.chromium-perfil-google",
|
||||
startUrl: `${appBaseUrl}/usuarios/altas`,
|
||||
recordVideo: false,
|
||||
})
|
||||
|
||||
out.start = await browser.observe().catch((e) => ({ error: e.message }))
|
||||
const currentUrl = browser.getState().currentUrl || ""
|
||||
|
||||
if (currentUrl.includes("/login")) {
|
||||
const emailExists = await browser
|
||||
.query({ selector: "input[type='email'], input[name='email'], #email", mode: "exists" })
|
||||
.catch(() => ({ result: false }))
|
||||
if (emailExists.result === true) {
|
||||
out.typeUser = await browser.type(
|
||||
"input[type='email'], input[name='email'], #email",
|
||||
loginEmail,
|
||||
true,
|
||||
12000,
|
||||
)
|
||||
out.typePass = await browser.type(
|
||||
"input[type='password'], input[name='password'], #password",
|
||||
loginPassword,
|
||||
true,
|
||||
12000,
|
||||
)
|
||||
out.submit = await browser.click(
|
||||
"button[type='submit'], button[name='login'], button#login, input[type='submit']",
|
||||
12000,
|
||||
)
|
||||
await browser.waitFor({ for: "timeout", value: "2200" })
|
||||
await browser.navigate(`${appBaseUrl}/usuarios/altas`, "domcontentloaded")
|
||||
}
|
||||
}
|
||||
|
||||
out.afterLogin = await browser.observe()
|
||||
|
||||
out.formObserve = await browser.observe()
|
||||
|
||||
out.name = await browser.type("#nombre", newUserName, true, 12000)
|
||||
out.email = await browser.type("#email", newUserEmail, true, 12000)
|
||||
out.pass = await browser.type("#password", newUserPassword, true, 12000)
|
||||
|
||||
out.role = await browser.select("#rol_id", newUserRoleValue, 12000).catch(async () => {
|
||||
const role = await browser.evaluate(
|
||||
`() => {
|
||||
const s = document.querySelector("#rol_id")
|
||||
if (!s) return { ok: false }
|
||||
const opts = Array.from(s.options || [])
|
||||
const idx = opts.findIndex((o) =>
|
||||
(o.textContent || "").toLowerCase().includes("administrador") ||
|
||||
(o.value || "").toLowerCase().includes("admin")
|
||||
)
|
||||
if (idx < 0) return { ok: false, reason: "admin_option_not_found" }
|
||||
s.selectedIndex = idx
|
||||
s.dispatchEvent(new Event("change", { bubbles: true }))
|
||||
return { ok: true, option: opts[idx].textContent, value: opts[idx].value }
|
||||
}`,
|
||||
{},
|
||||
)
|
||||
return role.result
|
||||
})
|
||||
|
||||
out.preSaveSnapshot = await browser.snapshot({ label: "usuarios-alta-before-save", fullPage: true })
|
||||
out.saveBtn = await browser.click("button.btn-primary, button[type='submit']", 12000)
|
||||
|
||||
await sleep(2800)
|
||||
out.afterSave = await browser.observe().catch((e) => ({ error: e.message }))
|
||||
out.postSaveSnapshot = await browser.snapshot({ label: "usuarios-alta-after-save", fullPage: true })
|
||||
out.close = await browser.close()
|
||||
|
||||
console.log(JSON.stringify(out, null, 2))
|
||||
}
|
||||
|
||||
run().catch(async (err) => {
|
||||
console.error("CREATE_USER_ERROR", err instanceof Error ? err.stack ?? err.message : String(err))
|
||||
try {
|
||||
const snap = await browser.snapshot({ label: "usuarios-alta-error", fullPage: true })
|
||||
console.error("ERROR_SNAPSHOT", snap.filePath)
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
await browser.close()
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
process.exit(1)
|
||||
})
|
||||
Loading…
Add table
Reference in a new issue