Commit 453a9b29 authored by Patrick Derichs's avatar Patrick Derichs

Add task count and completed count to graphql types

Add specs for task completion status (graphql)

Fix style issues

Changed format of constants in spec

Refactor specs to reduce creation of records

Reduce parameters to merge request creation

Use set's for project and user

Move let's out of it_behaves_like block

Fix description parameter

Fix format of lets

Use dig to get task completion status out of graphql response

Modified rspec output

Add changelog entry
parent b05de5a5
...@@ -49,5 +49,7 @@ module Types ...@@ -49,5 +49,7 @@ module Types
field :created_at, Types::TimeType, null: false field :created_at, Types::TimeType, null: false
field :updated_at, Types::TimeType, null: false field :updated_at, Types::TimeType, null: false
field :task_completion_status, Types::TaskCompletionStatus, null: false
end end
end end
...@@ -53,5 +53,7 @@ module Types ...@@ -53,5 +53,7 @@ module Types
field :head_pipeline, Types::Ci::PipelineType, null: true, method: :actual_head_pipeline field :head_pipeline, Types::Ci::PipelineType, null: true, method: :actual_head_pipeline
field :pipelines, Types::Ci::PipelineType.connection_type, field :pipelines, Types::Ci::PipelineType.connection_type,
resolver: Resolvers::MergeRequestPipelinesResolver resolver: Resolvers::MergeRequestPipelinesResolver
field :task_completion_status, Types::TaskCompletionStatus, null: false
end end
end end
# frozen_string_literal: true
module Types
class TaskCompletionStatus < BaseObject
graphql_name 'TaskCompletionStatus'
description 'Completion status of tasks'
field :count, GraphQL::INT_TYPE, null: false
field :completed_count, GraphQL::INT_TYPE, null: false
end
end
---
title: Make task completion status available via GraphQL
merge_request:
author:
type: added
# frozen_string_literal: true
require 'spec_helper'
describe 'getting task completion status information' do
include GraphqlHelpers
DESCRIPTION_0_DONE = '- [ ] task 1\n- [ ] task 2'
DESCRIPTION_1_DONE = '- [x] task 1\n- [ ] task 2'
DESCRIPTION_2_DONE = '- [x] task 1\n- [x] task 2'
set(:user1) { create(:user) }
set(:project) { create(:project, :repository, :public) }
let(:fields) do
<<~QUERY
taskCompletionStatus {
count,
completedCount
}
QUERY
end
def create_task_completion_status_query_for(type, iid)
graphql_query_for(
'project',
{ 'fullPath' => project.full_path },
query_graphql_field(type, { iid: iid }, fields)
)
end
shared_examples_for 'graphql task completion status provider' do |type|
it 'returns the expected task completion status' do
post_graphql(create_task_completion_status_query_for(type, item.iid), current_user: user1)
expect(response).to have_gitlab_http_status(200)
task_completion_status = graphql_data.dig('project', type, 'taskCompletionStatus')
expect(task_completion_status).not_to be_nil
expect(task_completion_status['count']).to eq(item.task_completion_status[:count])
expect(task_completion_status['completedCount']).to eq(item.task_completion_status[:completed_count])
end
end
[DESCRIPTION_0_DONE, DESCRIPTION_1_DONE, DESCRIPTION_2_DONE].each do |desc|
context "with description #{desc}" do
context 'when type is issue' do
it_behaves_like 'graphql task completion status provider', 'issue' do
let(:item) { create(:issue, project: project, description: desc) }
end
end
context 'when type is merge request' do
it_behaves_like 'graphql task completion status provider', 'mergeRequest' do
let(:item) { create(:merge_request, author: user1, source_project: project, description: desc) }
end
end
end
end
end
...@@ -157,7 +157,7 @@ module GraphqlHelpers ...@@ -157,7 +157,7 @@ module GraphqlHelpers
when Array # multiplexed queries when Array # multiplexed queries
json_response.map { |response| response['errors'] } json_response.map { |response| response['errors'] }
else else
raise "Unkown GraphQL response type #{json_response.class}" raise "Unknown GraphQL response type #{json_response.class}"
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment