diff --git a/spec/controllers/admin/change_emails_controller_spec.rb b/spec/controllers/admin/change_emails_controller_spec.rb deleted file mode 100644 index 899106e54e..0000000000 --- a/spec/controllers/admin/change_emails_controller_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::ChangeEmailsController do - render_views - - let(:admin) { Fabricate(:admin_user) } - - before do - sign_in admin - end - - describe 'GET #show' do - it 'returns http success' do - user = Fabricate(:user) - - get :show, params: { account_id: user.account.id } - - expect(response).to have_http_status(200) - end - end - - describe 'GET #update' do - before do - allow(UserMailer).to receive(:confirmation_instructions) - .and_return(instance_double(ActionMailer::MessageDelivery, deliver_later: nil)) - end - - it 'returns http success' do - user = Fabricate(:user) - - previous_email = user.email - - post :update, params: { account_id: user.account.id, user: { unconfirmed_email: 'test@example.com' } } - - user.reload - - expect(user.email).to eq previous_email - expect(user.unconfirmed_email).to eq 'test@example.com' - expect(user.confirmation_token).to_not be_nil - - expect(UserMailer).to have_received(:confirmation_instructions).with(user, user.confirmation_token, { to: 'test@example.com' }) - - expect(response).to redirect_to(admin_account_path(user.account.id)) - end - end -end diff --git a/spec/system/admin/change_emails_spec.rb b/spec/system/admin/change_emails_spec.rb new file mode 100644 index 0000000000..6592ddff7c --- /dev/null +++ b/spec/system/admin/change_emails_spec.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Change Emails' do + let(:admin) { Fabricate(:admin_user) } + + before { sign_in admin } + + describe 'Changing the email address for a user', :inline_jobs do + let(:user) { Fabricate :user } + + it 'updates user details and sends email' do + visit admin_account_change_email_path(user.account.id) + expect(page) + .to have_title(I18n.t('admin.accounts.change_email.title', username: user.account.username)) + + fill_in 'user_unconfirmed_email', with: 'test@host.example' + emails = capture_emails { process_change_email } + expect(emails.first) + .to be_present + .and(deliver_to('test@host.example')) + .and(have_subject(/Confirm email/)) + expect(page) + .to have_title(user.account.pretty_acct) + end + + def process_change_email + expect { click_on I18n.t('admin.accounts.change_email.submit') } + .to not_change { user.reload.email } + .and(change { user.reload.unconfirmed_email }.to('test@host.example')) + .and(change { user.reload.confirmation_token }.from(nil).to(be_present)) + end + end +end