diff options
Diffstat (limited to 'spec/support/group_tree_shared_examples.rb')
-rw-r--r-- | spec/support/group_tree_shared_examples.rb | 74 |
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 |