Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/requests/api/graphql/group/milestones_spec.rb')
-rw-r--r--spec/requests/api/graphql/group/milestones_spec.rb119
1 files changed, 95 insertions, 24 deletions
diff --git a/spec/requests/api/graphql/group/milestones_spec.rb b/spec/requests/api/graphql/group/milestones_spec.rb
index bad0024e7a3..380eaea17f8 100644
--- a/spec/requests/api/graphql/group/milestones_spec.rb
+++ b/spec/requests/api/graphql/group/milestones_spec.rb
@@ -2,21 +2,22 @@
require 'spec_helper'
-describe 'Milestones through GroupQuery' do
+RSpec.describe 'Milestones through GroupQuery' do
include GraphqlHelpers
let_it_be(:user) { create(:user) }
let_it_be(:now) { Time.now }
- let_it_be(:group) { create(:group) }
- let_it_be(:milestone_1) { create(:milestone, group: group) }
- let_it_be(:milestone_2) { create(:milestone, group: group, state: :closed, start_date: now, due_date: now + 1.day) }
- let_it_be(:milestone_3) { create(:milestone, group: group, start_date: now, due_date: now + 2.days) }
- let_it_be(:milestone_4) { create(:milestone, group: group, state: :closed, start_date: now - 2.days, due_date: now - 1.day) }
- let_it_be(:milestone_from_other_group) { create(:milestone, group: create(:group)) }
-
- let(:milestone_data) { graphql_data['group']['milestones']['edges'] }
describe 'Get list of milestones from a group' do
+ let_it_be(:group) { create(:group) }
+ let_it_be(:milestone_1) { create(:milestone, group: group) }
+ let_it_be(:milestone_2) { create(:milestone, group: group, state: :closed, start_date: now, due_date: now + 1.day) }
+ let_it_be(:milestone_3) { create(:milestone, group: group, start_date: now, due_date: now + 2.days) }
+ let_it_be(:milestone_4) { create(:milestone, group: group, state: :closed, start_date: now - 2.days, due_date: now - 1.day) }
+ let_it_be(:milestone_from_other_group) { create(:milestone, group: create(:group)) }
+
+ let(:milestone_data) { graphql_data['group']['milestones']['edges'] }
+
context 'when the request is correct' do
before do
fetch_milestones(user)
@@ -72,21 +73,6 @@ describe 'Milestones through GroupQuery' do
submilestone_1.to_global_id.to_s, submilestone_2.to_global_id.to_s
)
end
-
- context 'when group_milestone_descendants is disabled' do
- before do
- stub_feature_flags(group_milestone_descendants: false)
- end
-
- it 'ignores descendant milestones' do
- fetch_milestones(user, args)
-
- expect_array_response(
- milestone_1.to_global_id.to_s, milestone_2.to_global_id.to_s,
- milestone_3.to_global_id.to_s, milestone_4.to_global_id.to_s
- )
- end
- end
end
def fetch_milestones(user = nil, args = {})
@@ -120,4 +106,89 @@ describe 'Milestones through GroupQuery' do
node_array(milestone_data, extract_attribute)
end
end
+
+ describe 'ensures each field returns the correct value' do
+ let_it_be(:group) { create(:group) }
+ let_it_be(:project) { create(:project, group: group) }
+ let_it_be(:milestone) { create(:milestone, group: group, start_date: now, due_date: now + 1.day) }
+ let_it_be(:open_issue) { create(:issue, project: project, milestone: milestone) }
+ let_it_be(:closed_issue) { create(:issue, :closed, project: project, milestone: milestone) }
+
+ let(:milestone_query) do
+ %{
+ id
+ title
+ description
+ state
+ webPath
+ dueDate
+ startDate
+ createdAt
+ updatedAt
+ projectMilestone
+ groupMilestone
+ subgroupMilestone
+ }
+ end
+
+ def post_query
+ full_query = graphql_query_for("group",
+ { full_path: group.full_path },
+ [query_graphql_field("milestones", nil, "nodes { #{milestone_query} }")]
+ )
+
+ post_graphql(full_query, current_user: user)
+
+ graphql_data.dig('group', 'milestones', 'nodes', 0)
+ end
+
+ it 'returns correct values for scalar fields' do
+ expect(post_query).to eq({
+ 'id' => global_id_of(milestone),
+ 'title' => milestone.title,
+ 'description' => milestone.description,
+ 'state' => 'active',
+ 'webPath' => milestone_path(milestone),
+ 'dueDate' => milestone.due_date.iso8601,
+ 'startDate' => milestone.start_date.iso8601,
+ 'createdAt' => milestone.created_at.iso8601,
+ 'updatedAt' => milestone.updated_at.iso8601,
+ 'projectMilestone' => false,
+ 'groupMilestone' => true,
+ 'subgroupMilestone' => false
+ })
+ end
+
+ context 'milestone statistics' do
+ let(:milestone_query) do
+ %{
+ stats {
+ totalIssuesCount
+ closedIssuesCount
+ }
+ }
+ end
+
+ it 'returns the correct milestone statistics' do
+ expect(post_query).to eq({
+ 'stats' => {
+ 'totalIssuesCount' => 2,
+ 'closedIssuesCount' => 1
+ }
+ })
+ end
+
+ context 'when the graphql_milestone_stats feature flag is disabled' do
+ before do
+ stub_feature_flags(graphql_milestone_stats: false)
+ end
+
+ it 'returns nil for the stats field' do
+ expect(post_query).to eq({
+ 'stats' => nil
+ })
+ end
+ end
+ end
+ end
end