diff --git a/app/services/badges/award_first_post.rb b/app/services/badges/award_first_post.rb index 8cf8b0a79..3ed672074 100644 --- a/app/services/badges/award_first_post.rb +++ b/app/services/badges/award_first_post.rb @@ -8,6 +8,7 @@ module Badges Article.joins(:user) .where("articles.published_at > ?", 1.week.ago) .where("articles.published_at < ?", 1.hour.ago) + .where("articles.score >= ?", 0) .where(nth_published_by_author: 1) .where.not(users: { id: User.with_role(:spam).or(User.with_role(:suspended)) }) .find_each do |article| diff --git a/spec/services/badges/award_first_post_spec.rb b/spec/services/badges/award_first_post_spec.rb index 623688668..234d88678 100644 --- a/spec/services/badges/award_first_post_spec.rb +++ b/spec/services/badges/award_first_post_spec.rb @@ -33,6 +33,14 @@ RSpec.describe Badges::AwardFirstPost do Timecop.return expect { described_class.call }.to change(BadgeAchievement, :count).by(1) end + + it "does not award the badge if the article score is less than zero" do + Timecop.freeze(2.days.ago) do + create(:article, user: create(:user), score: -1) + end + Timecop.return + expect { described_class.call }.not_to change(BadgeAchievement, :count) + end end context "when the user has a spam or suspended role" do