[deploy] Refactor:Move Yearly Badge Awarder to Sidekiq Cron (#9836)

This commit is contained in:
Molly Struve 2020-08-17 19:19:14 -05:00 committed by GitHub
parent dbdc6ead38
commit 55e7e12e78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 28 additions and 4 deletions

View file

@ -1,5 +1,5 @@
module BadgeRewarder
YEARS = { 1 => "one", 2 => "two", 3 => "three" }.freeze
YEARS = { 1 => "one", 2 => "two", 3 => "three", 4 => "four", 5 => "five", 6 => "six", 7 => "seven" }.freeze
REPOSITORIES = ["thepracticaldev/dev.to", "thepracticaldev/DEV-ios", "thepracticaldev/DEV-Android"].freeze
LONGEST_STREAK_WEEKS = 16
@ -10,7 +10,8 @@ module BadgeRewarder
MINIMUM_QUALITY = -25
def self.award_yearly_club_badges
(1..3).each do |i|
total_years = Time.current.year - ApplicationConfig["COMMUNITY_COPYRIGHT_START_YEAR"].to_i
(1..total_years).each do |i|
message = "Happy #{ApplicationConfig['COMMUNITY_NAME']} birthday! " \
"Can you believe it's been #{i} #{'year'.pluralize(i)} already?!"
badge = Badge.find_by!(slug: "#{YEARS[i]}-year-club")

View file

@ -5,7 +5,11 @@ module BadgeAchievements
sidekiq_options queue: :high_priority, retry: 10
def perform(usernames, badge_slug, message)
BadgeRewarder.award_badges(usernames, badge_slug, message)
if BadgeRewarder.respond_to?(badge_slug)
BadgeRewarder.public_send(badge_slug)
else
BadgeRewarder.award_badges(usernames, badge_slug, message)
end
end
end
end

View file

@ -10,3 +10,10 @@ record_daily_notifications:
record_data_counts:
cron: "10 * * * *" # every hour, 10 min after the hour
class: "Metrics::RecordDataCountsWorker"
award_yearly_club_badges:
cron: "0 0 * * *" # daily at 12 am UTC
class: "BadgeAchievements::BadgeAwardWorker"
args:
- ""
- award_yearly_club_badges
- ""

View file

@ -1,5 +1,4 @@
task award_badges: :environment do
BadgeRewarder.award_yearly_club_badges
BadgeRewarder.award_beloved_comment_badges
BadgeRewarder.award_streak_badge(4)
BadgeRewarder.award_streak_badge(8)

View file

@ -3,6 +3,9 @@ require "rails_helper"
RSpec.describe BadgeRewarder, type: :labor do
describe "::award_yearly_club_badges" do
before do
stub_const("#{described_class}::YEARS", BadgeRewarder::YEARS.slice(1, 2, 3))
allow(ApplicationConfig).to receive(:[])
allow(ApplicationConfig).to receive(:[]).with("COMMUNITY_COPYRIGHT_START_YEAR").and_return(3.years.ago.year)
create(:badge, title: "one-year-club")
create(:badge, title: "two-year-club")
create(:badge, title: "three-year-club")

View file

@ -19,5 +19,15 @@ RSpec.describe BadgeAchievements::BadgeAwardWorker, type: :worker do
expect(badge_rewarder).to have_received(:award_badges).with("jess", "test", "yo")
end
end
context "with predefined badge_slug" do
it "sends badge email" do
allow(badge_rewarder).to receive(:award_yearly_club_badges)
worker.perform("", "award_yearly_club_badges", "")
expect(badge_rewarder).to have_received(:award_yearly_club_badges)
expect(badge_rewarder).not_to have_received(:award_badges)
end
end
end
end