diff --git a/app/forms/verify_password_form.rb b/app/forms/verify_password_form.rb index d894f187dc2..e7457a9a908 100644 --- a/app/forms/verify_password_form.rb +++ b/app/forms/verify_password_form.rb @@ -34,8 +34,7 @@ def valid_password? def reencrypt_pii personal_key = profile.encrypt_pii(decrypted_pii, password) - profile.update(deactivation_reason: nil, active: true) - profile.save! + profile.activate_after_password_reset personal_key end diff --git a/app/models/profile.rb b/app/models/profile.rb index 3c00b3ac313..d113a180ec1 100644 --- a/app/models/profile.rb +++ b/app/models/profile.rb @@ -92,6 +92,15 @@ def activate_after_passing_in_person activate end + def activate_after_password_reset + if password_reset? + update!( + deactivation_reason: nil, + ) + activate + end + end + def deactivate(reason) update!(active: false, deactivation_reason: reason) end diff --git a/spec/models/profile_spec.rb b/spec/models/profile_spec.rb index 39a1d7b51c6..17af2a7c199 100644 --- a/spec/models/profile_spec.rb +++ b/spec/models/profile_spec.rb @@ -319,6 +319,48 @@ end end + describe '#activate_after_password_reset' do + it 'activates a profile after password reset' do + profile = create( + :profile, + user: user, + active: false, + deactivation_reason: :password_reset, + ) + + profile.activate_after_password_reset + + expect(profile.active).to eq true + expect(profile.deactivation_reason).to eq nil + end + + it 'does not activate a profile if it has a pending reason' do + profile = create( + :profile, + user: user, + active: false, + deactivation_reason: :password_reset, + fraud_review_pending_at: 1.day.ago, + ) + + expect { profile.activate_after_password_reset }.to raise_error + end + + it 'does not activate a profile with non password_reset deactivation_reason' do + profile = create( + :profile, + user: user, + active: false, + deactivation_reason: :encryption_error, + ) + + profile.activate_after_password_reset + + expect(profile.active).to eq false + expect(profile.deactivation_reason).to_not eq nil + end + end + describe '#activate_after_passing_review' do it 'activates a profile if it passes fraud review' do profile = create(