diff --git a/README.md b/README.md index 1b29064..da85fd4 100644 --- a/README.md +++ b/README.md @@ -67,16 +67,16 @@ errores de consola y confirma que el calendario, el modal de cita y el cambio de Todas usan la contraseña **`demo1234`**. -| Rol | Email | Nombre | -|----------|----------------------------------|------------------| -| **Admin**| `admin@agendapro.demo` | Administrador | -| Dueño | `owner@agendapro.demo` | Daniela Reyes | -| Empleado | `valentina.cruz@lumiere.mx` | Valentina Cruz | -| Empleado | `mateo.herrera@lumiere.mx` | Mateo Herrera | -| Empleado | `sofia.ramirez@lumiere.mx` | Sofía Ramírez | -| Empleado | `diego.castillo@lumiere.mx` | Diego Castillo | -| Empleado | `isabela.torres@lumiere.mx` | Isabela Torres | -| Empleado | `carolina.mendez@lumiere.mx` | Carolina Méndez | +| Rol | Email | Contraseña | Nombre | +|----------|----------------------------------|------------|------------------| +| **Admin**| `admin@agendamax.demo` | `demo1234` | Administrador | +| Dueño | `owner@agendamax.demo` | `demo1234` | Daniela Reyes | +| Empleado | `valentina.cruz@lumiere.mx` | `demo1234` | Valentina Cruz | +| Empleado | `mateo.herrera@lumiere.mx` | `demo1234` | Mateo Herrera | +| Empleado | `sofia.ramirez@lumiere.mx` | `demo1234` | Sofía Ramírez | +| Empleado | `diego.castillo@lumiere.mx` | `demo1234` | Diego Castillo | +| Empleado | `isabela.torres@lumiere.mx` | `demo1234` | Isabela Torres | +| Empleado | `carolina.mendez@lumiere.mx` | `demo1234` | Carolina Méndez | > En la pantalla de login aparecen botones de acceso rápido a las cuentas demo, > y desde la barra lateral puedes cambiar de cuenta con **“Ver como…”**. diff --git a/admin-test.mjs b/admin-test.mjs index 5df684b..b8eea90 100644 --- a/admin-test.mjs +++ b/admin-test.mjs @@ -14,7 +14,7 @@ function check(name, cond, extra = "") { } // Admin login -const { json: aLogin } = await req("POST", "/auth/login", { email: "admin@agendapro.demo", password: "demo1234" }); +const { json: aLogin } = await req("POST", "/auth/login", { email: "admin@agendamax.demo", password: "demo1234" }); check("admin login", aLogin.user?.role === "admin" && aLogin.token, JSON.stringify(aLogin).slice(0, 100)); const A = aLogin.token; @@ -54,7 +54,7 @@ const { json: oBiz } = await req("GET", "/business", null, OT); check("new owner business name", oBiz.business?.name === "Barbería Test"); // Owner1 still sees only Lumière (isolation the other way) -const { json: owner1 } = await req("POST", "/auth/login", { email: "owner@agendapro.demo", password: "demo1234" }); +const { json: owner1 } = await req("POST", "/auth/login", { email: "owner@agendamax.demo", password: "demo1234" }); const { json: o1Emps } = await req("GET", "/employees", null, owner1.token); check("owner1 isolation: still 6 employees", o1Emps.employees?.length === 6, `got ${o1Emps.employees?.length}`); diff --git a/docs/superpowers/plans/2026-07-26-auto-assign-specialist-booking-redesign.md b/docs/superpowers/plans/2026-07-26-auto-assign-specialist-booking-redesign.md index 2ffe265..13f82be 100644 --- a/docs/superpowers/plans/2026-07-26-auto-assign-specialist-booking-redesign.md +++ b/docs/superpowers/plans/2026-07-26-auto-assign-specialist-booking-redesign.md @@ -1113,7 +1113,7 @@ function check(name, cond, extra = "") { else { fail++; console.log(` \u2717 ${name} ${extra}`); } } -const { json: login } = await req("POST", "/auth/login", { email: "owner@agendapro.demo", password: "demo1234" }); +const { json: login } = await req("POST", "/auth/login", { email: "owner@agendamax.demo", password: "demo1234" }); const t = login.token; check("login owner", !!t); diff --git a/e2e-full.mjs b/e2e-full.mjs index 35a8c0f..a834623 100644 --- a/e2e-full.mjs +++ b/e2e-full.mjs @@ -24,13 +24,13 @@ console.log("\n=== HEALTH & AUTH ==="); const h = await req("/api/health"); check("health", h.json?.ok === true); const me = await req("/api/auth/demo-users"); check("demo-users >= 8", me.json.users.length >= 8); -const owner = await login("owner@agendapro.demo"); check("owner login", !!owner.token && owner.user.role === "owner"); +const owner = await login("owner@agendamax.demo"); check("owner login", !!owner.token && owner.user.role === "owner"); const empLogin = await login("valentina.cruz@lumiere.mx"); check("employee login", empLogin.user.role === "employee" && empLogin.user.employee_id); -const adminLogin = await login("admin@agendapro.demo"); check("admin login", adminLogin.user.role === "admin"); +const adminLogin = await login("admin@agendamax.demo"); check("admin login", adminLogin.user.role === "admin"); const t = owner.token, eT = empLogin.token, aT = adminLogin.token; // /me fix -const meR = await req("/api/auth/me", { headers: H(t) }); check("/me returns owner", meR.json.user.email === "owner@agendapro.demo"); +const meR = await req("/api/auth/me", { headers: H(t) }); check("/me returns owner", meR.json.user.email === "owner@agendamax.demo"); console.log("\n=== EXISTING: business / employees / services / clients / appointments / dashboard ==="); const biz = await req("/api/business", { headers: H(t) }); check("business loaded", biz.json.business?.name === "Lumière Estética & Spa"); @@ -211,4 +211,4 @@ if (fail) { failures.forEach((f) => console.log(" •", f)); process.exit(1); } -process.exit(0); \ No newline at end of file +process.exit(0); diff --git a/e2e-test.mjs b/e2e-test.mjs index e728b68..2bfe7e9 100644 --- a/e2e-test.mjs +++ b/e2e-test.mjs @@ -27,11 +27,11 @@ async function findSlot(slug, serviceId, maxDays = 30) { } // /me now works (the bug we fixed) — login first to get a real token -const { json: login } = await req("POST", "/auth/login", { email: "owner@agendapro.demo", password: "demo1234" }); +const { json: login } = await req("POST", "/auth/login", { email: "owner@agendamax.demo", password: "demo1234" }); check("login owner", !!login.token && login.user?.role === "owner", JSON.stringify(login).slice(0, 100)); const t = login.token; const { json: me } = await req("GET", "/auth/me", null, t); -check("/api/auth/me returns user", me.user?.email === "owner@agendapro.demo", JSON.stringify(me).slice(0, 100)); +check("/api/auth/me returns user", me.user?.email === "owner@agendamax.demo", JSON.stringify(me).slice(0, 100)); // Slug del negocio (para consultar slots públicos) const { json: settings } = await req("GET", "/settings", null, t); diff --git a/server/index.ts b/server/index.ts index af79d7f..b9cdb26 100644 --- a/server/index.ts +++ b/server/index.ts @@ -38,7 +38,7 @@ function ensureSeed() { seedBusiness({ businessId: biz.id, template: getTemplate(DEFAULT_TEMPLATE_KEY)!, - ownerEmail: "owner@agendapro.demo", + ownerEmail: "owner@agendamax.demo", ownerName: "Daniela Reyes", }); } diff --git a/server/scripts/booking-e2e.mjs b/server/scripts/booking-e2e.mjs index d57349d..6740dec 100644 --- a/server/scripts/booking-e2e.mjs +++ b/server/scripts/booking-e2e.mjs @@ -14,7 +14,7 @@ function check(name, cond, extra = "") { else { fail++; console.log(` \u2717 ${name} ${extra}`); } } -const { json: login } = await req("POST", "/auth/login", { email: "owner@agendapro.demo", password: "demo1234" }); +const { json: login } = await req("POST", "/auth/login", { email: "owner@agendamax.demo", password: "demo1234" }); const t = login.token; check("login owner", !!t); diff --git a/server/scripts/seed.ts b/server/scripts/seed.ts index a301f08..f637a97 100644 --- a/server/scripts/seed.ts +++ b/server/scripts/seed.ts @@ -317,7 +317,7 @@ export function ensurePlatformAdmin() { if (exists) return; db.prepare( `INSERT INTO users (business_id, email, password, name, role, avatar_color) - VALUES (NULL, 'admin@agendapro.demo', 'demo1234', 'Administrador', 'admin', '#0f172a')` + VALUES (NULL, 'admin@agendamax.demo', 'demo1234', 'Administrador', 'admin', '#0f172a')` ).run(); } @@ -330,7 +330,7 @@ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) biz = db .prepare(`INSERT INTO businesses (name, industry, currency, currency_symbol, phone, address, plan, status) VALUES (?, ?, ?, ?, ?, ?, 'trial', 'active') RETURNING id`) .get("Lumière Estética & Spa", "Estética y Spa", "MXN", "$", "+52 55 1234 5678", "Av. Reforma 245, CDMX") as { id: number }; - seedBusiness({ businessId: biz.id, template: getTemplate(DEFAULT_TEMPLATE_KEY)!, ownerEmail: "owner@agendapro.demo", ownerName: "Daniela Reyes" }); + seedBusiness({ businessId: biz.id, template: getTemplate(DEFAULT_TEMPLATE_KEY)!, ownerEmail: "owner@agendamax.demo", ownerName: "Daniela Reyes" }); console.log(`[seed] Created default business #${biz.id} with estetica-spa template + admin user.`); } else { console.log(`[seed] Default business #${biz.id} already exists — data preserved.`); diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx index d22fe8b..549a9d2 100644 --- a/src/pages/LoginPage.tsx +++ b/src/pages/LoginPage.tsx @@ -10,7 +10,7 @@ const DEMO = import.meta.env.DEV || import.meta.env.VITE_DEMO_UI === "1"; export function LoginPage() { const { login, user } = useAuth(); const navigate = useNavigate(); - const [email, setEmail] = useState(DEMO ? "owner@agendapro.demo" : ""); + const [email, setEmail] = useState(DEMO ? "owner@agendamax.demo" : ""); const [password, setPassword] = useState(DEMO ? "demo1234" : ""); const [error, setError] = useState(null); const [loading, setLoading] = useState(false); diff --git a/visual-audit.mjs b/visual-audit.mjs index a52fe18..ea1f5ff 100644 --- a/visual-audit.mjs +++ b/visual-audit.mjs @@ -43,9 +43,9 @@ async function login(browser, viewport, role) { await page.waitForTimeout(400); const email = role === "admin" - ? "admin@agendapro.demo" + ? "admin@agendamax.demo" : role === "owner" - ? "owner@agendapro.demo" + ? "owner@agendamax.demo" : "valentina.cruz@lumiere.mx"; // Fill the login form await page.fill('input[type="email"]', email);