diff --git a/app/services/badges/award.rb b/app/services/badges/award.rb index 8a9893820..afdb3d1a6 100644 --- a/app/services/badges/award.rb +++ b/app/services/badges/award.rb @@ -4,6 +4,8 @@ module Badges return unless (badge_id = Badge.id_for_slug(slug)) user_relation.find_each do |user| + next if user.banished? + achievement = user.badge_achievements.create( badge_id: badge_id, rewarding_context_message_markdown: message_markdown, diff --git a/spec/services/badges/award_spec.rb b/spec/services/badges/award_spec.rb index f6775213a..01b86fae4 100644 --- a/spec/services/badges/award_spec.rb +++ b/spec/services/badges/award_spec.rb @@ -18,5 +18,13 @@ RSpec.describe Badges::Award, type: :service do expect(user2.badge_achievements.pluck(:rewarding_context_message_markdown)) .to eq(["Congrats on a badge!"]) end + + it "doesn't award badges to spam accounts" do + spammer = create(:user, username: "spam_account") + + described_class.call(User.all, "one-year-club", "Congrats on a badge!") + expect(user.badge_achievements.any?).to be true + expect(spammer.badge_achievements.any?).to be false + end end end