Skip to content
Snippets Groups Projects
Unverified Commit f8a0cc49 authored by Brett Walker's avatar Brett Walker Committed by GitLab
Browse files

Merge branch 'bw-refactor-ruby-thumbs' into 'master'

Use AwardEmoji constants for thumbs (ruby)

See merge request https://gitlab.com/gitlab-org/gitlab/-/merge_requests/169473



Merged-by: default avatarBrett Walker <bwalker@gitlab.com>
Approved-by: default avatarAdie (she/her) <avpfestin@gitlab.com>
Approved-by: default avatarRodrigo Tomonari <rtomonari@gitlab.com>
Approved-by: default avatarJon Jenkins <jjenkins@gitlab.com>
parents ac9b3ca2 0e3b93aa
No related branches found
No related tags found
No related merge requests found
Showing
with 73 additions and 64 deletions
Loading
Loading
@@ -54,9 +54,9 @@ def award_state_class(awardable, awards, current_user)
def awards_sort(awards)
awards.sort_by do |award, award_emojis|
case award
when "thumbsup"
when AwardEmoji::THUMBS_UP
0
when "thumbsdown"
when AwardEmoji::THUMBS_DOWN
1
else
2
Loading
Loading
# frozen_string_literal: true
 
class AwardEmoji < ApplicationRecord
DOWNVOTE_NAME = "thumbsdown"
UPVOTE_NAME = "thumbsup"
THUMBS_UP = 'thumbsup'
THUMBS_DOWN = 'thumbsdown'
UPVOTE_NAME = THUMBS_UP
DOWNVOTE_NAME = THUMBS_DOWN
 
include Participable
include GhostUser
Loading
Loading
Loading
Loading
@@ -87,7 +87,7 @@ def emoji_events_data
 
award_emoji = AwardEmoji.new(
id: 1,
name: 'thumbsup',
name: AwardEmoji::THUMBS_UP,
user: current_user,
awardable: project.notes.last,
created_at: Time.zone.now,
Loading
Loading
Loading
Loading
@@ -217,17 +217,17 @@ def request
 
it "toggles the award emoji" do
expect do
post(:toggle_award_emoji, params: request_params.merge(name: "thumbsup"))
post(:toggle_award_emoji, params: request_params.merge(name: AwardEmoji::THUMBS_UP))
end.to change { note.award_emoji.count }.by(1)
 
expect(response).to have_gitlab_http_status(:ok)
end
 
it "removes the already awarded emoji" do
post(:toggle_award_emoji, params: request_params.merge(name: "thumbsup"))
post(:toggle_award_emoji, params: request_params.merge(name: AwardEmoji::THUMBS_UP))
 
expect do
post(:toggle_award_emoji, params: request_params.merge(name: "thumbsup"))
post(:toggle_award_emoji, params: request_params.merge(name: AwardEmoji::THUMBS_UP))
end.to change { AwardEmoji.count }.by(-1)
 
expect(response).to have_gitlab_http_status(:ok)
Loading
Loading
Loading
Loading
@@ -252,7 +252,7 @@ def request
end
 
describe 'POST toggle_award_emoji' do
let(:emoji_name) { 'thumbsup' }
let(:emoji_name) { AwardEmoji::THUMBS_UP }
let(:request_params) do
{
id: note,
Loading
Loading
Loading
Loading
@@ -95,7 +95,7 @@ def epics(params = {})
 
context 'by user reaction emoji' do
it 'returns epics reacted to by user' do
create(:award_emoji, name: 'thumbsup', awardable: epic1, user: search_user)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic1, user: search_user)
create(:award_emoji, name: 'star', awardable: epic3, user: search_user)
 
expect(epics(my_reaction_emoji: 'star')).to contain_exactly(epic3)
Loading
Loading
@@ -1022,7 +1022,7 @@ def execute
end
 
context 'with negated reaction emoji' do
let_it_be(:awarded_emoji) { create(:award_emoji, name: 'thumbsup', awardable: epic3, user: search_user) }
let_it_be(:awarded_emoji) { create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic3, user: search_user) }
let_it_be(:params) { { not: { my_reaction_emoji: awarded_emoji.name } } }
 
it 'returns all epics without given emoji name' do
Loading
Loading
Loading
Loading
@@ -45,7 +45,7 @@ def resolve_board_list_epics(args: {})
let_it_be(:production_label) { create(:group_label, group: group, name: 'production') }
let_it_be(:list1_epic3) { create(:labeled_epic, group: group, labels: [development, production_label], title: 'filter_this 1') }
let_it_be(:list1_epic4) { create(:labeled_epic, group: group, labels: [development], description: 'filter_this 2') }
let_it_be(:awarded_emoji) { create(:award_emoji, name: 'thumbsup', awardable: list1_epic1, user: user) }
let_it_be(:awarded_emoji) { create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: list1_epic1, user: user) }
 
subject(:results) { resolve(described_class, ctx: { current_user: user }, obj: list1, args: args) }
 
Loading
Loading
Loading
Loading
@@ -146,7 +146,7 @@
context 'with my_reaction_emoji' do
it 'filters epics by reaction emoji' do
create(:award_emoji, name: 'man_in_business_suit_levitating', user: current_user, awardable: epic1)
create(:award_emoji, name: 'thumbsdown', user: current_user, awardable: epic2)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, user: current_user, awardable: epic2)
 
epics = resolve_epics(my_reaction_emoji: 'man_in_business_suit_levitating')
 
Loading
Loading
@@ -319,7 +319,7 @@
let_it_be(:epic_1) { create(:labeled_epic, group: group, labels: [label]) }
let_it_be(:epic_2) { create(:epic, group: group, author: author) }
let_it_be(:epic_3) { create(:epic, group: group) }
let_it_be(:awarded_emoji) { create(:award_emoji, name: 'thumbsup', awardable: epic_3, user: current_user) }
let_it_be(:awarded_emoji) { create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic_3, user: current_user) }
 
subject(:results) { resolve_epics(args) }
 
Loading
Loading
Loading
Loading
@@ -35,7 +35,9 @@
 
let_it_be(:issue_with_iteration) { create(:issue, project: project_1, assignees: [other_user]) }
let_it_be(:issue_with_epic) { create(:issue, project: project_2, labels: [label], milestone: milestone) }
let_it_be(:award_emoji) { create(:award_emoji, name: 'thumbsup', user: user, awardable: issue_with_epic) }
let_it_be(:award_emoji) do
create(:award_emoji, name: AwardEmoji::THUMBS_UP, user: user, awardable: issue_with_epic)
end
 
