refactor(ecommerce): extract platform rules and prompt builders
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
defaultCloneOutput,
|
||||
defaultEcommercePlatform,
|
||||
defaultProductSetOutput,
|
||||
formatUploadedImageRatio,
|
||||
getPlatformDefaultLanguage,
|
||||
getPlatformDefaultRatio,
|
||||
getPlatformLanguageOptions,
|
||||
getPlatformRatioOptions,
|
||||
getUniqueRatioOptions,
|
||||
normalizeLanguageForPlatform,
|
||||
normalizeMarket,
|
||||
normalizePlatform,
|
||||
normalizeRatioForPlatform,
|
||||
platformOptions,
|
||||
} from "./platformRules";
|
||||
|
||||
describe("platform defaults", () => {
|
||||
it("exposes the default ecommerce platform and outputs", () => {
|
||||
expect(defaultEcommercePlatform).toBe("淘宝/天猫");
|
||||
expect(defaultProductSetOutput).toBe("set");
|
||||
expect(defaultCloneOutput).toBe("set");
|
||||
});
|
||||
|
||||
it("lists platform labels for UI selectors", () => {
|
||||
expect(platformOptions).toContain("淘宝/天猫");
|
||||
expect(platformOptions).toContain("亚马逊 Amazon");
|
||||
expect(platformOptions).toContain("TikTok Shop");
|
||||
});
|
||||
});
|
||||
|
||||
describe("normalizePlatform", () => {
|
||||
it("normalizes legacy labels", () => {
|
||||
expect(normalizePlatform("亚马逊Amazon")).toBe("亚马逊 Amazon");
|
||||
expect(normalizePlatform("亚马逊")).toBe("亚马逊 Amazon");
|
||||
});
|
||||
|
||||
it("falls back to the default platform for unknown labels", () => {
|
||||
expect(normalizePlatform("unknown")).toBe("淘宝/天猫");
|
||||
});
|
||||
});
|
||||
|
||||
describe("platform ratios", () => {
|
||||
it("returns mode-specific ratios", () => {
|
||||
expect(getPlatformRatioOptions("淘宝/天猫", "set")).toContain("1000×1000px\u00a0\u00a0\u00a01:1");
|
||||
expect(getPlatformDefaultRatio("淘宝/天猫", "video")).toBe("1080×1920px\u00a0\u00a0\u00a09:16");
|
||||
});
|
||||
|
||||
it("normalizes an existing or partially matching ratio for a platform", () => {
|
||||
expect(normalizeRatioForPlatform("淘宝/天猫", "1000×1000px\u00a0\u00a0\u00a01:1", "set")).toBe("1000×1000px\u00a0\u00a0\u00a01:1");
|
||||
expect(normalizeRatioForPlatform("淘宝/天猫", "1000×1000px", "set")).toBe("1000×1000px\u00a0\u00a0\u00a01:1");
|
||||
});
|
||||
|
||||
it("falls back to the mode default when no ratio matches", () => {
|
||||
expect(normalizeRatioForPlatform("淘宝/天猫", "nope", "set")).toBe("1000×1000px\u00a0\u00a0\u00a01:1");
|
||||
});
|
||||
|
||||
it("deduplicates ratio lists without changing order", () => {
|
||||
expect(getUniqueRatioOptions(["1:1", "3:4", "1:1"])).toEqual(["1:1", "3:4"]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("market and language rules", () => {
|
||||
it("normalizes unknown markets to the default country", () => {
|
||||
expect(normalizeMarket("火星")).toBe("中国");
|
||||
});
|
||||
|
||||
it("uses Chinese by default for domestic platforms", () => {
|
||||
expect(getPlatformDefaultLanguage("淘宝/天猫", "美国")).toBe("中文");
|
||||
});
|
||||
|
||||
it("includes English for domestic platforms while preserving local languages", () => {
|
||||
expect(getPlatformLanguageOptions("淘宝/天猫", "美国")).toEqual(["中文", "英文"]);
|
||||
});
|
||||
|
||||
it("uses market languages for cross-border platforms", () => {
|
||||
expect(getPlatformDefaultLanguage("亚马逊 Amazon", "日本")).toBe("日文");
|
||||
});
|
||||
|
||||
it("normalizes language aliases and falls back when not available", () => {
|
||||
expect(normalizeLanguageForPlatform("亚马逊 Amazon", "日本", "日语")).toBe("日文");
|
||||
expect(normalizeLanguageForPlatform("亚马逊 Amazon", "日本", "德语")).toBe("日文");
|
||||
});
|
||||
});
|
||||
|
||||
describe("formatUploadedImageRatio", () => {
|
||||
it("formats dimensions and aspect ratio", () => {
|
||||
expect(formatUploadedImageRatio({ width: 750, height: 1000, format: "PNG" })).toBe("上传图片 750×1000px\u00a0\u00a0\u00a03:4\u00a0\u00a0\u00a0PNG");
|
||||
});
|
||||
|
||||
it("falls back to original ratio when dimensions are missing", () => {
|
||||
expect(formatUploadedImageRatio({ format: "JPG" })).toBe("上传图片\u00a0\u00a0\u00a0原图比例\u00a0\u00a0\u00a0JPG");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user