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