summaryrefslogtreecommitdiff
path: root/spec/support/group_tree_shared_examples.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/group_tree_shared_examples.rb')
-rw-r--r--spec/support/group_tree_shared_examples.rb74
1 files changed, 74 insertions, 0 deletions
diff --git a/spec/support/group_tree_shared_examples.rb b/spec/support/group_tree_shared_examples.rb
new file mode 100644
index 00000000000..25788b6ddad
--- /dev/null
+++ b/spec/support/group_tree_shared_examples.rb
@@ -0,0 +1,74 @@
+shared_examples 'project tree json' do |method|
+ let(:parent) { create(:group, parent: group) }
+ let!(:project) { create(:project, group: parent) }
+ let(:subgroup) { create(:group, parent: parent) }
+
+ before do
+ parent.add_owner(user)
+ end
+
+ def group_json
+ json_response.detect { |json| json['id'] == parent.id }
+ end
+
+ it 'includes projects that are direct children' do
+ create(:project, group: subgroup)
+
+ get method, { format: :json }.merge(request_params)
+
+ project_ids = group_json['projects'].map { |project_json| project_json['id'] }
+
+ expect(project_ids).to contain_exactly(project.id)
+ end
+
+ it 'includes projects when a parent-id is given' do
+ sub_project = create(:project, group: subgroup)
+
+ get method, { parent_id: parent.id, format: :json }.merge(request_params)
+
+ subgroup_json = json_response.detect { |json| json['id'] == subgroup.id }
+ project_json = subgroup_json['projects'].first
+
+ expect(project_json['id']).to eq(sub_project.id)
+ end
+
+ context 'with multiple projects' do
+ before do
+ create_list(:project, 10, group: parent)
+ end
+
+ it 'only includes the 10 first projects per group' do
+ get method, { format: :json }.merge(request_params)
+
+ expect(group_json['projects'].size).to eq(10)
+ end
+
+ it 'includes the total project count' do
+ get method, { format: :json }.merge(request_params)
+
+ expect(group_json['project_count']).to eq(11)
+ end
+ end
+
+ context 'searching' do
+ it 'includes matching groups' do
+ matching_group = create(:group, parent: parent, name: 'queryme')
+
+ get method, { filter_groups: 'quer', format: :json }.merge(request_params)
+
+ group_ids = json_response.map { |group_json| group_json['id'] }
+
+ expect(group_ids).to include(matching_group.id)
+ end
+
+ it 'includes a matching subgroup' do
+ matching_group = create(:group, parent: subgroup, name: 'queryme')
+
+ get method, { filter_groups: 'quer', format: :json }.merge(request_params)
+
+ group_ids = json_response.map { |group_json| group_json['id'] }
+
+ expect(group_ids).to include(matching_group.id)
+ end
+ end
+end