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:
parent
b05de5a583
commit
453a9b298c
6 changed files with 81 additions and 1 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
11
app/graphql/types/task_completion_status.rb
Normal file
11
app/graphql/types/task_completion_status.rb
Normal 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
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Make task completion status available via GraphQL
|
||||
merge_request:
|
||||
author:
|
||||
type: added
|
|
@ -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
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue