Files
NianAIGC/tests/auth-login-panel.test.ts
T

34 lines
1.7 KiB
TypeScript

import { readFile } from "node:fs/promises";
import { join } from "node:path";
import { describe, expect, it } from "vitest";
describe("AuthLoginPanel", () => {
it("does not render captcha controls", async () => {
const source = await readFile(join(process.cwd(), "components", "auth-login-panel.tsx"), "utf8");
expect(source).not.toContain("auth-captcha-row");
expect(source).not.toContain("auth-captcha-button");
expect(source).not.toContain("/api/auth/captcha");
expect(source).not.toContain("randomStr");
});
it("uses one platform phone/password login for every role", async () => {
const panelSource = await readFile(join(process.cwd(), "components", "auth-login-panel.tsx"), "utf8");
const loginPageSource = await readFile(join(process.cwd(), "app", "auth", "login", "page.tsx"), "utf8");
const adminPageSource = await readFile(join(process.cwd(), "app", "auth", "admin-login", "page.tsx"), "utf8").catch(() => "");
expect(panelSource).toContain('phone: submittedPhone');
expect(panelSource).toContain('inputMode="tel"');
expect(panelSource).toContain('name="phone"');
expect(panelSource).toContain('name="password"');
expect(panelSource).toContain('new FormData(event.currentTarget)');
expect(panelSource).not.toContain('disabled={!configured || submitting || !phone.trim() || !password}');
expect(panelSource).not.toContain("authMode");
expect(panelSource).not.toContain("alternateHref");
expect(panelSource).toContain("window.location.assign(safeBrowserNext(result.redirectTo, next))");
expect(panelSource).not.toContain("window.location.assign(result.redirectTo");
expect(loginPageSource).not.toContain("/auth/admin-login");
expect(adminPageSource).toContain("/auth/login");
});
});