Migrate to request specs in /api/v1/admin/email_domain_blocks (#25337)
				
					
				
			This commit is contained in:
		
							parent
							
								
									18f092d927
								
							
						
					
					
						commit
						4aff1d2974
					
				
					 1 changed files with 65 additions and 118 deletions
				
			
		|  | @ -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 | ||||||
		Loading…
	
		Reference in a new issue