-
Notifications
You must be signed in to change notification settings - Fork 0
/
treeify_spec.rb
127 lines (106 loc) · 3.42 KB
/
treeify_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
require 'spec_helper'
describe Treeify do
describe "Initialization" do
it "has the correct config values" do
expect(Node.cols).to eq([:name])
end
it "is set up correctly" do
expect(Node.table_name).to eq("nodes")
expect(Node.cols).to eq([:name])
end
it "has the correct data in the database" do
expect(Node.roots.count).to eq(3)
expect(Node.roots.first.descendents.count).to eq(50)
end
end
describe "Down the tree" do
subject(:parent) { Node.roots.first }
it "retrieves its descendents" do
expect(parent.descendents.count).to eq(50)
# self_and_descendents - [self] == 49
expect(parent.descendents.first.descendents.count).to eq(49)
end
end
describe "Back up the tree" do
subject(:descendent) { Node.roots.first.descendents.first }
it "retrieves its ancestors" do
expect(descendent.ancestors.count).to eq(49)
end
end
describe "Modifying the tree" do
it "adds a new child" do
root = Node.roots.first
root.children << Node.create(name: "new child node")
child = root.children.where(name: "new child node").take
expect(child.name).to eq("new child node")
end
it "has the correct parent" do
root = Node.roots.first
child = Node.where(name: "new child node").take
expect(child.parent.id).to eq(root.id)
end
it "updates a child" do
root = Node.roots.first
child = Node.where(name: "new child node").take
child.name = "fart nuggets"
child.save
expect(child.name).to eq("fart nuggets")
end
it "deletes a child" do
root = Node.roots.first
child = Node.where(name: "new child node").take
Node.delete(child)
expect(Node.where(name: "new child node").take).to eq(nil)
end
it "adds children to child nodes" do
root = Node.roots.first
child = root.children.create(name: "new child node")
subchild = child.children.create(name: "new subchild node")
expect(child.children.count).to eq(1)
end
it "has the correct tree after subchildren are added" do
tree = Node.roots.first.self_and_descendents
tree.each do |node|
pending "Ancestor count for parent nodes doesn't work yet"
if node.parent_id.nil?
expect(node.ancestors.count).to eq(0)
end
end
end
it "deletes subchildren"
it "re-parents children"
it "has the correct tree after children are re-parented"
it "retrieves siblings" do
10.times do |n|
Node.create(name: "sib_#{n}", parent_id: Node.roots.first.id)
end
sib = Node.where(name: "sib_1").take
expect(sib.siblings.count).to eq(12)
end
it "adds siblings"
it "updates siblings"
it "deletes siblings"
it "builds the descendents_tree properly" do
parent = Node.create(name: "tree root")
parent.children << Node.new(name: "child 1")
parent.children.first.children << Node.new(name: "child 2")
child = parent.children.first
subchild = child.children.first
expect(parent.descendent_tree).to match_array([
{
"id" => child.id,
"parent_id" => parent.id,
"name" => child.name,
"children" => [
{
"id" => subchild.id,
"parent_id" => child.id,
"name" => subchild.name,
"children" => []
}
]
}
])
end
end
end