Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/controllers/users/emails_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ def email_address

def handle_successful_delete
send_delete_email_notification
user_session.delete(:selected_email_id_for_linked_identity)
flash[:success] = t('email_addresses.delete.success')
create_user_event(:email_deleted)
end
Expand Down
91 changes: 91 additions & 0 deletions spec/controllers/users/emails_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,95 @@
end
end
end

describe '#delete' do
subject(:response) { delete :delete, params: params }
let(:user) { create(:user, :fully_registered, :with_multiple_emails) }
let(:params) { { id: user.email_addresses.take.id } }

before do
stub_sign_in(user)
end

it 'redirects to account page' do
expect(response).to redirect_to(account_url)
end

context 'with invalid submisson' do
let(:user) { create(:user, :fully_registered) }

it 'logs analytics' do
stub_analytics

response

expect(@analytics).to have_logged_event(
'Email Deletion Requested',
success: false,
errors: {},
)
end

it 'flashes error' do
response

expect(flash[:error]).to eq(t('email_addresses.delete.failure'))
end
end

context 'with valid submission' do
it 'logs analytics' do
stub_analytics

response

expect(@analytics).to have_logged_event(
'Email Deletion Requested',
success: true,
errors: {},
)
end

it 'notifies all confirmed email addresses, including the deleted' do
email_addresses = user.confirmed_email_addresses.to_a

response

expect_delivered_email_count(email_addresses.count)
email_addresses.each do |email_address|
expect_delivered_email(
to: [email_address.email],
subject: t('user_mailer.email_deleted.subject'),
)
end
end

it 'flashes success' do
response

expect(flash[:success]).to eq(t('email_addresses.delete.success'))
end

it 'tracks user event' do
expect { response }.to change { user.events.count }.by(1)
expect(user.events.last.event_type).to eq('email_deleted')
end

it 'deletes the email address' do
expect { response }.to change { user.email_addresses.count }.by(-1)
end

context 'with selected email for linked identity in session' do
before do
controller.user_session[:selected_email_id_for_linked_identity] = params[:id]
end

it 'resets session value' do
response

expect(controller.user_session[:selected_email_id_for_linked_identity]).to be_nil
end
end
end
end
end