Convert admin/roles controller spec to request/sytem specs (#33947)
		
	This commit is contained in:
		
					parent
					
						
							
								93bc48d649
							
						
					
				
			
			
				commit
				
					
						2a15bf4ede
					
				
			
		
					 3 changed files with 211 additions and 240 deletions
				
			
		| 
						 | 
				
			
			@ -3,14 +3,142 @@
 | 
			
		|||
require 'rails_helper'
 | 
			
		||||
 | 
			
		||||
RSpec.describe 'Admin Roles' do
 | 
			
		||||
  describe 'POST /admin/roles' do
 | 
			
		||||
  context 'when signed in as lower permissions user' do
 | 
			
		||||
    let(:user_role) { Fabricate(:user_role, permissions: UserRole::Flags::NONE) }
 | 
			
		||||
 | 
			
		||||
    before { sign_in Fabricate(:user, role: user_role) }
 | 
			
		||||
 | 
			
		||||
    describe 'GET /admin/roles' do
 | 
			
		||||
      it 'returns http forbidden' do
 | 
			
		||||
        get admin_roles_path
 | 
			
		||||
 | 
			
		||||
        expect(response)
 | 
			
		||||
          .to have_http_status(403)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'GET /admin/roles/new' do
 | 
			
		||||
      it 'returns http forbidden' do
 | 
			
		||||
        get new_admin_role_path
 | 
			
		||||
 | 
			
		||||
        expect(response)
 | 
			
		||||
          .to have_http_status(403)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'GET /admin/roles/:id/edit' do
 | 
			
		||||
      let(:role) { Fabricate(:user_role) }
 | 
			
		||||
 | 
			
		||||
      it 'returns http forbidden' do
 | 
			
		||||
        get edit_admin_role_path(role)
 | 
			
		||||
 | 
			
		||||
        expect(response)
 | 
			
		||||
          .to have_http_status(403)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'PUT /admin/roles/:id' do
 | 
			
		||||
      let(:role) { Fabricate(:user_role) }
 | 
			
		||||
 | 
			
		||||
      it 'returns http forbidden' do
 | 
			
		||||
        put admin_role_path(role)
 | 
			
		||||
 | 
			
		||||
        expect(response)
 | 
			
		||||
          .to have_http_status(403)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'DELETE /admin/roles/:id' do
 | 
			
		||||
      let(:role) { Fabricate(:user_role) }
 | 
			
		||||
 | 
			
		||||
      it 'returns http forbidden' do
 | 
			
		||||
        delete admin_role_path(role)
 | 
			
		||||
 | 
			
		||||
        expect(response)
 | 
			
		||||
          .to have_http_status(403)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'when user has permissions to manage roles' do
 | 
			
		||||
    let(:user_role) { Fabricate(:user_role, permissions: UserRole::FLAGS[:manage_users]) }
 | 
			
		||||
 | 
			
		||||
    before { sign_in Fabricate(:user, role: user_role) }
 | 
			
		||||
 | 
			
		||||
    context 'when target role permission outranks user' do
 | 
			
		||||
      let(:role) { Fabricate(:user_role, position: user_role.position + 1) }
 | 
			
		||||
 | 
			
		||||
      describe 'GET /admin/roles/:id/edit' do
 | 
			
		||||
        it 'returns http forbidden' do
 | 
			
		||||
          get edit_admin_role_path(role)
 | 
			
		||||
 | 
			
		||||
          expect(response)
 | 
			
		||||
            .to have_http_status(403)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe 'PUT /admin/roles/:id' do
 | 
			
		||||
        it 'returns http forbidden' do
 | 
			
		||||
          put admin_role_path(role)
 | 
			
		||||
 | 
			
		||||
          expect(response)
 | 
			
		||||
            .to have_http_status(403)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      describe 'DELETE /admin/roles/:id' do
 | 
			
		||||
        it 'returns http forbidden' do
 | 
			
		||||
          delete admin_role_path(role)
 | 
			
		||||
 | 
			
		||||
          expect(response)
 | 
			
		||||
            .to have_http_status(403)
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'when attempting to add permissions the user does not have' do
 | 
			
		||||
    let(:user_role) { Fabricate(:user_role, permissions: UserRole::FLAGS[:manage_roles], position: 5) }
 | 
			
		||||
 | 
			
		||||
    before { sign_in Fabricate(:user, role: user_role) }
 | 
			
		||||
 | 
			
		||||
    describe 'POST /admin/roles' do
 | 
			
		||||
      subject { post admin_roles_path, params: { user_role: { name: 'Bar', position: 2, permissions_as_keys: %w(manage_roles manage_users manage_reports) } } }
 | 
			
		||||
 | 
			
		||||
      it 'does not create role' do
 | 
			
		||||
        expect { subject }
 | 
			
		||||
          .to_not change(UserRole, :count)
 | 
			
		||||
 | 
			
		||||
        expect(response.body)
 | 
			
		||||
          .to include(I18n.t('admin.roles.add_new'))
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    describe 'PUT /admin/roles/:id' do
 | 
			
		||||
      subject { put admin_role_path(role), params: { user_role: { position: 2, permissions_as_keys: %w(manage_roles manage_users manage_reports) } } }
 | 
			
		||||
 | 
			
		||||
      let(:role) { Fabricate(:user_role, name: 'Bar') }
 | 
			
		||||
 | 
			
		||||
      it 'does not create role' do
 | 
			
		||||
        expect { subject }
 | 
			
		||||
          .to_not(change { role.reload.permissions })
 | 
			
		||||
 | 
			
		||||
        expect(response.parsed_body.title)
 | 
			
		||||
          .to match(I18n.t('admin.roles.edit', name: 'Bar'))
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context 'when signed in as admin' do
 | 
			
		||||
    before { sign_in Fabricate(:admin_user) }
 | 
			
		||||
 | 
			
		||||
    it 'gracefully handles invalid nested params' do
 | 
			
		||||
      post admin_roles_path(user_role: 'invalid')
 | 
			
		||||
    describe 'POST /admin/roles' do
 | 
			
		||||
      it 'gracefully handles invalid nested params' do
 | 
			
		||||
        post admin_roles_path(user_role: 'invalid')
 | 
			
		||||
 | 
			
		||||
      expect(response)
 | 
			
		||||
        .to have_http_status(400)
 | 
			
		||||
        expect(response)
 | 
			
		||||
          .to have_http_status(400)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue