Refactor:Move Streak Badges to Sidekiq Cron (#9872)

This commit is contained in:
Molly Struve 2020-08-19 13:53:03 -05:00 committed by GitHub
parent 5eda086e78
commit 469ce3c533
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 57 additions and 6 deletions

View file

@ -88,6 +88,18 @@ module BadgeRewarder
end
end
def self.award_four_week_streak_badge
award_streak_badge(4)
end
def self.award_eight_week_streak_badge
award_streak_badge(8)
end
def self.award_sixteen_week_streak_badge
award_streak_badge(16)
end
def self.award_streak_badge(num_weeks)
# No credit for super low quality
article_user_ids = Article.published

View file

@ -24,3 +24,24 @@ award_beloved_comment_badges:
- ""
- award_beloved_comment_badges
- ""
award_four_week_streak_badge:
cron: "10 0 * * *" # daily at 12:10 am UTC
class: "BadgeAchievements::BadgeAwardWorker"
args:
- ""
- award_four_week_streak_badge
- ""
award_eight_week_streak_badge:
cron: "15 0 * * *" # daily at 12:15 am UTC
class: "BadgeAchievements::BadgeAwardWorker"
args:
- ""
- award_eight_week_streak_badge
- ""
award_sixteen_week_streak_badge:
cron: "20 0 * * *" # daily at 12:20 am UTC
class: "BadgeAchievements::BadgeAwardWorker"
args:
- ""
- award_sixteen_week_streak_badge
- ""

View file

@ -1,9 +1,3 @@
task award_badges: :environment do
BadgeRewarder.award_streak_badge(4)
BadgeRewarder.award_streak_badge(8)
BadgeRewarder.award_streak_badge(16)
end
task award_weekly_tag_badges: :environment do
# Should run once per week.
# Scheduled "daily" on Heroku Scheduler, should only fully run on Thursday.

View file

@ -84,6 +84,30 @@ RSpec.describe BadgeRewarder, type: :labor do
expect(BadgeAchievement.where(badge_id: badge.id).size).to eq(2)
end
describe "::award_four_week_streak_badge" do
it "calls award_streak_badge with argument 4" do
allow(described_class).to receive(:award_streak_badge)
described_class.award_four_week_streak_badge
expect(described_class).to have_received(:award_streak_badge).with(4)
end
end
describe "::award_eight_week_streak_badge" do
it "calls award_streak_badge with argument 8" do
allow(described_class).to receive(:award_streak_badge)
described_class.award_eight_week_streak_badge
expect(described_class).to have_received(:award_streak_badge).with(8)
end
end
describe "::award_sixteen_week_streak_badge" do
it "calls award_streak_badge with argument 16" do
allow(described_class).to receive(:award_streak_badge)
described_class.award_sixteen_week_streak_badge
expect(described_class).to have_received(:award_streak_badge).with(16)
end
end
describe "::award_streak_badge" do
it "rewards badge to users with four straight weeks of articles" do
create(:badge, title: "4 Week Streak", slug: "4-week-streak")