From 00a8a5467cc3576058260f3fe4bd6d55e75b95af Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Thu, 2 Jan 2025 10:01:44 -0500 Subject: [PATCH] Convert `admin/relays` spec controller->system (#33430) --- .../admin/relays_controller_spec.rb | 100 ------------------ spec/system/admin/relays_spec.rb | 80 ++++++++++++++ 2 files changed, 80 insertions(+), 100 deletions(-) delete mode 100644 spec/controllers/admin/relays_controller_spec.rb create mode 100644 spec/system/admin/relays_spec.rb diff --git a/spec/controllers/admin/relays_controller_spec.rb b/spec/controllers/admin/relays_controller_spec.rb deleted file mode 100644 index c6251a6d76..0000000000 --- a/spec/controllers/admin/relays_controller_spec.rb +++ /dev/null @@ -1,100 +0,0 @@ -# frozen_string_literal: true - -require 'rails_helper' - -RSpec.describe Admin::RelaysController do - render_views - - let(:user) { Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } - - before do - sign_in user, scope: :user - end - - describe 'GET #index' do - it 'returns http success' do - get :index - - expect(response).to have_http_status(:success) - end - end - - describe 'GET #new' do - it 'returns http success and renders view' do - get :new - - expect(response).to have_http_status(:success) - expect(response).to render_template(:new) - end - end - - describe 'POST #create' do - context 'with valid data' do - let(:inbox_url) { 'https://example.com/inbox' } - - before do - stub_request(:post, inbox_url).to_return(status: 200) - end - - it 'creates a new relay and redirects' do - expect do - post :create, params: { relay: { inbox_url: inbox_url } } - end.to change(Relay, :count).by(1) - - expect(response).to redirect_to(admin_relays_path) - end - end - - context 'with invalid data' do - it 'does not create new a relay and renders new' do - expect do - post :create, params: { relay: { inbox_url: 'invalid' } } - end.to_not change(Relay, :count) - - expect(response).to have_http_status(:success) - expect(response).to render_template(:new) - end - end - end - - describe 'DELETE #destroy' do - let(:relay) { Fabricate(:relay) } - - it 'deletes an existing relay' do - delete :destroy, params: { id: relay.id } - - expect { relay.reload }.to raise_error(ActiveRecord::RecordNotFound) - expect(response).to redirect_to(admin_relays_path) - end - end - - describe 'POST #enable' do - let(:relay) { Fabricate(:relay, state: :idle) } - - before do - stub_request(:post, /example.com/).to_return(status: 200) - end - - it 'updates a relay from idle to pending' do - post :enable, params: { id: relay.id } - - expect(relay.reload).to be_pending - expect(response).to redirect_to(admin_relays_path) - end - end - - describe 'POST #disable' do - let(:relay) { Fabricate(:relay, state: :pending) } - - before do - stub_request(:post, /example.com/).to_return(status: 200) - end - - it 'updates a relay from pending to idle' do - post :disable, params: { id: relay.id } - - expect(relay.reload).to be_idle - expect(response).to redirect_to(admin_relays_path) - end - end -end diff --git a/spec/system/admin/relays_spec.rb b/spec/system/admin/relays_spec.rb new file mode 100644 index 0000000000..14d453576b --- /dev/null +++ b/spec/system/admin/relays_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe 'Admin Relays' do + describe 'Managing relays' do + before { sign_in Fabricate(:user, role: UserRole.find_by(name: 'Admin')) } + + describe 'Viewing relays' do + let!(:relay) { Fabricate :relay } + + it 'lists existing records' do + visit admin_relays_path + + expect(page) + .to have_content(I18n.t('admin.relays.title')) + .and have_content(relay.inbox_url) + end + end + + describe 'Creating a new relay' do + it 'creates new record with valid attributes' do + visit admin_relays_path + + # Visit new page + click_on I18n.t('admin.relays.setup') + expect(page) + .to have_content(I18n.t('admin.relays.add_new')) + + # Invalid submission + fill_in 'relay_inbox_url', with: '' + expect { submit_form } + .to_not change(Relay, :count) + expect(page) + .to have_content(/errors below/) + + # Valid submission + fill_in 'relay_inbox_url', with: 'https://host.example/hooks/123' + expect { submit_form } + .to change(Relay, :count).by(1) + expect(page) + .to have_content(I18n.t('admin.relays.title')) + end + + def submit_form + click_on I18n.t('admin.relays.save_and_enable') + end + end + + describe 'Destroy a relay' do + let!(:relay) { Fabricate :relay } + + it 'removes the record' do + visit admin_relays_path + + expect { click_on I18n.t('admin.relays.delete') } + .to change(Relay, :count).by(-1) + expect { relay.reload } + .to raise_error(ActiveRecord::RecordNotFound) + end + end + + describe 'Toggle state of relay' do + let!(:relay) { Fabricate :relay, state: :accepted } + + it 'switches state as requested' do + visit admin_relays_path + + # Disable the initially enabled record + expect { click_on I18n.t('admin.relays.disable') } + .to change { relay.reload.accepted? }.to(false) + + relay.update(state: :rejected) + # Re-enable the record + expect { click_on I18n.t('admin.relays.enable') } + .to change { relay.reload.pending? }.to(true) + end + end + end +end