diff --git a/app/models/profile.rb b/app/models/profile.rb index d113a180ec1..e0a408ada17 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -46,18 +46,22 @@ def pending_reasons end # rubocop:disable Rails/SkipsModelValidations - def activate + def activate(reason_deactivated: nil) confirm_that_profile_can_be_activated! now = Time.zone.now is_reproof = Profile.find_by(user_id: user_id, active: true) + + attrs = { + active: true, + activated_at: now, + } + + attrs[:verified_at] = now unless reason_deactivated == :password_reset + transaction do Profile.where(user_id: user_id).update_all(active: false) - update!( - active: true, - activated_at: now, - verified_at: now, - ) + update!(attrs) end send_push_notifications if is_reproof end @@ -97,7 +101,7 @@ def activate_after_password_reset update!( deactivation_reason: nil, ) - activate + activate(reason_deactivated: :password_reset) end end diff --git a/spec/models/profile_spec.rb b/spec/models/profile_spec.rb index 17af2a7c199..7d87abdaa2d 100644 --- a/spec/models/profile_spec.rb +++ b/spec/models/profile_spec.rb @@ -332,6 +332,24 @@ expect(profile.active).to eq true expect(profile.deactivation_reason).to eq nil + expect(profile.verified_at).to eq nil + end + + it 'activates a previously verified profile after password reset' do + verified_at = Time.zone.now - 1.year + profile = create( + :profile, + user: user, + active: false, + deactivation_reason: :password_reset, + verified_at: verified_at, + ) + + profile.activate_after_password_reset + + expect(profile.active).to eq true + expect(profile.deactivation_reason).to eq nil + expect(profile.verified_at).to eq verified_at end it 'does not activate a profile if it has a pending reason' do