fix: backfill user email_verified_at
This commit is contained in:
parent
0c6dbc86f0
commit
58f1608d2f
2 changed files with 72 additions and 0 deletions
39
app/tasks/maintenance/verify_confirmed_users_task.rb
Normal file
39
app/tasks/maintenance/verify_confirmed_users_task.rb
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Maintenance
|
||||||
|
# This task backfills the email_verified_at field for confirmed users
|
||||||
|
# as a bug fixed by https://github.com/demarches-simplifiees/demarches-simplifiees.fr/pull/11074
|
||||||
|
# produced unverified confirmed users.
|
||||||
|
class VerifyConfirmedUsersTask < MaintenanceTasks::Task
|
||||||
|
include RunnableOnDeployConcern
|
||||||
|
|
||||||
|
run_on_first_deploy
|
||||||
|
|
||||||
|
no_collection
|
||||||
|
|
||||||
|
attribute :verifying_date, :string
|
||||||
|
attribute :correction_period, :integer
|
||||||
|
|
||||||
|
def process
|
||||||
|
email_verified_at = if verifying_date.present?
|
||||||
|
Time.zone.parse(verifying_date)
|
||||||
|
else
|
||||||
|
Time.zone.parse('25/11/2024')
|
||||||
|
end
|
||||||
|
|
||||||
|
created_at = if correction_period.present?
|
||||||
|
correction_period.months.ago..
|
||||||
|
else
|
||||||
|
4.months.ago..
|
||||||
|
end
|
||||||
|
|
||||||
|
User
|
||||||
|
.where.not(confirmed_at: nil)
|
||||||
|
.where(email_verified_at: nil)
|
||||||
|
.where(created_at:)
|
||||||
|
.where(instructeur: { id: nil }) # instructeur is eager loaded
|
||||||
|
.where.missing(:expert)
|
||||||
|
.update_all(email_verified_at:)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
33
spec/tasks/maintenance/verify_confirmed_users_task_spec.rb
Normal file
33
spec/tasks/maintenance/verify_confirmed_users_task_spec.rb
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Maintenance
|
||||||
|
RSpec.describe VerifyConfirmedUsersTask do
|
||||||
|
describe "#process" do
|
||||||
|
subject(:process) { described_class.process }
|
||||||
|
|
||||||
|
let!(:unverified_confirmed_user) { create(:user, confirmed_at: Time.zone.now) }
|
||||||
|
let!(:unverified_unconfirmed_user) { create(:user, confirmed_at: nil) }
|
||||||
|
let!(:unverified_confirmed_instructeur) do
|
||||||
|
user = create(:instructeur).user
|
||||||
|
user.update!(confirmed_at: Time.zone.now)
|
||||||
|
user
|
||||||
|
end
|
||||||
|
|
||||||
|
let!(:unverified_confirmed_expert) do
|
||||||
|
user = create(:expert).user
|
||||||
|
user.update!(confirmed_at: Time.zone.now)
|
||||||
|
user
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'verifies only confirmed user' do
|
||||||
|
process
|
||||||
|
|
||||||
|
expect(unverified_confirmed_user.reload.email_verified_at).to be_present
|
||||||
|
|
||||||
|
expect(unverified_unconfirmed_user.reload.email_verified_at).to be_nil
|
||||||
|
expect(unverified_confirmed_instructeur.reload.email_verified_at).to be_nil
|
||||||
|
expect(unverified_confirmed_expert.reload.email_verified_at).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue