Add coverage for `UserRole` validations (#33029)
This commit is contained in:
		
							parent
							
								
									7fb0880e1e
								
							
						
					
					
						commit
						fd90f04f0e
					
				| 
						 | 
					@ -3,9 +3,69 @@
 | 
				
			||||||
require 'rails_helper'
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RSpec.describe UserRole do
 | 
					RSpec.describe UserRole do
 | 
				
			||||||
  subject { described_class.create(name: 'Foo', position: 1) }
 | 
					  describe 'Validations' do
 | 
				
			||||||
 | 
					    describe 'name' do
 | 
				
			||||||
 | 
					      context 'when everyone' do
 | 
				
			||||||
 | 
					        subject { described_class.everyone }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it { is_expected.to_not validate_presence_of(:name) }
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      context 'when not everyone' do
 | 
				
			||||||
 | 
					        subject { Fabricate.build :user_role }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it { is_expected.to validate_presence_of(:name) }
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    describe 'color' do
 | 
				
			||||||
 | 
					      it { is_expected.to allow_values('#112233', '#aabbcc', '').for(:color) }
 | 
				
			||||||
 | 
					      it { is_expected.to_not allow_values('x', '112233445566', '#xxyyzz').for(:color) }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'when current_account is set' do
 | 
				
			||||||
 | 
					      subject { Fabricate :user_role }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      let(:account) { Fabricate :account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      before { subject.current_account = account }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it { is_expected.to_not allow_value(999_999).for(:position).with_message(:elevated) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it { is_expected.to_not allow_value(999_999).for(:permissions).against(:permissions_as_keys).with_message(:elevated) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      context 'when current_account is changing their own role' do
 | 
				
			||||||
 | 
					        let(:account) { Fabricate :account, user: Fabricate(:user, role: subject) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        it { is_expected.to_not allow_value(100).for(:permissions).against(:permissions_as_keys).with_message(:own_role) }
 | 
				
			||||||
 | 
					        it { is_expected.to_not allow_value(100).for(:position).with_message(:own_role) }
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'Callback for position' do
 | 
				
			||||||
 | 
					    context 'when everyone' do
 | 
				
			||||||
 | 
					      subject { Fabricate.build :user_role, id: described_class::EVERYONE_ROLE_ID }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'sets the position to nobody position' do
 | 
				
			||||||
 | 
					        expect { subject.valid? }
 | 
				
			||||||
 | 
					          .to change(subject, :position).to(described_class::NOBODY_POSITION)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    context 'when not everyone' do
 | 
				
			||||||
 | 
					      subject { Fabricate.build :user_role }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      it 'does not change the position' do
 | 
				
			||||||
 | 
					        expect { subject.valid? }
 | 
				
			||||||
 | 
					          .to_not change(subject, :position)
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe '#can?' do
 | 
					  describe '#can?' do
 | 
				
			||||||
 | 
					    subject { Fabricate :user_role }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context 'with a single flag' do
 | 
					    context 'with a single flag' do
 | 
				
			||||||
      it 'returns true if any of them are present' do
 | 
					      it 'returns true if any of them are present' do
 | 
				
			||||||
        subject.permissions = described_class::FLAGS[:manage_reports]
 | 
					        subject.permissions = described_class::FLAGS[:manage_reports]
 | 
				
			||||||
| 
						 | 
					@ -92,6 +152,8 @@ RSpec.describe UserRole do
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe '#computed_permissions' do
 | 
					  describe '#computed_permissions' do
 | 
				
			||||||
 | 
					    subject { Fabricate :user_role }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    context 'when the role is nobody' do
 | 
					    context 'when the role is nobody' do
 | 
				
			||||||
      subject { described_class.nobody }
 | 
					      subject { described_class.nobody }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue