summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswaldo Ferreira <oswaldo@gitlab.com>2018-04-19 11:38:07 -0300
committerOswaldo Ferreira <oswaldo@gitlab.com>2018-04-19 11:38:07 -0300
commit027d64cc1b4eab1b9e882014b4841a43e248ec93 (patch)
treec3a466730e717fa292ad1792e785019e4f807679
parentc0b241b60f6e7eb6538b5ad6a80069a5a6c4f8e1 (diff)
downloadgitlab-ce-all-thumber-emoji-count-takeover.tar.gz
-rw-r--r--app/models/award_emoji.rb28
-rw-r--r--app/models/concerns/awardable.rb2
-rw-r--r--spec/factories/award_emoji.rb4
-rw-r--r--spec/models/concerns/awardable_spec.rb17
4 files changed, 39 insertions, 12 deletions
diff --git a/app/models/award_emoji.rb b/app/models/award_emoji.rb
index e783363150c..050a88674a4 100644
--- a/app/models/award_emoji.rb
+++ b/app/models/award_emoji.rb
@@ -1,6 +1,17 @@
class AwardEmoji < ActiveRecord::Base
- DOWNVOTE_NAMES = %w(thumbsdown thumbsdown_tone1 thumbsdown_tone2 thumbsdown_tone3 thumbsdown_tone4 thumbsdown_tone5)
- UPVOTE_NAMES = %w(thumbsup thumbsup_tone1 thumbsup_tone2 thumbsup_tone3 thumbsup_tone4 thumbsup_tone5)
+ DOWNVOTE_NAMES = %w(thumbsdown
+ thumbsdown_tone1
+ thumbsdown_tone2
+ thumbsdown_tone3
+ thumbsdown_tone4
+ thumbsdown_tone5).freeze
+
+ UPVOTE_NAMES = %w(thumbsup
+ thumbsup_tone1
+ thumbsup_tone2
+ thumbsup_tone3
+ thumbsup_tone4
+ thumbsup_tone5).freeze
include Participable
include GhostUser
@@ -26,17 +37,24 @@ class AwardEmoji < ActiveRecord::Base
.where('name IN (?) AND awardable_type = ? AND awardable_id IN (?)', [*DOWNVOTE_NAMES, *UPVOTE_NAMES], type, ids)
.group('name', 'awardable_id')
end
+
+ def downvote?(name)
+ DOWNVOTE_NAMES.include?(name)
+ end
+
+ def upvote?(name)
+ UPVOTE_NAMES.include?(name)
+ end
end
def downvote?
- DOWNVOTE_NAMES.include?(name)
+ self.class.downvote?(name)
end
def upvote?
- UPVOTE_NAMES.include?(name)
+ self.class.upvote?(name)
end
-
def expire_etag_cache
awardable.try(:expire_etag_cache)
end
diff --git a/app/models/concerns/awardable.rb b/app/models/concerns/awardable.rb
index 318ab195b79..1aa6e259369 100644
--- a/app/models/concerns/awardable.rb
+++ b/app/models/concerns/awardable.rb
@@ -75,7 +75,7 @@ module Awardable
end
def awardable_votes?(name)
- AwardEmoji::UPVOTE_NAME == name || AwardEmoji::DOWNVOTE_NAME == name
+ AwardEmoji.upvote?(name) || AwardEmoji.downvote?(name)
end
def user_can_award?(current_user, name)
diff --git a/spec/factories/award_emoji.rb b/spec/factories/award_emoji.rb
index d37e2bf511e..f93e27bf81e 100644
--- a/spec/factories/award_emoji.rb
+++ b/spec/factories/award_emoji.rb
@@ -1,6 +1,6 @@
FactoryBot.define do
factory :award_emoji do
- name "thumbsup"
+ name { AwardEmoji::UPVOTE_NAMES.sample }
user
awardable factory: :issue
@@ -10,7 +10,7 @@ FactoryBot.define do
trait :upvote
trait :downvote do
- name "thumbsdown"
+ name { AwardEmoji::DOWNVOTE_NAMES.sample }
end
end
end
diff --git a/spec/models/concerns/awardable_spec.rb b/spec/models/concerns/awardable_spec.rb
index a980cff28fb..cc07f2e6fee 100644
--- a/spec/models/concerns/awardable_spec.rb
+++ b/spec/models/concerns/awardable_spec.rb
@@ -25,6 +25,11 @@ describe Awardable do
end
describe ".awarded" do
+ before do
+ award_emoji.update_column(:name, 'thumbsdown')
+ award_emoji2.update_column(:name, 'thumbsup')
+ end
+
it "filters by user and emoji name" do
expect(Issue.awarded(award_emoji.user, "thumbsup")).to be_empty
expect(Issue.awarded(award_emoji.user, "thumbsdown")).to eq [issue]
@@ -56,22 +61,26 @@ describe Awardable do
it 'does not allow upvoting or downvoting your own issue' do
issue.update!(author: user)
- expect(issue.user_can_award?(user, AwardEmoji::DOWNVOTE_NAME)).to be_falsy
- expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAME)).to be_falsy
+ expect(issue.user_can_award?(user, AwardEmoji::DOWNVOTE_NAMES.sample)).to be_falsy
+ expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAMES.sample)).to be_falsy
end
it 'is truthy when the user is allowed to award emoji' do
- expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAME)).to be_truthy
+ expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAMES.sample)).to be_truthy
end
it 'is falsy when the project is archived' do
issue.project.update!(archived: true)
- expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAME)).to be_falsy
+ expect(issue.user_can_award?(user, AwardEmoji::UPVOTE_NAMES.sample)).to be_falsy
end
end
describe "#toggle_award_emoji" do
+ before do
+ award_emoji.update_column(:name, 'thumbsdown')
+ end
+
it "adds an emoji if it isn't awarded yet" do
expect { issue.toggle_award_emoji("thumbsup", award_emoji.user) }.to change { AwardEmoji.count }.by(1)
end