From 027d64cc1b4eab1b9e882014b4841a43e248ec93 Mon Sep 17 00:00:00 2001 From: Oswaldo Ferreira Date: Thu, 19 Apr 2018 11:38:07 -0300 Subject: Address spec failures --- app/models/award_emoji.rb | 28 +++++++++++++++++++++++----- app/models/concerns/awardable.rb | 2 +- spec/factories/award_emoji.rb | 4 ++-- spec/models/concerns/awardable_spec.rb | 17 +++++++++++++---- 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 -- cgit v1.2.3