Add /api/v1/admin/domain_allows (#18668)
- `GET /api/v1/admin/domain_allows` lists allowed domains - `GET /api/v1/admin/domain_allows/:id` shows one by ID - `DELETE /api/v1/admin/domain_allows/:id` deletes a given domain from the list of allowed domains - `POST /api/v1/admin/domain_allows` to allow a new domain: if that domain is already allowed, the existing DomainAllow will be returned
This commit is contained in:
		
					parent
					
						
							
								9c571a95db
							
						
					
				
			
			
				commit
				
					
						35588d09e2
					
				
			
		
					 6 changed files with 232 additions and 0 deletions
				
			
		
							
								
								
									
										118
									
								
								spec/controllers/api/v1/admin/domain_allows_controller_spec.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								spec/controllers/api/v1/admin/domain_allows_controller_spec.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,118 @@ | |||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe Api::V1::Admin::DomainAllowsController, type: :controller do | ||||
|   render_views | ||||
| 
 | ||||
|   let(:role)   { 'admin' } | ||||
|   let(:user)   { Fabricate(:user, role: role) } | ||||
|   let(:scopes) { 'admin:read admin:write' } | ||||
|   let(:token)  { Fabricate(:accessible_access_token, resource_owner_id: user.id, scopes: scopes) } | ||||
| 
 | ||||
|   before do | ||||
|     allow(controller).to receive(:doorkeeper_token) { token } | ||||
|   end | ||||
| 
 | ||||
|   shared_examples 'forbidden for wrong scope' do |wrong_scope| | ||||
|     let(:scopes) { wrong_scope } | ||||
| 
 | ||||
|     it 'returns http forbidden' do | ||||
|       expect(response).to have_http_status(403) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   shared_examples 'forbidden for wrong role' do |wrong_role| | ||||
|     let(:role) { wrong_role } | ||||
| 
 | ||||
|     it 'returns http forbidden' do | ||||
|       expect(response).to have_http_status(403) | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'GET #index' do | ||||
|     let!(:domain_allow) { Fabricate(:domain_allow) } | ||||
| 
 | ||||
|     before do | ||||
|       get :index | ||||
|     end | ||||
| 
 | ||||
|     it_behaves_like 'forbidden for wrong scope', 'write:statuses' | ||||
|     it_behaves_like 'forbidden for wrong role', 'user' | ||||
|     it_behaves_like 'forbidden for wrong role', 'moderator' | ||||
| 
 | ||||
|     it 'returns http success' do | ||||
|       expect(response).to have_http_status(200) | ||||
|     end | ||||
| 
 | ||||
|     it 'returns the expected domain allows' do | ||||
|       json = body_as_json | ||||
|       expect(json.length).to eq 1 | ||||
|       expect(json[0][:id].to_i).to eq domain_allow.id | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'GET #show' do | ||||
|     let!(:domain_allow) { Fabricate(:domain_allow) } | ||||
| 
 | ||||
|     before do | ||||
|       get :show, params: { id: domain_allow.id } | ||||
|     end | ||||
| 
 | ||||
|     it_behaves_like 'forbidden for wrong scope', 'write:statuses' | ||||
|     it_behaves_like 'forbidden for wrong role', 'user' | ||||
|     it_behaves_like 'forbidden for wrong role', 'moderator' | ||||
| 
 | ||||
|     it 'returns http success' do | ||||
|       expect(response).to have_http_status(200) | ||||
|     end | ||||
| 
 | ||||
|     it 'returns expected domain name' do | ||||
|       json = body_as_json | ||||
|       expect(json[:domain]).to eq domain_allow.domain | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'DELETE #destroy' do | ||||
|     let!(:domain_allow) { Fabricate(:domain_allow) } | ||||
| 
 | ||||
|     before do | ||||
|       delete :destroy, params: { id: domain_allow.id } | ||||
|     end | ||||
| 
 | ||||
|     it_behaves_like 'forbidden for wrong scope', 'write:statuses' | ||||
|     it_behaves_like 'forbidden for wrong role', 'user' | ||||
|     it_behaves_like 'forbidden for wrong role', 'moderator' | ||||
| 
 | ||||
|     it 'returns http success' do | ||||
|       expect(response).to have_http_status(200) | ||||
|     end | ||||
| 
 | ||||
|     it 'deletes the block' do | ||||
|       expect(DomainAllow.find_by(id: domain_allow.id)).to be_nil | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe 'POST #create' do | ||||
|     let!(:domain_allow) { Fabricate(:domain_allow, domain: 'example.com') } | ||||
| 
 | ||||
|     before do | ||||
|       post :create, params: { domain: 'foo.bar.com' } | ||||
|     end | ||||
| 
 | ||||
|     it_behaves_like 'forbidden for wrong scope', 'write:statuses' | ||||
|     it_behaves_like 'forbidden for wrong role', 'user' | ||||
|     it_behaves_like 'forbidden for wrong role', 'moderator' | ||||
| 
 | ||||
|     it 'returns http success' do | ||||
|       expect(response).to have_http_status(200) | ||||
|     end | ||||
| 
 | ||||
|     it 'returns expected domain name' do | ||||
|       json = body_as_json | ||||
|       expect(json[:domain]).to eq 'foo.bar.com' | ||||
|     end | ||||
| 
 | ||||
|     it 'creates a domain block' do | ||||
|       expect(DomainAllow.find_by(domain: 'foo.bar.com')).to_not be_nil | ||||
|     end | ||||
|   end | ||||
| end | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue