Migrate to request specs in `/api/v1/admin/email_domain_blocks` (#25337)

This commit is contained in:
Daniel M Brasil 2023-06-09 09:00:14 -03:00 committed by GitHub
parent 18f092d927
commit 4aff1d2974
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 65 additions and 118 deletions

View File

@ -2,23 +2,20 @@
require 'rails_helper' require 'rails_helper'
describe Api::V1::Admin::EmailDomainBlocksController do RSpec.describe 'Email Domain Blocks' do
render_views
let(:role) { UserRole.find_by(name: 'Admin') } let(:role) { UserRole.find_by(name: 'Admin') }
let(:user) { Fabricate(:user, role: role) } let(:user) { Fabricate(:user, role: role) }
let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } let(:token) { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) }
let(:account) { Fabricate(:account) } let(:account) { Fabricate(:account) }
let(:scopes) { 'admin:read:email_domain_blocks admin:write:email_domain_blocks' } let(:scopes) { 'admin:read:email_domain_blocks admin:write:email_domain_blocks' }
let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
before do
allow(controller).to receive(:doorkeeper_token) { token }
end
shared_examples 'forbidden for wrong scope' do |wrong_scope| shared_examples 'forbidden for wrong scope' do |wrong_scope|
let(:scopes) { wrong_scope } let(:scopes) { wrong_scope }
it 'returns http forbidden' do it 'returns http forbidden' do
subject
expect(response).to have_http_status(403) expect(response).to have_http_status(403)
end end
end end
@ -27,65 +24,54 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let(:role) { UserRole.find_by(name: wrong_role) } let(:role) { UserRole.find_by(name: wrong_role) }
it 'returns http forbidden' do it 'returns http forbidden' do
subject
expect(response).to have_http_status(403) expect(response).to have_http_status(403)
end end
end end
describe 'GET #index' do describe 'GET /api/v1/admin/email_domain_blocks' do
context 'with wrong scope' do subject do
before do get '/api/v1/admin/email_domain_blocks', headers: headers, params: params
get :index
end
it_behaves_like 'forbidden for wrong scope', 'read:statuses'
end end
context 'with wrong role' do let(:params) { {} }
before do
get :index
end
it_behaves_like 'forbidden for wrong role', '' it_behaves_like 'forbidden for wrong scope', 'read:statuses'
it_behaves_like 'forbidden for wrong role', 'Moderator' it_behaves_like 'forbidden for wrong role', ''
end it_behaves_like 'forbidden for wrong role', 'Moderator'
it 'returns http success' do it 'returns http success' do
get :index subject
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
end end
context 'when there is no email domain block' do context 'when there is no email domain block' do
it 'returns an empty list' do it 'returns an empty list' do
get :index subject
json = body_as_json expect(body_as_json).to be_empty
expect(json).to be_empty
end end
end end
context 'when there are email domain blocks' do context 'when there are email domain blocks' do
let!(:email_domain_blocks) { Fabricate.times(5, :email_domain_block) } let!(:email_domain_blocks) { Fabricate.times(5, :email_domain_block) }
let(:blocked_email_domains) { email_domain_blocks.pluck(:domain) } let(:blocked_email_domains) { email_domain_blocks.pluck(:domain) }
it 'return the correct blocked email domains' do it 'return the correct blocked email domains' do
get :index subject
json = body_as_json expect(body_as_json.pluck(:domain)).to match_array(blocked_email_domains)
expect(json.pluck(:domain)).to match_array(blocked_email_domains)
end end
context 'with limit param' do context 'with limit param' do
let(:params) { { limit: 2 } } let(:params) { { limit: 2 } }
it 'returns only the requested number of email domain blocks' do it 'returns only the requested number of email domain blocks' do
get :index, params: params subject
json = body_as_json expect(body_as_json.size).to eq(params[:limit])
expect(json.size).to eq(params[:limit])
end end
end end
@ -93,12 +79,11 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let(:params) { { since_id: email_domain_blocks[1].id } } let(:params) { { since_id: email_domain_blocks[1].id } }
it 'returns only the email domain blocks after since_id' do it 'returns only the email domain blocks after since_id' do
get :index, params: params subject
email_domain_blocks_ids = email_domain_blocks.pluck(:id).map(&:to_s) email_domain_blocks_ids = email_domain_blocks.pluck(:id).map(&:to_s)
json = body_as_json
expect(json.pluck(:id)).to match_array(email_domain_blocks_ids[2..]) expect(body_as_json.pluck(:id)).to match_array(email_domain_blocks_ids[2..])
end end
end end
@ -106,102 +91,78 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let(:params) { { max_id: email_domain_blocks[3].id } } let(:params) { { max_id: email_domain_blocks[3].id } }
it 'returns only the email domain blocks before max_id' do it 'returns only the email domain blocks before max_id' do
get :index, params: params subject
email_domain_blocks_ids = email_domain_blocks.pluck(:id).map(&:to_s) email_domain_blocks_ids = email_domain_blocks.pluck(:id).map(&:to_s)
json = body_as_json
expect(json.pluck(:id)).to match_array(email_domain_blocks_ids[..2]) expect(body_as_json.pluck(:id)).to match_array(email_domain_blocks_ids[..2])
end end
end end
end end
end end
describe 'GET #show' do describe 'GET /api/v1/admin/email_domain_blocks/:id' do
subject do
get "/api/v1/admin/email_domain_blocks/#{email_domain_block.id}", headers: headers
end
let!(:email_domain_block) { Fabricate(:email_domain_block) } let!(:email_domain_block) { Fabricate(:email_domain_block) }
let(:params) { { id: email_domain_block.id } }
context 'with wrong scope' do it_behaves_like 'forbidden for wrong scope', 'read:statuses'
before do it_behaves_like 'forbidden for wrong role', ''
get :show, params: params it_behaves_like 'forbidden for wrong role', 'Moderator'
end
it_behaves_like 'forbidden for wrong scope', 'read:statuses'
end
context 'with wrong role' do
before do
get :show, params: params
end
it_behaves_like 'forbidden for wrong role', ''
it_behaves_like 'forbidden for wrong role', 'Moderator'
end
context 'when email domain block exists' do context 'when email domain block exists' do
it 'returns http success' do it 'returns http success' do
get :show, params: params subject
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
end end
it 'returns the correct blocked domain' do it 'returns the correct blocked domain' do
get :show, params: params subject
json = body_as_json expect(body_as_json[:domain]).to eq(email_domain_block.domain)
expect(json[:domain]).to eq(email_domain_block.domain)
end end
end end
context 'when email domain block does not exist' do context 'when email domain block does not exist' do
it 'returns http not found' do it 'returns http not found' do
get :show, params: { id: 0 } get '/api/v1/admin/email_domain_blocks/-1', headers: headers
expect(response).to have_http_status(404) expect(response).to have_http_status(404)
end end
end end
end end
describe 'POST #create' do describe 'POST /api/v1/admin/email_domain_blocks' do
subject do
post '/api/v1/admin/email_domain_blocks', headers: headers, params: params
end
let(:params) { { domain: 'example.com' } } let(:params) { { domain: 'example.com' } }
context 'with wrong scope' do it_behaves_like 'forbidden for wrong scope', 'read:statuses'
before do it_behaves_like 'forbidden for wrong role', ''
post :create, params: params it_behaves_like 'forbidden for wrong role', 'Moderator'
end
it_behaves_like 'forbidden for wrong scope', 'read:statuses'
end
context 'with wrong role' do
before do
post :create, params: params
end
it_behaves_like 'forbidden for wrong role', ''
it_behaves_like 'forbidden for wrong role', 'Moderator'
end
it 'returns http success' do it 'returns http success' do
post :create, params: params subject
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
end end
it 'returns the correct blocked email domain' do it 'returns the correct blocked email domain' do
post :create, params: params subject
json = body_as_json expect(body_as_json[:domain]).to eq(params[:domain])
expect(json[:domain]).to eq(params[:domain])
end end
context 'when domain param is not provided' do context 'when domain param is not provided' do
let(:params) { { domain: '' } } let(:params) { { domain: '' } }
it 'returns http unprocessable entity' do it 'returns http unprocessable entity' do
post :create, params: params subject
expect(response).to have_http_status(422) expect(response).to have_http_status(422)
end end
@ -211,7 +172,7 @@ describe Api::V1::Admin::EmailDomainBlocksController do
let(:params) { { domain: 'do\uD800.com' } } let(:params) { { domain: 'do\uD800.com' } }
it 'returns http unprocessable entity' do it 'returns http unprocessable entity' do
post :create, params: params subject
expect(response).to have_http_status(422) expect(response).to have_http_status(422)
end end
@ -223,59 +184,45 @@ describe Api::V1::Admin::EmailDomainBlocksController do
end end
it 'returns http unprocessable entity' do it 'returns http unprocessable entity' do
post :create, params: params subject
expect(response).to have_http_status(422) expect(response).to have_http_status(422)
end end
end end
end end
describe 'DELETE #destroy' do describe 'DELETE /api/v1/admin/email_domain_blocks' do
subject do
delete "/api/v1/admin/email_domain_blocks/#{email_domain_block.id}", headers: headers
end
let!(:email_domain_block) { Fabricate(:email_domain_block) } let!(:email_domain_block) { Fabricate(:email_domain_block) }
let(:params) { { id: email_domain_block.id } }
context 'with wrong scope' do it_behaves_like 'forbidden for wrong scope', 'read:statuses'
before do it_behaves_like 'forbidden for wrong role', ''
delete :destroy, params: params it_behaves_like 'forbidden for wrong role', 'Moderator'
end
it_behaves_like 'forbidden for wrong scope', 'read:statuses'
end
context 'with wrong role' do
before do
delete :destroy, params: params
end
it_behaves_like 'forbidden for wrong role', ''
it_behaves_like 'forbidden for wrong role', 'Moderator'
end
it 'returns http success' do it 'returns http success' do
delete :destroy, params: params subject
expect(response).to have_http_status(200) expect(response).to have_http_status(200)
end end
it 'returns an empty body' do it 'returns an empty body' do
delete :destroy, params: params subject
json = body_as_json expect(body_as_json).to be_empty
expect(json).to be_empty
end end
it 'deletes email domain block' do it 'deletes email domain block' do
delete :destroy, params: params subject
email_domain_block = EmailDomainBlock.find_by(id: params[:id]) expect(EmailDomainBlock.find_by(id: email_domain_block.id)).to be_nil
expect(email_domain_block).to be_nil
end end
context 'when email domain block does not exist' do context 'when email domain block does not exist' do
it 'returns http not found' do it 'returns http not found' do
delete :destroy, params: { id: 0 } delete '/api/v1/admin/email_domain_blocks/-1', headers: headers
expect(response).to have_http_status(404) expect(response).to have_http_status(404)
end end