summaryrefslogtreecommitdiff
path: root/spec/models/concerns
diff options
context:
space:
mode:
authorBob Van Landuyt <bob@vanlanduyt.co>2017-09-06 16:29:52 +0200
committerBob Van Landuyt <bob@vanlanduyt.co>2017-10-04 22:46:49 +0200
commit438a0773dc850d3fa690881ea0b022bc27435e1e (patch)
treea312a5d2eb890022d0b9ffdd64e2b1ab68f0283f /spec/models/concerns
parent9f3995a0ca3d56fd8d219a2b01c3e6555fd91f27 (diff)
downloadgitlab-ce-438a0773dc850d3fa690881ea0b022bc27435e1e.tar.gz
Add a concern to build hierarchies of groups
Diffstat (limited to 'spec/models/concerns')
-rw-r--r--spec/models/concerns/group_hierarchy_spec.rb61
1 files changed, 61 insertions, 0 deletions
diff --git a/spec/models/concerns/group_hierarchy_spec.rb b/spec/models/concerns/group_hierarchy_spec.rb
new file mode 100644
index 00000000000..14ac910c90d
--- /dev/null
+++ b/spec/models/concerns/group_hierarchy_spec.rb
@@ -0,0 +1,61 @@
+require 'spec_helper'
+
+describe GroupHierarchy, :nested_groups do
+ let(:parent) { create(:group) }
+ let(:subgroup) { create(:group, parent: parent) }
+ let(:subsub_group) { create(:group, parent: subgroup) }
+
+ context 'for a group' do
+ describe '#hierarchy' do
+ it 'builds a hierarchy for a group' do
+ expected_hierarchy = { parent => { subgroup => subsub_group } }
+
+ expect(subsub_group.hierarchy).to eq(expected_hierarchy)
+ end
+
+ it 'builds a hierarchy upto a specified parent' do
+ expected_hierarchy = { subgroup => subsub_group }
+
+ expect(subsub_group.hierarchy(parent)).to eq(expected_hierarchy)
+ end
+
+ it 'raises an error if specifying a base that is not part of the tree' do
+ expect { subsub_group.hierarchy(double) }.to raise_error('specified base is not part of the tree')
+ end
+ end
+
+ describe '#parent' do
+ it 'returns the correct parent' do
+ expect(subsub_group.parent).to eq(subgroup)
+ end
+ end
+ end
+
+ context 'for a project' do
+ let(:project) { create(:project, namespace: subsub_group) }
+
+ describe '#hierarchy' do
+ it 'builds a hierarchy for a group' do
+ expected_hierarchy = { parent => { subgroup => { subsub_group => project } } }
+
+ expect(project.hierarchy).to eq(expected_hierarchy)
+ end
+
+ it 'builds a hierarchy upto a specified parent' do
+ expected_hierarchy = { subsub_group => project }
+
+ expect(project.hierarchy(subgroup)).to eq(expected_hierarchy)
+ end
+
+ it 'raises an error if specifying a base that is not part of the tree' do
+ expect { project.hierarchy(double) }.to raise_error('specified base is not part of the tree')
+ end
+ end
+
+ describe '#parent' do
+ it 'returns the correct parent' do
+ expect(project.parent).to eq(subsub_group)
+ end
+ end
+ end
+end