/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see .
*/
import { expect } from "chai";
import { Tree, treeGroupBy } from "../src/tree-group.js";
interface TestItem {
id: number;
path?: string[];
}
describe("tree-group", function () {
it("should create a tree", function () {
const items: Array = [
{
id: 1,
path: ["a", "b", "c"],
},
{
id: 2,
path: ["a", "b", "d"],
},
];
const tree = treeGroupBy(items, (item) => item.path ?? []);
const expectedTree: Tree = {
a: {
b: {
c: { _: [items[0]] },
d: { _: [items[1]] },
} as Tree,
} as Tree,
} as Tree;
expect(tree).to.deep.equal(expectedTree);
});
it("should also sort empty paths", () => {
const items: Array = [
{
id: 1,
path: ["a", "b", "c"],
},
{
id: 2,
},
];
const tree = treeGroupBy(items, (item) => item.path ?? []);
const expectedTree: Tree = {
a: {
b: {
c: { _: [items[0]] },
} as Tree,
} as Tree,
_: [items[1]],
} as Tree;
expect(tree).to.deep.equal(expectedTree);
});
});