let_it_be(:stage) do
create(:cycle_analytics_stage,
Loading
Loading
@@ -213,7 +215,7 @@
 
context 'when filtering by my_reaction_emoji' do
it 'filters by my_reaction_emoji' do
params[:my_reaction_emoji] = 'thumbsup'
params[:my_reaction_emoji] = AwardEmoji::THUMBS_UP
 
expect(issue_ids).to eq([stage_event_2.issue_id])
end
Loading
Loading
@@ -228,7 +230,7 @@
 
context 'when the filter is negated' do
it 'returns items without the given rection emoji' do
params[:not] = { my_reaction_emoji: 'thumbsup' }
params[:not] = { my_reaction_emoji: AwardEmoji::THUMBS_UP }
 
expect(issue_ids).to eq([stage_event_1.issue_id])
end
Loading
Loading
@@ -270,7 +272,9 @@
create(:merge_request, :unique_branches, source_project: project_1, target_project: project_1, labels: [label])
end
 
let_it_be(:award_emoji) { create(:award_emoji, name: 'thumbsup', user: user, awardable: merge_request_with_label) }
let_it_be(:award_emoji) do
create(:award_emoji, name: AwardEmoji::THUMBS_UP, user: user, awardable: merge_request_with_label)
end
 
let_it_be(:stage) do
create(:cycle_analytics_stage,
Loading
Loading
@@ -327,7 +331,7 @@
 
context 'when filtering by my_reaction_emoji' do
it 'filters by my_reaction_emoji' do
params[:my_reaction_emoji] = 'thumbsup'
params[:my_reaction_emoji] = AwardEmoji::THUMBS_UP
 
expect(merge_request_ids).to eq([stage_event_2.merge_request_id])
end
Loading
Loading
@@ -342,7 +346,7 @@
 
context 'when the filter is negated' do
it 'returns items without the given rection emoji' do
params[:not] = { my_reaction_emoji: 'thumbsup' }
params[:not] = { my_reaction_emoji: AwardEmoji::THUMBS_UP }
 
expect(merge_request_ids).to eq([stage_event_1.merge_request_id])
end
Loading
Loading
Loading
Loading
@@ -36,7 +36,7 @@
end
 
it 'has award emoji' do
expect(group.epics.find_by_iid(1).award_emoji.first.name).to eq('thumbsup')
expect(group.epics.find_by_iid(1).award_emoji.first.name).to eq(AwardEmoji::THUMBS_UP)
end
 
it 'preserves epic state' do
Loading
Loading
Loading
Loading
@@ -185,7 +185,7 @@ def json_project(project)
value_stream: stage.value_stream,
epic_id: 1,
iteration_id: 2,
my_reaction_emoji: 'thumbsup',
my_reaction_emoji: AwardEmoji::THUMBS_UP,
weight: 5
)
end
Loading
Loading
@@ -200,7 +200,7 @@ def json_project(project)
expect(subject[:stage]).to eq(%({"id":#{stage.id},"title":"#{stage.name}"}))
expect(subject[:epic_id]).to eq(1)
expect(subject[:iteration_id]).to eq(2)
expect(subject[:my_reaction_emoji]).to eq('thumbsup')
expect(subject[:my_reaction_emoji]).to eq(AwardEmoji::THUMBS_UP)
expect(subject[:weight]).to eq(5)
expect(subject[:enable_vsd_link]).to eq('true')
end
Loading
Loading
Loading
Loading
@@ -37,8 +37,8 @@
let_it_be(:emoji_2) { create(:award_emoji, :downvote, awardable: epic, user: create(:user)) }
 
it 'returns union of award emoji from epic and its associated work item', :aggregate_failures do
expect(epic.award_emoji.pluck(:name)).to match_array(%w[thumbsup thumbsdown])
expect(work_item.award_emoji.pluck(:name)).to match_array(%w[thumbsup thumbsdown])
expect(epic.award_emoji.pluck(:name)).to match_array([AwardEmoji::THUMBS_UP, AwardEmoji::THUMBS_DOWN])
expect(work_item.award_emoji.pluck(:name)).to match_array([AwardEmoji::THUMBS_UP, AwardEmoji::THUMBS_DOWN])
end
 
it 'reads participants from award emoji on epic and its associated work item' do
Loading
Loading
@@ -90,8 +90,8 @@
end
 
it 'reads emojis only from epic' do
expect(epic.award_emoji.pluck(:name)).to match_array(%w[thumbsdown])
expect(work_item.award_emoji.pluck(:name)).to match_array(%w[thumbsup])
expect(epic.award_emoji.pluck(:name)).to match_array([AwardEmoji::THUMBS_DOWN])
expect(work_item.award_emoji.pluck(:name)).to match_array([AwardEmoji::THUMBS_UP])
end
end
 
Loading
Loading
@@ -102,8 +102,8 @@
end
 
it 'returns award emoji only from epic' do
expect(epic.award_emoji.pluck(:name)).to match_array(%w[thumbsdown])
expect(work_item.award_emoji.pluck(:name)).to match_array(%w[thumbsup])
expect(epic.award_emoji.pluck(:name)).to match_array([AwardEmoji::THUMBS_DOWN])
expect(work_item.award_emoji.pluck(:name)).to match_array([AwardEmoji::THUMBS_UP])
end
end
end
Loading
Loading
Loading
Loading
@@ -93,7 +93,7 @@
end
 
it "returns a 404 if the user is not authenticated" do
post api("/groups/#{group.id}/epics/#{epic.iid}/award_emoji"), params: { name: 'thumbsup' }
post api("/groups/#{group.id}/epics/#{epic.iid}/award_emoji"), params: { name: AwardEmoji::THUMBS_UP }
 
expect(response).to have_gitlab_http_status(:not_found)
end
Loading
Loading
@@ -101,13 +101,13 @@
it "normalizes +1 as thumbsup award" do
post api("/groups/#{group.id}/epics/#{epic.iid}/award_emoji", user), params: { name: '+1' }
 
expect(epic.award_emoji.last.name).to eq("thumbsup")
expect(epic.award_emoji.last.name).to eq(AwardEmoji::THUMBS_UP)
end
 
context 'when the emoji already has been awarded' do
it 'returns a 404 status code' do
post api("/groups/#{group.id}/epics/#{epic.iid}/award_emoji", user), params: { name: 'thumbsup' }
post api("/groups/#{group.id}/epics/#{epic.iid}/award_emoji", user), params: { name: 'thumbsup' }
post api("/groups/#{group.id}/epics/#{epic.iid}/award_emoji", user), params: { name: AwardEmoji::THUMBS_UP }
post api("/groups/#{group.id}/epics/#{epic.iid}/award_emoji", user), params: { name: AwardEmoji::THUMBS_UP }
 
expect(response).to have_gitlab_http_status(:not_found)
expect(json_response["message"]).to match("has already been taken")
Loading
Loading
@@ -136,10 +136,10 @@
expect(todo.reload).to be_done
end
 
it "normalizes +1 as thumbsup award" do
it "normalizes +1 as thumbs_up award" do
post api("/groups/#{group.id}/epics/#{epic.iid}/notes/#{note.id}/award_emoji", user), params: { name: '+1' }
 
expect(note.award_emoji.last.name).to eq("thumbsup")
expect(note.award_emoji.last.name).to eq(AwardEmoji::THUMBS_UP)
end
 
context 'when the emoji already has been awarded' do
Loading
Loading
Loading
Loading
@@ -275,8 +275,8 @@
end
 
it 'has upvote/downvote information' do
create(:award_emoji, name: 'thumbsup', awardable: epic, user: user)
create(:award_emoji, name: 'thumbsdown', awardable: epic2, user: user)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic, user: user)
create(:award_emoji, name: AwardEmoji::THUMBS_DOWN, awardable: epic2, user: user)
 
get api(url)
 
Loading
Loading
Loading
Loading
@@ -231,11 +231,11 @@ def query_epics_which_start_with_iid(iid)
create(:epic, group: group) do |epic|
create(:award_emoji, name: 'rocket', awardable: epic)
create(:award_emoji, name: 'eyes', awardable: epic.sync_object)
create(:award_emoji, name: 'thumbsup', awardable: epic)
create(:award_emoji, name: 'thumbsup', awardable: epic.sync_object)
create(:award_emoji, name: 'thumbsdown', awardable: epic)
create(:award_emoji, name: 'thumbsdown', awardable: epic)
create(:award_emoji, name: 'thumbsdown', awardable: epic.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_DOWN, awardable: epic)
create(:award_emoji, name: AwardEmoji::THUMBS_DOWN, awardable: epic)
create(:award_emoji, name: AwardEmoji::THUMBS_DOWN, awardable: epic.sync_object)
end
end
 
Loading
Loading
@@ -269,7 +269,8 @@ def query_epics_which_start_with_iid(iid)
expect(response.map do |emoji|
emoji['user']['username']
end.uniq).to match_array(epic.award_emoji.map(&:user).map(&:username).uniq)
expect(response.pluck('name').uniq).to match_array(%w[eyes rocket thumbsup thumbsdown])
expect(response.pluck('name').uniq)
.to match_array(%W[eyes rocket #{AwardEmoji::THUMBS_UP} #{AwardEmoji::THUMBS_DOWN}])
end
 
it 'includes unified upvotes and downvotes' do
Loading
Loading
@@ -307,10 +308,10 @@ def execute_query
before do
create(:award_emoji, awardable: epic_a, user: user)
create(:award_emoji, awardable: epic_b, user: user)
create(:award_emoji, name: 'thumbsup', awardable: epic_a)
create(:award_emoji, name: 'thumbsup', awardable: epic_a.sync_object)
create(:award_emoji, name: 'thumbsup', awardable: epic_b)
create(:award_emoji, name: 'thumbsdown', awardable: epic_b.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic_a)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic_a.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic_b)
create(:award_emoji, name: AwardEmoji::THUMBS_DOWN, awardable: epic_b.sync_object)
end
 
include_examples 'N+1 query check', threshold: 1
Loading
Loading
Loading
Loading
@@ -166,8 +166,8 @@ def global_ids(*epics)
end
 
it 'has upvote/downvote information' do
create(:award_emoji, name: 'thumbsup', awardable: epic, user: user)
create(:award_emoji, name: 'thumbsdown', awardable: epic2, user: user)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: epic, user: user)
create(:award_emoji, name: AwardEmoji::THUMBS_DOWN, awardable: epic2, user: user)
 
post_graphql(query, current_user: user)
 
Loading
Loading
@@ -491,8 +491,8 @@ def global_ids(*epics)
let(:requested_fields) { [:upvotes, :downvotes] }
 
before do
create_list(:award_emoji, 2, name: 'thumbsup', awardable: epic_a)
create_list(:award_emoji, 2, name: 'thumbsdown', awardable: epic_b)
create_list(:award_emoji, 2, name: AwardEmoji::THUMBS_UP, awardable: epic_a)
create_list(:award_emoji, 2, name: AwardEmoji::THUMBS_DOWN, awardable: epic_b)
end
 
include_examples 'N+1 query check'
Loading
Loading
Loading
Loading
@@ -85,7 +85,7 @@
) do |work_item|
create(:award_emoji, name: 'eyes', awardable: work_item)
create(:award_emoji, name: 'rocket', awardable: work_item.sync_object)
create(:award_emoji, name: 'thumbsup', awardable: work_item.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: work_item.sync_object)
end
 
expect do
Loading
Loading
@@ -169,10 +169,10 @@
end
 
it 'fetches unified upvotes and downvotes' do
create(:award_emoji, name: 'thumbsup', awardable: group_work_item)
create(:award_emoji, name: 'thumbsup', awardable: group_work_item.sync_object)
create(:award_emoji, name: 'thumbsup', awardable: group_work_item.sync_object)
create(:award_emoji, name: 'thumbsdown', awardable: group_work_item.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: group_work_item)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: group_work_item.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: group_work_item.sync_object)
create(:award_emoji, name: AwardEmoji::THUMBS_DOWN, awardable: group_work_item.sync_object)
 
post_graphql(query, current_user: current_user)
 
Loading
Loading
Loading
Loading
@@ -1488,9 +1488,9 @@ def find_note(work_item, starting_with)
users = create_list(:user, 6)
 
# Add 3 participant to the legacy epic
create(:award_emoji, name: 'thumbsup', awardable: work_item, user: users[0])
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: work_item, user: users[0])
note = create(:note, noteable: work_item.synced_epic, author: users[1], project: project)
create(:award_emoji, name: 'thumbsup', awardable: note, user: users[2])
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: note, user: users[2])
 
