158 lines
4.4 KiB
TypeScript
158 lines
4.4 KiB
TypeScript
/* eslint-disable @typescript-eslint/naming-convention */
|
|
import { describe, expect, it } from "vitest";
|
|
import type { Bundler } from "vuepress/core";
|
|
import { createBaseApp } from "vuepress/core";
|
|
import { path } from "vuepress/utils";
|
|
|
|
import { emptyTheme } from "./__fixtures__/theme/empty.js";
|
|
import { getThemeData } from "../../src/node/config/getThemeData.js";
|
|
import { getThemeStatus } from "../../src/node/config/getThemeStatus.js";
|
|
import type { ThemeOptions } from "../../src/shared/index.js";
|
|
|
|
describe("should generate themeData correctly", () => {
|
|
it("Should contain basic properties", () => {
|
|
const app = createBaseApp({
|
|
locales: {
|
|
"/": {
|
|
lang: "en-US",
|
|
},
|
|
},
|
|
bundler: {} as Bundler,
|
|
source: path.resolve(__dirname, "./__fixtures__/src"),
|
|
theme: emptyTheme,
|
|
});
|
|
const themeOptions = {};
|
|
|
|
const result = getThemeData(app, themeOptions, getThemeStatus(app, {}));
|
|
|
|
expect(result).toHaveProperty("encrypt");
|
|
expect(result.locales).toBeTypeOf("object");
|
|
expect(Object.keys(result.locales)).toEqual(["/"]);
|
|
expect(result).toMatchSnapshot();
|
|
});
|
|
|
|
it("Should handle single language", () => {
|
|
const app = createBaseApp({
|
|
locales: {
|
|
"/": {
|
|
lang: "en-US",
|
|
},
|
|
},
|
|
bundler: {} as Bundler,
|
|
source: path.resolve(__dirname, "./__fixtures__/src"),
|
|
theme: emptyTheme,
|
|
});
|
|
const themeOptions = {
|
|
navbar: ["/", "/about"],
|
|
sidebar: ["/", "/about"],
|
|
};
|
|
|
|
const result = getThemeData(app, themeOptions, getThemeStatus(app, {}));
|
|
|
|
expect(result.locales).toBeTypeOf("object");
|
|
expect(Object.keys(result.locales)).toEqual(["/"]);
|
|
expect(result.locales["/"].navbar).toEqual(["/", "/about"]);
|
|
expect(result.locales["/"].sidebar).toEqual(["/", "/about"]);
|
|
});
|
|
|
|
it("locale should have higher property", () => {
|
|
const app = createBaseApp({
|
|
locales: {
|
|
"/": {
|
|
lang: "en-US",
|
|
},
|
|
"/zh/": {
|
|
lang: "zh-TW",
|
|
},
|
|
},
|
|
bundler: {} as Bundler,
|
|
source: path.resolve(__dirname, "./__fixtures__/src"),
|
|
theme: emptyTheme,
|
|
});
|
|
const themeOptions = {
|
|
navbar: ["/", "/about"],
|
|
|
|
locales: {
|
|
"/": {
|
|
navbar: ["/", "/guide", "/about"],
|
|
},
|
|
"/zh/": {
|
|
navbar: ["/zh/", "/zh/guide", "/zh/about"],
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = getThemeData(app, themeOptions, getThemeStatus(app, {}));
|
|
|
|
expect(result.locales).toBeTypeOf("object");
|
|
expect(new Set(Object.keys(result.locales))).toEqual(
|
|
new Set(["/", "/zh/"]),
|
|
);
|
|
expect(result.locales["/"].navbar).toEqual(["/", "/guide", "/about"]);
|
|
expect(result.locales["/zh/"].navbar).toEqual([
|
|
"/zh/",
|
|
"/zh/guide",
|
|
"/zh/about",
|
|
]);
|
|
});
|
|
|
|
it("should fallback to root if locale config is missing", () => {
|
|
const app = createBaseApp({
|
|
locales: {
|
|
"/": {
|
|
lang: "en-US",
|
|
},
|
|
"/zh/": {
|
|
lang: "zh-TW",
|
|
},
|
|
},
|
|
bundler: {} as Bundler,
|
|
source: path.resolve(__dirname, "./__fixtures__/src"),
|
|
theme: emptyTheme,
|
|
});
|
|
const themeOptions = {
|
|
navbar: ["/", "/guide", "/about"],
|
|
|
|
locales: {
|
|
"/": {},
|
|
"/zh/": {
|
|
navbar: ["/zh/", "/zh/guide", "/zh/about"],
|
|
},
|
|
},
|
|
};
|
|
|
|
const result = getThemeData(app, themeOptions, getThemeStatus(app, {}));
|
|
|
|
expect(result.locales["/"].navbar).toEqual(["/", "/guide", "/about"]);
|
|
expect(result.locales["/zh/"].navbar).toEqual([
|
|
"/zh/",
|
|
"/zh/guide",
|
|
"/zh/about",
|
|
]);
|
|
});
|
|
|
|
it("root only option should not appear in locales", () => {
|
|
const app = createBaseApp({
|
|
locales: {
|
|
"/": {
|
|
lang: "en-US",
|
|
},
|
|
},
|
|
bundler: {} as Bundler,
|
|
source: path.resolve(__dirname, "./__fixtures__/src"),
|
|
theme: emptyTheme,
|
|
});
|
|
const themeOptions: ThemeOptions = {
|
|
pure: true,
|
|
darkmode: "disable",
|
|
encrypt: {},
|
|
};
|
|
|
|
const result = getThemeData(app, themeOptions, getThemeStatus(app, {}));
|
|
|
|
expect(result.locales["/"]).not.toHaveProperty("darkmode");
|
|
expect(result.locales["/"]).not.toHaveProperty("encrypt");
|
|
expect(result.locales["/"]).not.toHaveProperty("pure");
|
|
});
|
|
});
|