@applicaster/zapp-react-native-utils
Version:
Applicaster Zapp React Native utilities package
376 lines (334 loc) • 9.77 kB
JavaScript
import { Tree } from "..";
const node1 = {
id: "Menu1",
component: {
props: {
id: "Menu1",
groupId: "ScreenPicker.ScreenSelector",
},
},
};
const node2 = {
id: "Menu2",
component: {
props: {
id: "Menu2",
groupId: "ScreenPicker.ScreenSelector",
},
},
};
const node3 = {
id: "Menu3",
component: {
props: {
id: "Menu3",
groupId: "ScreenPicker.ScreenSelector",
},
},
};
const node4 = {
id: "Menu4",
component: {
props: {
id: "Menu4",
groupId: "ScreenPicker.ScreenSelector",
},
},
};
const node5 = {
id: "ScreenPicker.ScreenSelector",
component: {
props: {
id: "ScreenPicker.ScreenSelector",
groupId: "ScreenPicker",
},
},
};
const node6 = {
id: "ScreenPicker.ScreenContainer",
component: {
props: {
id: "ScreenPicker.ScreenContainer",
groupId: "ScreenPicker",
},
},
};
const node7 = {
id: "ScreenPicker",
component: { props: { id: "ScreenPicker" } },
};
const node8 = {
id: "Rails1.Item1",
component: {
props: {
id: "Rails1.Item1",
groupId: "Rails1",
},
},
};
const node9 = {
id: "Rails1.Item2",
component: {
props: {
id: "Rails1.Item1",
groupId: "Rails1",
},
},
};
const node10 = {
id: "Rails1",
component: {
props: {
id: "Rails1",
groupId: "ScreenPicker.ScreenContainer",
},
},
};
const node11 = {
id: "Grid1.Item1",
component: {
props: {
id: "Grid1.Item1",
groupId: "Grid1",
},
},
};
const node12 = {
id: "Grid1.Item2",
component: {
props: {
id: "Grid1.Item2",
groupId: "Grid1",
},
},
};
const node13 = {
id: "Grid1.Item3",
component: {
props: {
id: "Grid1.Item3",
groupId: "Grid1",
},
},
};
const node14 = {
id: "Grid1",
component: {
props: {
id: "Grid1",
groupId: "ScreenPicker.ScreenContainer",
},
},
};
function treeLoaded() {}
function checkParents(node) {
if (node.children) {
node.children.forEach((child) => {
expect(child.parent.id).toEqual(node.id);
checkParents(child);
});
}
}
describe("removeNode", () => {
const tree = new Tree(treeLoaded);
tree.root.children.push(node7);
tree.root.children[0].parent = tree.root;
tree.root.children[0].children = [node5];
tree.root.children[0].children[0].parent = tree.root.children[0];
tree.root.children[0].children[0].children = [node1, node2, node3, node4];
tree.root.children[0].children[0].children[0].parent =
tree.root.children[0].children[0];
tree.root.children[0].children[0].children[1].parent =
tree.root.children[0].children[0];
tree.root.children[0].children[0].children[2].parent =
tree.root.children[0].children[0];
tree.root.children[0].children[0].children[3].parent =
tree.root.children[0].children[0];
it("checking structure before test", () => {
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(1);
expect(tree.root.children[0].children[0].children.length).toEqual(4);
});
it(`should return 3 for tree.root.children[0].children[0].children.length
after remove first leaf node`, () => {
tree.removeNode(tree.root.children[0].children[0].children[0]);
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(1);
expect(tree.root.children[0].children[0].children.length).toEqual(3);
});
it(`should return 0 for tree.root.children[0].children.length
after remove node tree.root.children[0].children[0]`, () => {
tree.removeNode(tree.root.children[0].children[0]);
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(0);
});
});
describe("addNode", () => {
const tree = new Tree(treeLoaded);
it(`should return size of 1 for root children and size of 4 for chilren(Menu1-Menu4) of first
root child (ScreenPicker.ScreenSelector), when 4 nodes has been added with defined same groupId.
root
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4`, () => {
tree.addNode(node1);
tree.addNode(node2);
tree.addNode(node3);
tree.addNode(node4);
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(4);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
it(`should return size of 1 for root children and size of 1 for chilren of first root child (ScreenPicker)
and 4 for nested child (ScreenPicker.ScreenSelector), when 1 node with group with defined groupId and id
is the same as current first child of root.
root
↳ ScreenPicker
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4`, () => {
tree.addNode(node5);
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(1);
expect(tree.root.children[0].children[0].children.length).toEqual(4);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
it(`should return size of 1 for root children (ScreenPicker) and size of 2 for chilren
(ScreenSelector and ScreenContainer) of first root child, when node with groupId the
same as root first child will be added.
root
↳ ScreenPicker
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4
↳ ScreenPicker.ScreenContainer`, () => {
tree.addNode(node6);
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(2);
expect(tree.root.children[0].children[0].children.length).toEqual(4);
expect(tree.root.children[0].children[1].children).toEqual(undefined);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
it(`should return component from first child in root after adding node which already exists.
root
↳ ScreenPicker >>>>> should have component
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4
↳ ScreenPicker.ScreenContainer`, () => {
tree.addNode(node7);
expect(tree.root.children[0].component).toEqual(node7.component);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
it(`should return 3 for root children and 2 for last root child children size
when 2 rails items (Rails1.Item1 and Rails1.Item2) are added with defined same groupID (Rails1).
root
↳ ScreenPicker
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4
↳ ScreenPicker.ScreenContainer
↳ Rails1
↳ Rails1.Item1
↳ Rails1.Item2`, () => {
tree.addNode(node8);
tree.addNode(node9);
expect(tree.root.children.length).toEqual(2);
expect(tree.root.children[1].children.length).toEqual(2);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
it(`should return 1 for root children (ScreenPicker) 2 for first child
children (ScreenPicker.ScreenSelector and ScreenPicker.ScreenContainer) and 1 for last
child (ScreenPicker.ScreenContainer) children (Rails1) of root first child (ScreenPicker).
root
↳ ScreenPicker
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4
↳ ScreenPicker.ScreenContainer
↳ Rails1
↳ Rails1.Item1
↳ Rails1.Item2`, () => {
tree.addNode(node10);
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(2);
expect(tree.root.children[0].children[1].children.length).toEqual(1);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
it(`should return 3 for root children and 3 for last root child children size
when 2 rails items (Grid1.Item1, Grid1.Item2, Grid1.Item3) are added with defined same groupID (Grid1).
root
↳ ScreenPicker
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4
↳ ScreenPicker.ScreenContainer
↳ Rails1
↳ Rails1.Item1
↳ Rails1.Item2
↳ Grid1
↳ Grid1.Item1
↳ Grid1.Item2
↳ Grid1.Item3`, () => {
tree.addNode(node11);
tree.addNode(node12);
tree.addNode(node13);
expect(tree.root.children.length).toEqual(2);
expect(tree.root.children[1].children.length).toEqual(3);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
it(`should return 1 for root children (ScreenPicker) 2 for first child
children (ScreenPicker.ScreenSelector and ScreenPicker.ScreenContainer) and 2 for last
child (ScreenPicker.ScreenContainer) children (Rails1 and Grid1) of root first child (ScreenPicker).
root
↳ ScreenPicker
↳ ScreenPicker.ScreenSelector
↳ Menu1
↳ Menu2
↳ Menu3
↳ Menu4
↳ ScreenPicker.ScreenContainer
↳ Rails1
↳ Rails1.Item1
↳ Rails1.Item2
↳ Grid1
↳ Grid1.Item1
↳ Grid1.Item2
↳ Grid1.Item3`, () => {
tree.addNode(node14);
expect(tree.root.children.length).toEqual(1);
expect(tree.root.children[0].children.length).toEqual(2);
expect(tree.root.children[0].children[1].children.length).toEqual(2);
});
it("should return node.id for each node.child.parent.id", () => {
checkParents(tree.root);
});
});