saleor-dashboard/src/navigation/components/MenuDetailsPage/tree.test.ts

186 lines
4.5 KiB
TypeScript
Raw Normal View History

2019-06-19 14:40:52 +00:00
import { menu } from "../../fixtures";
import { MenuDetails_menu_items } from "../../types/MenuDetails";
import { TreeOperation } from "../MenuItems";
import { computeTree } from "./tree";
// Readability FTW
function innerTreeToString(
tree: MenuDetails_menu_items,
level: number
): string {
return (
"\n" +
"··".repeat(level) +
tree.name +
tree.children.reduce(
(acc, node) => acc + innerTreeToString(node, level + 1),
""
)
);
}
function treeToString(tree: MenuDetails_menu_items[]): string {
return tree.reduce((acc, node) => acc + innerTreeToString(node, 0), "");
}
describe("Properly computes trees", () => {
const testTable: TreeOperation[][] = [
[],
[
{ id: "1glasses", parentId: "0jewelry", sortOrder: 0, type: "move" },
{
id: "2accessories",
parentId: "3groceries",
sortOrder: 0,
type: "move"
}
],
[
{ id: "1glasses", parentId: "0jewelry", sortOrder: 0, type: "move" },
{
id: "2accessories",
parentId: "3groceries",
sortOrder: 0,
type: "move"
},
{
id: "3groceries",
parentId: "4apparel",
sortOrder: 0,
type: "move"
}
],
[
{ id: "0jewelry", sortOrder: 1, type: "move" },
{ id: "1glasses", sortOrder: 1, type: "move" },
{
id: "4apparel",
parentId: "3groceries",
sortOrder: 0,
type: "move"
},
{
id: "3groceries",
parentId: "0jewelry",
sortOrder: 0,
type: "move"
},
{ id: "0jewelry", parentId: "1glasses", sortOrder: 0, type: "move" },
{
id: "1glasses",
parentId: "2accessories",
sortOrder: 0,
type: "move"
},
{ id: "1glasses", sortOrder: 1, type: "move" },
{ id: "0jewelry", sortOrder: 2, type: "move" }
],
[
{ id: "1glasses", sortOrder: 1, type: "move" },
{ id: "1glasses", parentId: "0jewelry", sortOrder: 0, type: "move" },
{ id: "0jewelry", sortOrder: 1, type: "move" },
{
id: "0jewelry",
parentId: "2accessories",
sortOrder: 0,
type: "move"
},
{ id: "3groceries", sortOrder: 0, type: "move" },
{
id: "2accessories",
parentId: "3groceries",
sortOrder: 0,
type: "move"
},
{ id: "2accessories", sortOrder: 1, type: "move" },
{ id: "0jewelry", sortOrder: 2, type: "move" },
{ id: "1glasses", sortOrder: 3, type: "move" },
{ id: "4apparel", sortOrder: 0, type: "move" },
{ id: "1glasses", sortOrder: 1, type: "move" },
{ id: "2accessories", sortOrder: 0, type: "move" },
{
id: "4apparel",
parentId: "2accessories",
sortOrder: 0,
type: "move"
},
{
id: "3groceries",
parentId: "1glasses",
sortOrder: 0,
type: "move"
},
{ id: "0jewelry", sortOrder: 0, type: "move" },
{
id: "0jewelry",
parentId: "2accessories",
sortOrder: 0,
type: "move"
},
{
id: "4apparel",
parentId: "2accessories",
sortOrder: 0,
type: "move"
},
{
id: "0jewelry",
parentId: "2accessories",
sortOrder: 0,
type: "move"
},
{
id: "1glasses",
parentId: "2accessories",
sortOrder: 2,
type: "move"
},
{
id: "0jewelry",
parentId: "2accessories",
sortOrder: 2,
type: "move"
},
{
id: "1glasses",
parentId: "2accessories",
sortOrder: 2,
type: "move"
},
{
id: "4apparel",
parentId: "2accessories",
sortOrder: 2,
type: "move"
},
{
id: "3groceries",
parentId: "0jewelry",
sortOrder: 0,
type: "move"
},
{ id: "4apparel", parentId: "1glasses", sortOrder: 0, type: "move" },
{ id: "1glasses", sortOrder: 1, type: "move" },
{ id: "0jewelry", sortOrder: 1, type: "move" },
{
id: "2accessories",
parentId: "4apparel",
sortOrder: 0,
type: "move"
}
],
[{ id: "2accessories", type: "remove" }],
[
{ id: "2accessories", type: "remove" },
2019-12-02 10:49:14 +00:00
{ id: "4apparel", sortOrder: 0, type: "move" },
2019-06-19 14:40:52 +00:00
{ id: "3groceries", type: "remove" }
]
];
testTable.forEach(testData =>
it("#", () => {
const computedTree = computeTree(menu.items, testData);
expect(treeToString(computedTree)).toMatchSnapshot();
})
);
});