You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.8 KiB

import { afterEach, describe, expect, it } from "vitest";
import {
getFlockLoginUrl,
hasFlockLoginCredentials,
isFlockFreshSessionPerQuote,
isFlockRandomAccountPerQuote,
shouldSaveFlockStorageState,
} from "@/lib/flock/env";
import {
flockLoginRegistrationBlockedMessage,
isFlockLoginPage,
resetFlockLoginSessionFlagForTests,
} from "@/workers/rpa/flock/login";
import { shouldRotateFlockSession } from "@/workers/rpa/flock/worker-session";
describe("Flock login credentials env", () => {
const prev = {
email: process.env.FLOCK_LOGIN_EMAIL,
password: process.env.FLOCK_LOGIN_PASSWORD,
fresh: process.env.FLOCK_FRESH_SESSION_PER_QUOTE,
random: process.env.FLOCK_RANDOM_ACCOUNT_PER_QUOTE,
loginUrl: process.env.FLOCK_LOGIN_URL,
};
afterEach(() => {
process.env.FLOCK_LOGIN_EMAIL = prev.email;
process.env.FLOCK_LOGIN_PASSWORD = prev.password;
process.env.FLOCK_FRESH_SESSION_PER_QUOTE = prev.fresh;
process.env.FLOCK_RANDOM_ACCOUNT_PER_QUOTE = prev.random;
process.env.FLOCK_LOGIN_URL = prev.loginUrl;
});
it("无凭据时 hasCredentials=false", () => {
delete process.env.FLOCK_LOGIN_EMAIL;
delete process.env.FLOCK_LOGIN_PASSWORD;
expect(hasFlockLoginCredentials()).toBe(false);
});
it("成对凭据时开启登录门禁并关闭 fresh/random", () => {
process.env.FLOCK_LOGIN_EMAIL = "user@example.com";
process.env.FLOCK_LOGIN_PASSWORD = "secret";
process.env.FLOCK_FRESH_SESSION_PER_QUOTE = "true";
process.env.FLOCK_RANDOM_ACCOUNT_PER_QUOTE = "true";
expect(hasFlockLoginCredentials()).toBe(true);
expect(isFlockFreshSessionPerQuote()).toBe(false);
expect(isFlockRandomAccountPerQuote()).toBe(false);
expect(shouldSaveFlockStorageState()).toBe(true);
});
it("默认登录 URL", () => {
delete process.env.FLOCK_LOGIN_URL;
expect(getFlockLoginUrl()).toContain("flockfreight.com/login");
});
});
describe("isFlockLoginPage", () => {
it("识别 login URL", () => {
expect(
isFlockLoginPage({
url: () => "https://app.flockfreight.com/login",
} as never),
).toBe(true);
expect(
isFlockLoginPage({
url: () => "https://app.flockfreight.com/get-a-quote",
} as never),
).toBe(false);
});
});
describe("login mode session rotation", () => {
afterEach(() => {
delete process.env.FLOCK_LOGIN_EMAIL;
delete process.env.FLOCK_LOGIN_PASSWORD;
resetFlockLoginSessionFlagForTests();
});
it("有登录凭据时禁止换号", () => {
process.env.FLOCK_LOGIN_EMAIL = "a@b.com";
process.env.FLOCK_LOGIN_PASSWORD = "x";
expect(
shouldRotateFlockSession(
"FLOCK_ACCOUNT_REJECTED: We had an issue creating your account",
),
).toBe(false);
});
it("注册页阻断文案", () => {
expect(flockLoginRegistrationBlockedMessage()).toContain("登录凭据");
});
});