diff --git a/app/models/verification/residence.rb b/app/models/verification/residence.rb index 4f6cbf68a..ea000677f 100644 --- a/app/models/verification/residence.rb +++ b/app/models/verification/residence.rb @@ -26,6 +26,9 @@ class Verification::Residence def save return false unless valid? + + user.take_votes_if_erased_document(document_number, document_type) + user.update(document_number: document_number, document_type: document_type, geozone: self.geozone, @@ -40,7 +43,7 @@ class Verification::Residence end def document_number_uniqueness - errors.add(:document_number, I18n.t('errors.messages.taken')) if User.where(document_number: document_number).any? + errors.add(:document_number, I18n.t('errors.messages.taken')) if User.active.where(document_number: document_number).any? end def store_failed_attempt diff --git a/spec/features/verification/residence_spec.rb b/spec/features/verification/residence_spec.rb index 58d2c8092..ed2ffd083 100644 --- a/spec/features/verification/residence_spec.rb +++ b/spec/features/verification/residence_spec.rb @@ -22,6 +22,31 @@ feature 'Residence' do expect(page).to have_content 'Residence verified' end + scenario 'When trying to verify a deregistered account old votes are reassigned' do + erased_user = create(:user, document_number: '12345678Z', document_type: '1', erased_at: Time.current) + vote = create(:vote, voter: erased_user) + new_user = create(:user) + + login_as(new_user) + + visit account_path + click_link 'Verify my account' + + fill_in 'residence_document_number', with: '12345678Z' + select 'DNI', from: 'residence_document_type' + select_date '31-December-1980', from: 'residence_date_of_birth' + fill_in 'residence_postal_code', with: '28013' + check 'residence_terms_of_service' + + click_button 'Verify residence' + + expect(page).to have_content 'Residence verified' + + expect(vote.reload.voter).to eq(new_user) + expect(erased_user.reload.document_number).to be_blank + expect(new_user.reload.document_number).to eq('12345678Z') + end + scenario 'Error on verify' do user = create(:user) login_as(user) @@ -102,24 +127,4 @@ feature 'Residence' do expect(page).to have_content "You have reached the maximum number of attempts. Please try again later." expect(current_path).to eq(account_path) end - - scenario 'Error when trying to verify a deregistered account' do - create(:user, document_number: '12345678Z', document_type: '1', erased_at: Time.current) - - login_as(create(:user)) - - visit account_path - click_link 'Verify my account' - - fill_in 'residence_document_number', with: "12345678Z" - select 'DNI', from: 'residence_document_type' - select_date '31-December-1980', from: 'residence_date_of_birth' - fill_in 'residence_postal_code', with: '28013' - check 'residence_terms_of_service' - - click_button 'Verify residence' - - expect(page).to_not have_content 'Residence verified' - expect(page).to have_content 'has already been taken' - end end