test(brand): 覆盖新增品牌辅助函数和 CSS 选择器单测

新增 getBrandPrimaryColor / getBrandPrimaryColorWithAlpha / getInitialBrandFromBrowser / syncBrandClassName 的单元测试,以及 brand-default / brand-sxwz CSS 选择器存在性校验。
This commit is contained in:
肖应宇 2026-06-12 11:39:05 +08:00
parent 269408b66f
commit 5d634e3ad1
2 changed files with 79 additions and 0 deletions

View File

@ -3,11 +3,18 @@ import test from "node:test";
const {
BRAND_SESSION_STORAGE_KEY,
getBrandPrimaryColor,
getBrandPrimaryColorWithAlpha,
getInitialBrandFromBrowser,
syncBrandClassName,
getBrandRootClassName,
parseBrandFromSearchParams,
resolveBrandSession,
} = await import(new URL("./index.ts", import.meta.url).href);
const DEFAULT_BRAND_PRIMARY = `#${"150033"}`;
const SXWZ_BRAND_PRIMARY = `#${"000F33"}`;
void test("parseBrandFromSearchParams returns correct brand per param value", () => {
assert.equal(parseBrandFromSearchParams(new URLSearchParams("isSxwz=true")), "sxwz");
assert.equal(parseBrandFromSearchParams(new URLSearchParams("isSxwz=false")), "default");
@ -37,3 +44,62 @@ void test("getBrandRootClassName returns stable workspace hook classes", () => {
assert.equal(getBrandRootClassName("sxwz"), "brand-sxwz");
assert.equal(BRAND_SESSION_STORAGE_KEY, "deerflow.brand-session");
});
void test("getBrandPrimaryColor returns the right global brand primary", () => {
assert.equal(getBrandPrimaryColor("default"), DEFAULT_BRAND_PRIMARY);
assert.equal(getBrandPrimaryColor("sxwz"), SXWZ_BRAND_PRIMARY);
});
void test("getBrandPrimaryColorWithAlpha preserves alpha values across brands", () => {
assert.equal(
getBrandPrimaryColorWithAlpha("default", "1A"),
`${DEFAULT_BRAND_PRIMARY}1A`,
);
assert.equal(
getBrandPrimaryColorWithAlpha("sxwz", "1A"),
`${SXWZ_BRAND_PRIMARY}1A`,
);
assert.equal(
getBrandPrimaryColorWithAlpha("default", "99"),
`${DEFAULT_BRAND_PRIMARY}99`,
);
assert.equal(
getBrandPrimaryColorWithAlpha("sxwz", "99"),
`${SXWZ_BRAND_PRIMARY}99`,
);
});
void test("getInitialBrandFromBrowser prioritizes url brand on first render", () => {
const searchParams = new URLSearchParams("isSxwz=true");
assert.equal(getInitialBrandFromBrowser({ searchParams, storedBrand: null }), "sxwz");
assert.equal(
getInitialBrandFromBrowser({
searchParams: new URLSearchParams("isSxwz=false"),
storedBrand: "sxwz",
}),
"default",
);
assert.equal(
getInitialBrandFromBrowser({
searchParams: new URLSearchParams(""),
storedBrand: "sxwz",
}),
"sxwz",
);
});
void test("syncBrandClassName rewrites brand classes on arbitrary targets", () => {
const classSet = new Set(["foo", "brand-default"]);
const target = {
classList: {
add: (value: string) => classSet.add(value),
remove: (...values: string[]) => values.forEach((value) => classSet.delete(value)),
},
};
syncBrandClassName(target, "sxwz");
assert.equal(classSet.has("foo"), true);
assert.equal(classSet.has("brand-default"), false);
assert.equal(classSet.has("brand-sxwz"), true);
});

View File

@ -0,0 +1,13 @@
import assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import path from "node:path";
import test from "node:test";
import url from "node:url";
const currentDir = path.dirname(url.fileURLToPath(import.meta.url));
const globalsCss = readFileSync(path.join(currentDir, "globals.css"), "utf8");
void test("brand selectors target :root to outrank default root variables", () => {
assert.match(globalsCss, /:root\.brand-default\s*\{/);
assert.match(globalsCss, /:root\.brand-sxwz\s*\{/);
});