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
This commit is contained in:
Patrick Derichs 2019-06-15 06:56:28 +02:00
parent b05de5a583
commit 453a9b298c
6 changed files with 81 additions and 1 deletions

View file

@ -49,5 +49,7 @@ module Types
field :created_at, Types::TimeType, null: false
field :updated_at, Types::TimeType, null: false
field :task_completion_status, Types::TaskCompletionStatus, null: false
end
end

View file

@ -53,5 +53,7 @@ module Types
field :head_pipeline, Types::Ci::PipelineType, null: true, method: :actual_head_pipeline
field :pipelines, Types::Ci::PipelineType.connection_type,
resolver: Resolvers::MergeRequestPipelinesResolver
field :task_completion_status, Types::TaskCompletionStatus, null: false
end
end

View file

@ -0,0 +1,11 @@
# 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

View file

@ -0,0 +1,5 @@
---
title: Make task completion status available via GraphQL
merge_request:
author:
type: added

View file

@ -0,0 +1,60 @@
# 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

View file

@ -157,7 +157,7 @@ module GraphqlHelpers
when Array # multiplexed queries
json_response.map { |response| response['errors'] }
else
raise "Unkown GraphQL response type #{json_response.class}"
raise "Unknown GraphQL response type #{json_response.class}"
end
end