debian-mirror-gitlab/spec/requests/api/graphql/group_query_spec.rb

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

141 lines
5.1 KiB
Ruby
Raw Normal View History

2019-07-31 22:56:46 +05:30
# frozen_string_literal: true
require 'spec_helper'
# Based on spec/requests/api/groups_spec.rb
# Should follow closely in order to ensure all situations are covered
2021-02-22 17:27:13 +05:30
RSpec.describe 'getting group information' do
2019-07-31 22:56:46 +05:30
include GraphqlHelpers
include UploadHelpers
2021-10-27 15:23:28 +05:30
let_it_be(:user1) { create(:user, can_create_group: false) }
let_it_be(:user2) { create(:user) }
let_it_be(:admin) { create(:admin) }
let_it_be(:private_group) { create(:group, :private) }
let_it_be(:public_group) { create(:group, :public) }
2019-07-31 22:56:46 +05:30
# similar to the API "GET /groups/:id"
describe "Query group(fullPath)" do
def group_query(group)
2021-04-29 21:17:54 +05:30
fields = all_graphql_fields_for('Group')
# TODO: Set required timelogs args elsewhere https://gitlab.com/gitlab-org/gitlab/-/issues/325499
fields.selection['timelogs(startDate: "2021-03-01" endDate: "2021-03-30")'] = fields.selection.delete('timelogs')
graphql_query_for(
'group',
{ fullPath: group.full_path },
fields
)
2019-07-31 22:56:46 +05:30
end
it_behaves_like 'a working graphql query' do
before do
post_graphql(group_query(public_group))
end
end
context 'when unauthenticated' do
it 'returns nil for a private group' do
post_graphql(group_query(private_group))
expect(graphql_data['group']).to be_nil
end
it 'returns a public group' do
post_graphql(group_query(public_group))
expect(graphql_data['group']).not_to be_nil
end
end
context "when authenticated as user" do
let!(:group1) { create(:group, avatar: File.open(uploaded_image_temp_path)) }
let!(:group2) { create(:group, :private) }
before do
group1.add_owner(user1)
group2.add_owner(user2)
end
it "returns one of user1's groups" do
project = create(:project, namespace: group2, path: 'Foo')
2020-04-22 19:07:51 +05:30
issue = create(:issue, project: create(:project, group: group1))
2019-07-31 22:56:46 +05:30
create(:project_group_link, project: project, group: group1)
post_graphql(group_query(group1), current_user: user1)
2020-03-13 15:44:24 +05:30
expect(response).to have_gitlab_http_status(:ok)
2019-09-04 21:01:54 +05:30
expect(graphql_data['group']['id']).to eq(group1.to_global_id.to_s)
2019-07-31 22:56:46 +05:30
expect(graphql_data['group']['name']).to eq(group1.name)
expect(graphql_data['group']['path']).to eq(group1.path)
expect(graphql_data['group']['description']).to eq(group1.description)
expect(graphql_data['group']['visibility']).to eq(Gitlab::VisibilityLevel.string_level(group1.visibility_level))
expect(graphql_data['group']['avatarUrl']).to eq(group1.avatar_url(only_path: false))
expect(graphql_data['group']['webUrl']).to eq(group1.web_url)
expect(graphql_data['group']['requestAccessEnabled']).to eq(group1.request_access_enabled)
expect(graphql_data['group']['fullName']).to eq(group1.full_name)
expect(graphql_data['group']['fullPath']).to eq(group1.full_path)
expect(graphql_data['group']['parentId']).to eq(group1.parent_id)
2020-04-22 19:07:51 +05:30
expect(graphql_data['group']['issues']['nodes'].count).to eq(1)
expect(graphql_data['group']['issues']['nodes'][0]['iid']).to eq(issue.iid.to_s)
2021-10-27 15:23:28 +05:30
expect(graphql_data['group']['sharedRunnersSetting']).to eq(group1.shared_runners_setting.upcase)
2019-07-31 22:56:46 +05:30
end
it "does not return a non existing group" do
query = graphql_query_for('group', 'fullPath' => '1328')
post_graphql(query, current_user: user1)
expect(graphql_data['group']).to be_nil
end
it "does not return a group not attached to user1" do
private_group.add_owner(user2)
post_graphql(group_query(private_group), current_user: user1)
expect(graphql_data['group']).to be_nil
end
2021-09-04 01:27:46 +05:30
it 'avoids N+1 queries', :assume_throttled do
2020-11-24 15:15:51 +05:30
pending('See: https://gitlab.com/gitlab-org/gitlab/-/issues/245272')
2019-07-31 22:56:46 +05:30
2019-09-04 21:01:54 +05:30
queries = [{ query: group_query(group1) },
{ query: group_query(group2) }]
2019-07-31 22:56:46 +05:30
2020-11-24 15:15:51 +05:30
expect { post_multiplex(queries, current_user: admin) }
.to issue_same_number_of_queries_as { post_graphql(group_query(group1), current_user: admin) }
2019-07-31 22:56:46 +05:30
end
2021-10-27 15:23:28 +05:30
context "when querying group's descendant groups" do
let_it_be(:subgroup1) { create(:group, parent: public_group) }
let_it_be(:subgroup2) { create(:group, parent: subgroup1) }
let(:descendants) { [subgroup1, subgroup2] }
it 'returns all descendant groups user has access to' do
post_graphql(group_query(public_group), current_user: admin)
names = graphql_data['group']['descendantGroups']['nodes'].map { |n| n['name'] }
expect(names).to match_array(descendants.map(&:name))
end
end
2019-07-31 22:56:46 +05:30
end
context "when authenticated as admin" do
it "returns any existing group" do
post_graphql(group_query(private_group), current_user: admin)
expect(graphql_data['group']['name']).to eq(private_group.name)
end
it "does not return a non existing group" do
query = graphql_query_for('group', 'fullPath' => '1328')
post_graphql(query, current_user: admin)
expect(graphql_data['group']).to be_nil
end
end
end
end