diff --git a/spec/controllers/settings/aliases_controller_spec.rb b/spec/controllers/settings/aliases_controller_spec.rb deleted file mode 100644 index 4858c15298c..00000000000 --- a/spec/controllers/settings/aliases_controller_spec.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Settings::AliasesController do - render_views - - let!(:user) { Fabricate(:user) } - let(:account) { user.account } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - before do - get :index - end - - it 'returns http success with private cache control headers', :aggregate_failures do - expect(response).to have_http_status(200) - expect(response.headers['Cache-Control']).to include('private, no-store') - end - end - - describe 'POST #create' do - context 'with valid alias' do - before { stub_resolver } - - it 'creates an alias for the user' do - expect do - post :create, params: { account_alias: { acct: 'new@example.com' } } - end.to change(AccountAlias, :count).by(1) - - expect(response).to redirect_to(settings_aliases_path) - end - end - - context 'with invalid alias' do - it 'does not create an alias for the user' do - expect do - post :create, params: { account_alias: { acct: 'format-wrong' } } - end.to_not change(AccountAlias, :count) - - expect(response).to have_http_status(200) - end - end - end - - describe 'DELETE #destroy' do - let(:account_alias) do - AccountAlias.new(account: user.account, acct: 'new@example.com').tap do |account_alias| - account_alias.save(validate: false) - end - end - - it 'removes an alias' do - delete :destroy, params: { id: account_alias.id } - - expect(response).to redirect_to(settings_aliases_path) - expect { account_alias.reload }.to raise_error(ActiveRecord::RecordNotFound) - end - end - - private - - def stub_resolver - resolver = instance_double(ResolveAccountService, call: Fabricate(:account)) - allow(ResolveAccountService).to receive(:new).and_return(resolver) - end -end diff --git a/spec/system/settings/aliases_spec.rb b/spec/system/settings/aliases_spec.rb new file mode 100644 index 00000000000..96d94615038 --- /dev/null +++ b/spec/system/settings/aliases_spec.rb @@ -0,0 +1,82 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Settings aliases page' do + let!(:user) { Fabricate(:user) } + let(:account) { user.account } + + before { sign_in user } + + describe 'Viewing aliases' do + it 'shows index page with private cache control headers' do + visit settings_aliases_path + + # View index page + expect(page) + .to have_content(I18n.t('settings.aliases')) + .and have_private_cache_control + end + end + + describe 'Creating an alias' do + context 'with valid alias value' do + before { stub_resolver } + + it 'creates an alias for the user' do + visit settings_aliases_path + + fill_in 'account_alias_acct', + with: 'new@host.example' + expect { submit_form } + .to change(AccountAlias, :count).by(1) + expect(page) + .to have_content(I18n.t('aliases.created_msg')) + end + end + + context 'with invalid value' do + it 'does not create an alias for the user' do + visit settings_aliases_path + + fill_in 'account_alias_acct', + with: 'invalid-value' + expect { submit_form } + .to not_change(AccountAlias, :count) + expect(page) + .to have_content(I18n.t('settings.aliases')) + end + end + + def submit_form + click_on I18n.t('aliases.add_new') + end + end + + describe 'Removing an alias' do + let!(:account_alias) do + AccountAlias.new(account: user.account, acct: 'new@example.com').tap do |account_alias| + account_alias.save(validate: false) + end + end + + it 'removes an alias' do + visit settings_aliases_path + expect { click_on I18n.t('aliases.remove') } + .to change(AccountAlias, :count).by(-1) + + expect(page) + .to have_content(I18n.t('settings.aliases')) + .and have_content(I18n.t('aliases.deleted_msg')) + expect { account_alias.reload } + .to raise_error(ActiveRecord::RecordNotFound) + end + end + + private + + def stub_resolver + resolver = instance_double(ResolveAccountService, call: Fabricate(:account)) + allow(ResolveAccountService).to receive(:new).and_return(resolver) + end +end