51 lines
2.0 KiB
TypeScript
51 lines
2.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import { resolveEditableTheme } from "@/utils/themeEdit";
|
||
|
||
/**
|
||
* 任务三(2026-09-08):站点编辑弹窗主题归一纯函数。
|
||
* 旧行为把「不在皮肤包列表中的主题」静默归一 default,保存即悄悄改写站点换肤;
|
||
* 新行为保留原值交服务端拒绝,仅标记告警。
|
||
*/
|
||
describe("resolveEditableTheme 站点编辑主题归一(任务三)", () => {
|
||
it("注册中的主题原值保留且不告警", () => {
|
||
expect(resolveEditableTheme("scholar-blue", ["default", "scholar-blue"])).toEqual({
|
||
theme: "scholar-blue",
|
||
unregistered: false,
|
||
});
|
||
});
|
||
|
||
it("docs/20 E:下架主题解析为保留主题 + colorScheme 预设(不误报未注册)", () => {
|
||
expect(resolveEditableTheme("classic-red", ["default", "scholar-blue", "campus-glow"])).toEqual({
|
||
theme: "default",
|
||
unregistered: false,
|
||
aliasColorScheme: "classic-red",
|
||
});
|
||
expect(resolveEditableTheme("poly-blue", ["default", "scholar-blue", "campus-glow"])).toEqual({
|
||
theme: "scholar-blue",
|
||
unregistered: false,
|
||
aliasColorScheme: "poly",
|
||
});
|
||
});
|
||
|
||
it("未注册主题保留原值并标记 unregistered(不再归一 default)", () => {
|
||
expect(resolveEditableTheme("ghost-theme", ["default", "scholar-blue"])).toEqual({
|
||
theme: "ghost-theme",
|
||
unregistered: true,
|
||
});
|
||
});
|
||
|
||
it("空主题归一 default(站点未选过皮肤的场景)", () => {
|
||
expect(resolveEditableTheme(undefined, ["default", "scholar-blue"])).toEqual({
|
||
theme: "default",
|
||
unregistered: false,
|
||
});
|
||
});
|
||
|
||
it("列表为空(加载失败)时保留原值且不误报,交服务端校验兜底", () => {
|
||
expect(resolveEditableTheme("mint-breeze", [])).toEqual({
|
||
theme: "mint-breeze",
|
||
unregistered: false,
|
||
});
|
||
});
|
||
});
|