post_graphql(query, current_user: current_user) # warm-up
 
Loading
Loading
@@ -1499,9 +1499,9 @@ def find_note(work_item, starting_with)
end
 
# Add 3 more participants to the legacy epic
create(:award_emoji, name: 'thumbsup', awardable: work_item.synced_epic, user: users[3])
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: work_item.synced_epic, user: users[3])
note = create(:note, noteable: work_item.synced_epic, author: users[4], project: project)
create(:award_emoji, name: 'thumbsup', awardable: note, user: users[5])
create(:award_emoji, name: AwardEmoji::THUMBS_UP, awardable: note, user: users[5])
 
expect do
post_graphql(query, current_user: current_user)
Loading
Loading
Loading
Loading
@@ -23,7 +23,9 @@
end
 
context 'when extra query params are given' do
let(:extra_query_params) { { weight: '3', epic_id: '1', iteration_id: '2', my_reaction_emoji: 'thumbsup' } }
let(:extra_query_params) do
{ weight: '3', epic_id: '1', iteration_id: '2', my_reaction_emoji: AwardEmoji::THUMBS_UP }
end
 
context 'when not licensed' do
it 'does not expose unsupported query params' do
Loading
Loading
@@ -47,7 +49,7 @@
expect(body).to include('data-weight="3"')
expect(body).to include('data-epic-id="1"')
expect(body).to include('data-iteration-id="2"')
expect(body).to include('data-my-reaction-emoji="thumbsup"')
expect(body).to include(%(data-my-reaction-emoji="#{AwardEmoji::THUMBS_UP}"))
end
end
end
Loading
Loading
Loading
Loading
@@ -15,7 +15,7 @@
it 'exposes the query params in data attributes' do
stub_licensed_features(cycle_analytics_for_groups: true)
 
extra_query_params = { weight: '3', epic_id: '1', iteration_id: '2', my_reaction_emoji: 'thumbsup' }
extra_query_params = { weight: '3', epic_id: '1', iteration_id: '2', my_reaction_emoji: AwardEmoji::THUMBS_UP }
 
expect_next_instance_of(Gitlab::Analytics::CycleAnalytics::RequestParams) do |instance|
expect(instance).to have_attributes(**extra_query_params)
Loading
Loading
@@ -26,6 +26,6 @@
expect(body).to include('data-weight="3"')
expect(body).to include('data-epic-id="1"')
expect(body).to include('data-iteration-id="2"')
expect(body).to include('data-my-reaction-emoji="thumbsup"')
expect(body).to include(%(data-my-reaction-emoji="#{AwardEmoji::THUMBS_UP}"))
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment