Use AwardEmojis services in GraphQL mutations
https://gitlab.com/gitlab-org/gitlab-ce/issues/63372
This commit is contained in:
parent
37b17fa61a
commit
15b02da69f
|
@ -10,14 +10,11 @@ module Mutations
|
|||
|
||||
check_object_is_awardable!(awardable)
|
||||
|
||||
# TODO this will be handled by AwardEmoji::AddService
|
||||
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/63372 and
|
||||
# https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/29782
|
||||
award = awardable.create_award_emoji(args[:name], current_user)
|
||||
service = ::AwardEmojis::AddService.new(awardable, args[:name], current_user).execute
|
||||
|
||||
{
|
||||
award_emoji: (award if award.persisted?),
|
||||
errors: errors_on_object(award)
|
||||
award_emoji: (service[:award] if service[:status] == :success),
|
||||
errors: service[:errors] || []
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,22 +10,11 @@ module Mutations
|
|||
|
||||
check_object_is_awardable!(awardable)
|
||||
|
||||
# TODO this check can be removed once AwardEmoji services are available.
|
||||
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/63372 and
|
||||
# https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/29782
|
||||
unless awardable.awarded_emoji?(args[:name], current_user)
|
||||
raise Gitlab::Graphql::Errors::ResourceNotAvailable,
|
||||
'You have not awarded emoji of type name to the awardable'
|
||||
end
|
||||
|
||||
# TODO this will be handled by AwardEmoji::DestroyService
|
||||
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/63372 and
|
||||
# https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/29782
|
||||
awardable.remove_award_emoji(args[:name], current_user)
|
||||
service = ::AwardEmojis::DestroyService.new(awardable, args[:name], current_user).execute
|
||||
|
||||
{
|
||||
# Mutation response is always a `nil` award_emoji
|
||||
errors: []
|
||||
errors: service[:errors] || []
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -15,23 +15,15 @@ module Mutations
|
|||
|
||||
check_object_is_awardable!(awardable)
|
||||
|
||||
# TODO this will be handled by AwardEmoji::ToggleService
|
||||
# See https://gitlab.com/gitlab-org/gitlab-ce/issues/63372 and
|
||||
# https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/29782
|
||||
award = awardable.toggle_award_emoji(args[:name], current_user)
|
||||
|
||||
# Destroy returns a collection :(
|
||||
award = award.first if award.is_a?(Array)
|
||||
|
||||
errors = errors_on_object(award)
|
||||
service = ::AwardEmojis::ToggleService.new(awardable, args[:name], current_user).execute
|
||||
|
||||
toggled_on = awardable.awarded_emoji?(args[:name], current_user)
|
||||
|
||||
{
|
||||
# For consistency with the AwardEmojis::Remove mutation, only return
|
||||
# the AwardEmoji if it was created and not destroyed
|
||||
award_emoji: (award if toggled_on),
|
||||
errors: errors,
|
||||
award_emoji: (service[:award] if toggled_on),
|
||||
errors: service[:errors] || [],
|
||||
toggled_on: toggled_on
|
||||
}
|
||||
end
|
||||
|
|
|
@ -5,9 +5,9 @@ require 'spec_helper'
|
|||
describe 'Adding an AwardEmoji' do
|
||||
include GraphqlHelpers
|
||||
|
||||
let(:current_user) { create(:user) }
|
||||
let(:awardable) { create(:note) }
|
||||
let(:project) { awardable.project }
|
||||
set(:current_user) { create(:user) }
|
||||
set(:project) { create(:project) }
|
||||
set(:awardable) { create(:note, project: project) }
|
||||
let(:emoji_name) { 'thumbsup' }
|
||||
let(:mutation) do
|
||||
variables = {
|
||||
|
@ -43,7 +43,7 @@ describe 'Adding an AwardEmoji' do
|
|||
end
|
||||
|
||||
context 'when the given awardable is not an Awardable' do
|
||||
let(:awardable) { create(:label) }
|
||||
let(:awardable) { create(:label, project: project) }
|
||||
|
||||
it_behaves_like 'a mutation that does not create an AwardEmoji'
|
||||
|
||||
|
@ -52,7 +52,7 @@ describe 'Adding an AwardEmoji' do
|
|||
end
|
||||
|
||||
context 'when the given awardable is an Awardable but still cannot be awarded an emoji' do
|
||||
let(:awardable) { create(:system_note) }
|
||||
let(:awardable) { create(:system_note, project: project) }
|
||||
|
||||
it_behaves_like 'a mutation that does not create an AwardEmoji'
|
||||
|
||||
|
@ -73,6 +73,13 @@ describe 'Adding an AwardEmoji' do
|
|||
expect(mutation_response['awardEmoji']['name']).to eq(emoji_name)
|
||||
end
|
||||
|
||||
describe 'marking Todos as done' do
|
||||
let(:user) { current_user}
|
||||
subject { post_graphql_mutation(mutation, current_user: user) }
|
||||
|
||||
include_examples 'creating award emojis marks Todos as done'
|
||||
end
|
||||
|
||||
context 'when there were active record validation errors' do
|
||||
before do
|
||||
expect_next_instance_of(AwardEmoji) do |award|
|
||||
|
|
|
@ -5,9 +5,9 @@ require 'spec_helper'
|
|||
describe 'Toggling an AwardEmoji' do
|
||||
include GraphqlHelpers
|
||||
|
||||
let(:current_user) { create(:user) }
|
||||
let(:awardable) { create(:note) }
|
||||
let(:project) { awardable.project }
|
||||
set(:current_user) { create(:user) }
|
||||
set(:project) { create(:project) }
|
||||
set(:awardable) { create(:note, project: project) }
|
||||
let(:emoji_name) { 'thumbsup' }
|
||||
let(:mutation) do
|
||||
variables = {
|
||||
|
@ -40,7 +40,7 @@ describe 'Toggling an AwardEmoji' do
|
|||
end
|
||||
|
||||
context 'when the given awardable is not an Awardable' do
|
||||
let(:awardable) { create(:label) }
|
||||
let(:awardable) { create(:label, project: project) }
|
||||
|
||||
it_behaves_like 'a mutation that does not create or destroy an AwardEmoji'
|
||||
|
||||
|
@ -49,7 +49,7 @@ describe 'Toggling an AwardEmoji' do
|
|||
end
|
||||
|
||||
context 'when the given awardable is an Awardable but still cannot be awarded an emoji' do
|
||||
let(:awardable) { create(:system_note) }
|
||||
let(:awardable) { create(:system_note, project: project) }
|
||||
|
||||
it_behaves_like 'a mutation that does not create or destroy an AwardEmoji'
|
||||
|
||||
|
@ -81,6 +81,13 @@ describe 'Toggling an AwardEmoji' do
|
|||
expect(mutation_response['toggledOn']).to eq(true)
|
||||
end
|
||||
|
||||
describe 'marking Todos as done' do
|
||||
let(:user) { current_user}
|
||||
subject { post_graphql_mutation(mutation, current_user: user) }
|
||||
|
||||
include_examples 'creating award emojis marks Todos as done'
|
||||
end
|
||||
|
||||
context 'when there were active record validation errors' do
|
||||
before do
|
||||
expect_next_instance_of(AwardEmoji) do |award|
|
||||
|
|
Loading…
Reference in New Issue