From cbaf521fc157a08cf00c46bc72aabbb58499b682 Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 20 Jun 2018 09:09:13 +1000 Subject: [PATCH] correct regression and add integrity spec for onceoffs --- app/jobs/onceoff/fix_retro_anniversary.rb | 6 +++--- spec/integrity/onceoff_integrity_spec.rb | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 spec/integrity/onceoff_integrity_spec.rb diff --git a/app/jobs/onceoff/fix_retro_anniversary.rb b/app/jobs/onceoff/fix_retro_anniversary.rb index 2d553c3a296..b141c890ff1 100644 --- a/app/jobs/onceoff/fix_retro_anniversary.rb +++ b/app/jobs/onceoff/fix_retro_anniversary.rb @@ -6,15 +6,15 @@ module Jobs def execute_onceoff(args) return unless SiteSetting.enable_badges - users = User.query <<~SQL - SELECT ub.user_id, MIN(granted_at) AS first_granted_at, COUNT(*) + users = DB.query <<~SQL + SELECT ub.user_id, MIN(granted_at) AS first_granted_at, COUNT(*) count FROM user_badges AS ub WHERE ub.badge_id = #{Badge::Anniversary} GROUP BY ub.user_id HAVING COUNT(ub.id) > 1 SQL - users.to_a.each do |u| + users.each do |u| first = u.first_granted_at badges = UserBadge.where( "badge_id = ? AND user_id = ? AND granted_at > ?", diff --git a/spec/integrity/onceoff_integrity_spec.rb b/spec/integrity/onceoff_integrity_spec.rb new file mode 100644 index 00000000000..8143fe79464 --- /dev/null +++ b/spec/integrity/onceoff_integrity_spec.rb @@ -0,0 +1,14 @@ +require "rails_helper" + +describe Jobs::Onceoff do + it "can run all once off jobs without errors" do + # load all once offs + + Dir[Rails.root + 'app/jobs/onceoff/*.rb'].each do |f| + require_relative '../../app/jobs/onceoff/' + File.basename(f) + end + ObjectSpace.each_object(Class).select { |klass| klass < Jobs::Onceoff }.each do |j| + j.new.execute_onceoff(nil) + end + end +end