From 665bb237a8b23f8267eb8fcbcae8da32358e6ba4 Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Wed, 31 May 2023 04:23:32 -0400 Subject: [PATCH] Increase spec coverage for controllers - admin/ip_blocks, admin/relays, admin/rules (#25192) --- .../admin/ip_blocks_controller_spec.rb | 33 ++++++++++ .../admin/relays_controller_spec.rb | 38 +++++++++++ .../admin/rules_controller_spec.rb | 64 +++++++++++++++++++ 3 files changed, 135 insertions(+) diff --git a/spec/controllers/admin/ip_blocks_controller_spec.rb b/spec/controllers/admin/ip_blocks_controller_spec.rb index 873888afc..05190f134 100644 --- a/spec/controllers/admin/ip_blocks_controller_spec.rb +++ b/spec/controllers/admin/ip_blocks_controller_spec.rb @@ -18,4 +18,37 @@ describe Admin::IpBlocksController do 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 + it 'creates a new ip block and redirects' do + expect do + post :create, params: { ip_block: { ip: '1.1.1.1', severity: 'no_access', expires_in: 1.day.to_i.to_s } } + end.to change(IpBlock, :count).by(1) + + expect(response).to redirect_to(admin_ip_blocks_path) + expect(flash.notice).to match(I18n.t('admin.ip_blocks.created_msg')) + end + end + + context 'with invalid data' do + it 'does not create new a ip block and renders new' do + expect do + post :create, params: { ip_block: { ip: '1.1.1.1' } } + end.to_not change(IpBlock, :count) + + expect(response).to have_http_status(:success) + expect(response).to render_template(:new) + end + end + end end diff --git a/spec/controllers/admin/relays_controller_spec.rb b/spec/controllers/admin/relays_controller_spec.rb index dfb9f3c04..261f302c0 100644 --- a/spec/controllers/admin/relays_controller_spec.rb +++ b/spec/controllers/admin/relays_controller_spec.rb @@ -18,4 +18,42 @@ describe Admin::RelaysController do 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 end diff --git a/spec/controllers/admin/rules_controller_spec.rb b/spec/controllers/admin/rules_controller_spec.rb index d7b633c04..92ffb4156 100644 --- a/spec/controllers/admin/rules_controller_spec.rb +++ b/spec/controllers/admin/rules_controller_spec.rb @@ -18,4 +18,68 @@ describe Admin::RulesController do expect(response).to have_http_status(:success) end end + + describe 'GET #edit' do + let(:rule) { Fabricate(:rule) } + + it 'returns http success and renders edit' do + get :edit, params: { id: rule.id } + + expect(response).to have_http_status(:success) + expect(response).to render_template(:edit) + end + end + + describe 'POST #create' do + context 'with valid data' do + it 'creates a new rule and redirects' do + expect do + post :create, params: { rule: { text: 'The rule text.' } } + end.to change(Rule, :count).by(1) + + expect(response).to redirect_to(admin_rules_path) + end + end + + context 'with invalid data' do + it 'does creates a new rule and renders index' do + expect do + post :create, params: { rule: { text: '' } } + end.to_not change(Rule, :count) + + expect(response).to render_template(:index) + end + end + end + + describe 'PUT #update' do + let(:rule) { Fabricate(:rule, text: 'Original text') } + + context 'with valid data' do + it 'updates the rule and redirects' do + put :update, params: { id: rule.id, rule: { text: 'Updated text.' } } + + expect(response).to redirect_to(admin_rules_path) + end + end + + context 'with invalid data' do + it 'does not update the rule and renders index' do + put :update, params: { id: rule.id, rule: { text: '' } } + + expect(response).to render_template(:edit) + end + end + end + + describe 'DELETE #destroy' do + let!(:rule) { Fabricate(:rule) } + + it 'destroys the rule and redirects' do + delete :destroy, params: { id: rule.id } + + expect(rule.reload).to be_discarded + expect(response).to redirect_to(admin_rules_path) + end + end end