From 41fe97390ceddf945f3d967b8fdb3de4c66b7dea Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 18 Mar 2022 20:02:30 +0000 Subject: Add latest changes from gitlab-org/gitlab@14-9-stable-ee --- .../api/graphql/group/group_members_spec.rb | 46 ++++++++++++++++++++++ spec/requests/api/graphql/group/issues_spec.rb | 25 ++++++++++++ .../api/graphql/group/merge_requests_spec.rb | 21 ++++++++++ .../api/graphql/group/work_item_types_spec.rb | 4 +- 4 files changed, 94 insertions(+), 2 deletions(-) (limited to 'spec/requests/api/graphql/group') diff --git a/spec/requests/api/graphql/group/group_members_spec.rb b/spec/requests/api/graphql/group/group_members_spec.rb index 06afb5b9a49..78852622835 100644 --- a/spec/requests/api/graphql/group/group_members_spec.rb +++ b/spec/requests/api/graphql/group/group_members_spec.rb @@ -53,6 +53,30 @@ RSpec.describe 'getting group members information' do end end + context "when requesting member's notification email" do + context 'when current_user is admin' do + let_it_be(:admin_user) { create(:user, :admin) } + + it 'returns notification email' do + fetch_members_notification_email(current_user: admin_user) + notification_emails = graphql_data_at(:group, :group_members, :edges, :node, :notification_email) + + expect(notification_emails).to all be_present + expect(graphql_errors).to be_nil + end + end + + context 'when current_user is not admin' do + it 'returns an error' do + fetch_members_notification_email + + expect(graphql_errors.first) + .to include('path' => ['group', 'groupMembers', 'edges', 0, 'node', 'notificationEmail'], + 'message' => a_string_including("you don't have permission to perform this action")) + end + end + end + context 'member relations' do let_it_be(:child_group) { create(:group, :public, parent: parent_group) } let_it_be(:grandchild_group) { create(:group, :public, parent: child_group) } @@ -117,6 +141,10 @@ RSpec.describe 'getting group members information' do post_graphql(members_query(group.full_path, args), current_user: current_user) end + def fetch_members_notification_email(group: parent_group, current_user: user) + post_graphql(member_notification_email_query(group.full_path), current_user: current_user) + end + def members_query(group_path, args = {}) members_node = <<~NODE edges { @@ -134,6 +162,24 @@ RSpec.describe 'getting group members information' do ) end + def member_notification_email_query(group_path) + members_node = <<~NODE + edges { + node { + user { + id + } + notificationEmail + } + } + NODE + + graphql_query_for("group", + { full_path: group_path }, + [query_graphql_field("groupMembers", {}, members_node)] + ) + end + def expect_array_response(*items) expect(response).to have_gitlab_http_status(:success) member_gids = graphql_data_at(:group, :group_members, :edges, :node, :user, :id) diff --git a/spec/requests/api/graphql/group/issues_spec.rb b/spec/requests/api/graphql/group/issues_spec.rb index 332bf242e9c..26338f46611 100644 --- a/spec/requests/api/graphql/group/issues_spec.rb +++ b/spec/requests/api/graphql/group/issues_spec.rb @@ -44,6 +44,31 @@ RSpec.describe 'getting an issue list for a group' do end end + context 'when there are archived projects' do + let_it_be(:archived_project) { create(:project, :archived, group: group1) } + let_it_be(:archived_issue) { create(:issue, project: archived_project) } + + before_all do + group1.add_developer(current_user) + end + + it 'excludes issues from archived projects by default' do + post_graphql(query, current_user: current_user) + + expect(issues_ids).to contain_exactly(issue1_gid, issue2_gid) + end + + context 'when include_archived is true' do + let(:issue_filter_params) { { include_archived: true } } + + it 'includes issues from archived projects' do + post_graphql(query, current_user: current_user) + + expect(issues_ids).to contain_exactly(issue1_gid, issue2_gid, archived_issue.to_global_id.to_s) + end + end + end + context 'when there is a confidential issue' do let_it_be(:confidential_issue1) { create(:issue, :confidential, project: project1) } let_it_be(:confidential_issue2) { create(:issue, :confidential, project: project2) } diff --git a/spec/requests/api/graphql/group/merge_requests_spec.rb b/spec/requests/api/graphql/group/merge_requests_spec.rb index e9a5e558b1d..c0faff11c8d 100644 --- a/spec/requests/api/graphql/group/merge_requests_spec.rb +++ b/spec/requests/api/graphql/group/merge_requests_spec.rb @@ -16,6 +16,9 @@ RSpec.describe 'Query.group.mergeRequests' do let_it_be(:project_x) { create(:project, :repository) } let_it_be(:user) { create(:user, developer_projects: [project_x]) } + let_it_be(:archived_project) { create(:project, :archived, :repository, group: group) } + let_it_be(:archived_mr) { create(:merge_request, source_project: archived_project) } + let_it_be(:mr_attrs) do { target_branch: 'master' } end @@ -119,4 +122,22 @@ RSpec.describe 'Query.group.mergeRequests' do expect(mrs_data).to match_array(expected_mrs(mrs_a + mrs_b + mrs_c)) end end + + describe 'passing include_archived: true' do + let(:query) do + <<~GQL + query($path: ID!) { + group(fullPath: $path) { + mergeRequests(includeArchived: true) { nodes { id } } + } + } + GQL + end + + it 'can find all merge requests in the group, including from archived projects' do + post_graphql(query, current_user: user, variables: { path: group.full_path }) + + expect(mrs_data).to match_array(expected_mrs(mrs_a + mrs_b + [archived_mr])) + end + end end diff --git a/spec/requests/api/graphql/group/work_item_types_spec.rb b/spec/requests/api/graphql/group/work_item_types_spec.rb index 0667e09d1e9..a33e3ae5427 100644 --- a/spec/requests/api/graphql/group/work_item_types_spec.rb +++ b/spec/requests/api/graphql/group/work_item_types_spec.rb @@ -64,8 +64,8 @@ RSpec.describe 'getting a list of work item types for a group' do post_graphql(query, current_user: current_user) end - it 'makes the workItemTypes field unavailable' do - expect(graphql_errors).to contain_exactly(hash_including("message" => "Field 'workItemTypes' doesn't exist on type 'Group'")) + it 'returns null' do + expect(graphql_data.dig('group', 'workItemTypes')).to be_nil end end end -- cgit v1.2.3