zhouhongshuo ca9430f82c 初始化
2024-08-25 23:46:05 +08:00

227 lines
6.3 KiB
TypeScript

import type { MenuItem } from "@halo-dev/api-client";
import { describe, expect, it } from "vitest";
import type { MenuTreeItem } from "../index";
import {
buildMenuItemsTree,
convertMenuTreeItemToMenuItem,
convertTreeToMenuItems,
getChildrenNames,
resetMenuItemsTreePriority,
sortMenuItemsTree,
} from "../index";
const rawMenuItems: MenuItem[] = [
{
spec: {
displayName: "文章分类",
href: "https://ryanc.cc/categories",
children: [
"caeef383-3828-4039-9114-6f9ad3b4a37e",
"ded1943d-9fdb-4563-83ee-2f04364872e0",
],
priority: 1,
},
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
name: "40e4ba86-5c7e-43c2-b4c0-cee376d26564",
version: 12,
creationTimestamp: "2022-08-05T04:19:37.252228Z",
},
},
{
spec: {
displayName: "Halo",
href: "https://ryanc.cc/categories/halo",
children: [],
priority: 0,
},
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
name: "caeef383-3828-4039-9114-6f9ad3b4a37e",
version: 4,
creationTimestamp: "2022-07-28T06:50:32.777556Z",
},
},
{
spec: {
displayName: "Java",
href: "https://ryanc.cc/categories/java",
children: ["96b636bb-3e4a-44d1-8ea7-f9da9e876f45"],
priority: 1,
},
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
name: "ded1943d-9fdb-4563-83ee-2f04364872e0",
version: 1,
creationTimestamp: "2022-08-05T04:22:03.377364Z",
},
},
{
spec: {
displayName: "Spring Boot",
href: "https://ryanc.cc/categories/spring-boot",
children: [],
priority: 0,
},
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
name: "96b636bb-3e4a-44d1-8ea7-f9da9e876f45",
version: 1,
creationTimestamp: "2022-08-05T04:22:03.377364Z",
},
},
{
spec: {
displayName: "首页",
href: "https://ryanc.cc/",
children: [],
priority: 0,
},
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
name: "411a3639-bf0d-4266-9cfb-14184259dab5",
version: 1,
creationTimestamp: "2022-08-05T04:22:03.377364Z",
},
},
];
describe("buildMenuItemsTree", () => {
it("should match snapshot", () => {
expect(buildMenuItemsTree(rawMenuItems)).toMatchSnapshot();
});
it("should be sorted correctly", () => {
const menuItems = buildMenuItemsTree(rawMenuItems);
expect(menuItems[0].spec.priority).toBe(0);
expect(menuItems[1].spec.priority).toBe(1);
// children should be sorted
expect(menuItems[1].spec.children[0].spec.priority).toBe(0);
expect(menuItems[1].spec.children[1].spec.priority).toBe(1);
expect(menuItems[1].spec.children[1].spec.children[0].spec.priority).toBe(
0
);
expect(menuItems[0].spec.displayName).toBe("首页");
expect(menuItems[1].spec.displayName).toBe("文章分类");
expect(menuItems[1].spec.children[0].spec.displayName).toBe("Halo");
expect(menuItems[1].spec.children[1].spec.displayName).toBe("Java");
expect(
menuItems[1].spec.children[1].spec.children[0].spec.displayName
).toBe("Spring Boot");
});
});
describe("convertTreeToMenuItems", () => {
it("will match snapshot", function () {
const menuTreeItems = buildMenuItemsTree(rawMenuItems);
expect(convertTreeToMenuItems(menuTreeItems)).toMatchSnapshot();
});
});
describe("sortMenuItemsTree", () => {
it("will match snapshot", () => {
const tree: MenuTreeItem[] = [
{
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
creationTimestamp: "2022-08-05T04:19:37.252228Z",
name: "40e4ba86-5c7e-43c2-b4c0-cee376d26564",
version: 12,
},
spec: {
children: [
{
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
creationTimestamp: "2022-07-28T06:50:32.777556Z",
name: "caeef383-3828-4039-9114-6f9ad3b4a37e",
version: 4,
},
spec: {
children: [],
priority: 1,
displayName: "Halo",
href: "https://ryanc.cc/categories/halo",
},
},
{
apiVersion: "v1alpha1",
kind: "MenuItem",
metadata: {
creationTimestamp: "2022-08-05T04:22:03.377364Z",
name: "ded1943d-9fdb-4563-83ee-2f04364872e0",
version: 0,
},
spec: {
children: [],
priority: 0,
displayName: "Java",
href: "https://ryanc.cc/categories/java",
},
},
],
priority: 0,
displayName: "文章分类",
href: "https://ryanc.cc/categories",
},
},
];
expect(sortMenuItemsTree(tree)).toMatchSnapshot();
});
});
describe("resetMenuItemsTreePriority", () => {
it("should match snapshot", function () {
expect(
resetMenuItemsTreePriority(buildMenuItemsTree(rawMenuItems))
).toMatchSnapshot();
});
});
describe("getChildrenNames", () => {
it("should return correct names", () => {
const menuTreeItems = buildMenuItemsTree(rawMenuItems);
expect(getChildrenNames(menuTreeItems[0])).toEqual([]);
expect(getChildrenNames(menuTreeItems[1])).toEqual([
"caeef383-3828-4039-9114-6f9ad3b4a37e",
"ded1943d-9fdb-4563-83ee-2f04364872e0",
"96b636bb-3e4a-44d1-8ea7-f9da9e876f45",
]);
expect(getChildrenNames(menuTreeItems[1].spec.children[0])).toEqual([]);
});
});
describe("convertMenuTreeItemToMenuItem", () => {
it("should match snapshot", () => {
const menuTreeItems = buildMenuItemsTree(rawMenuItems);
expect(convertMenuTreeItemToMenuItem(menuTreeItems[1])).toMatchSnapshot();
expect(
convertMenuTreeItemToMenuItem(menuTreeItems[1].spec.children[1])
).toMatchSnapshot();
});
it("should return correct MenuItem", () => {
const menuTreeItems = buildMenuItemsTree(rawMenuItems);
expect(
convertMenuTreeItemToMenuItem(menuTreeItems[1]).spec.displayName
).toBe("文章分类");
expect(
convertMenuTreeItemToMenuItem(menuTreeItems[1]).spec.children
).toStrictEqual([
"caeef383-3828-4039-9114-6f9ad3b4a37e",
"ded1943d-9fdb-4563-83ee-2f04364872e0",
]);
});
});