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.

78 lines
2.4 KiB

import { describe, expect, it } from "vitest";
import {
buildFlockAliasedEmail,
createFreshFlockTestAccount,
createRandomQqEmail,
createVerifiedQqAliasedEmail,
parseFlockEnvPool,
} from "@/lib/flock/fresh-account";
describe("parseFlockEnvPool", () => {
it("解析逗号与换行分隔", () => {
expect(parseFlockEnvPool("a@b.com, c@d.com\ne@f.com")).toEqual([
"a@b.com",
"c@d.com",
"e@f.com",
]);
});
});
describe("createRandomQqEmail", () => {
it("1/2/3 开头 + 9 位数字 @qq.com", () => {
for (let i = 0; i < 20; i += 1) {
const email = createRandomQqEmail();
expect(email).toMatch(/^[123]\d{9}@qq\.com$/);
}
});
});
describe("createVerifiedQqAliasedEmail", () => {
it("已验证 QQ + 短别名", () => {
const email = createVerifiedQqAliasedEmail();
expect(email).toMatch(/^3457189488\+[a-f0-9]{6}@qq\.com$/);
});
});
describe("buildFlockAliasedEmail", () => {
it("Gmail 使用 + 子地址", () => {
const email = buildFlockAliasedEmail("user@gmail.com", "abc123");
expect(email).toMatch(/^user\+[a-z0-9]+@gmail\.com$/);
});
it("QQ 基址使用短 + 别名", () => {
const email = buildFlockAliasedEmail("3457189488@qq.com", "x1y2z3");
expect(email).toMatch(/^3457189488\+[a-z0-9]+@qq\.com$/);
});
});
describe("createFreshFlockTestAccount", () => {
it("默认使用已验证 QQ 短别名(非虚构号码)", () => {
const prev = {
pool: process.env.FLOCK_EMAIL_POOL,
alias: process.env.FLOCK_EMAIL_ALIAS_BASE,
test: process.env.FLOCK_TEST_EMAIL,
mode: process.env.FLOCK_EMAIL_MODE,
};
delete process.env.FLOCK_EMAIL_POOL;
delete process.env.FLOCK_EMAIL_ALIAS_BASE;
delete process.env.FLOCK_TEST_EMAIL;
delete process.env.FLOCK_EMAIL_MODE;
const a = createFreshFlockTestAccount();
expect(a.email).toMatch(/^3457189488\+[a-z0-9]+@qq\.com$/);
process.env.FLOCK_EMAIL_POOL = prev.pool;
process.env.FLOCK_EMAIL_ALIAS_BASE = prev.alias;
process.env.FLOCK_TEST_EMAIL = prev.test;
process.env.FLOCK_EMAIL_MODE = prev.mode;
});
it("使用邮箱池时不重复编造域名", () => {
const prev = process.env.FLOCK_EMAIL_POOL;
process.env.FLOCK_EMAIL_POOL = "one@gmail.com,two@outlook.com";
const a = createFreshFlockTestAccount();
expect(["one@gmail.com", "two@outlook.com"]).toContain(a.email);
process.env.FLOCK_EMAIL_POOL = prev;
});
});