108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'db/mongo/models/user'
 | |
| 
 | |
| RSpec.describe Devops::Model::User, type: :model do
 | |
|   let(:user) { build(:user) }
 | |
| 
 | |
|   it 'is valid with correct attrs' do
 | |
|     expect(user).to be_valid
 | |
|   end
 | |
| 
 | |
|   describe 'validation' do
 | |
|     include_examples 'field type validation', :id, :not_nil, :non_empty_string, :only_word_symbols, :field_validator
 | |
|     include_examples 'field type validation', :password, :not_nil, :maybe_empty_string, :field_validator
 | |
|     include_examples 'field type validation', :email, :not_nil, :maybe_empty_string, :field_validator
 | |
| 
 | |
|     it "privileges is set to default value if nil is passed" do
 | |
|       expect(user.privileges).not_to be nil
 | |
|     end
 | |
| 
 | |
|     it 'privileges should be a hash' do
 | |
|       expect(build(:user, privileges: 'root')).not_to be_valid
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   it '#to_hash_without_id returns email, password and privileges' do
 | |
|     expect(user.to_hash_without_id.keys).to match_array(%w(email password privileges))
 | |
|   end
 | |
| 
 | |
|   describe '#privileges' do
 | |
|     subject {user.privileges}
 | |
|     it { should be_a(Hash) }
 | |
| 
 | |
|     it 'has entity types as keys' do
 | |
|       expect(subject.keys).to match_array(Devops::Model::User::KNOWN_ENTITIES)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#all_privileges' do
 | |
|     it 'all privileges are set to rwx' do
 | |
|       expect(user.all_privileges.values.uniq).to eq ['rwx']
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#default_privileges' do
 | |
|     it 'user privilege is empty' do
 | |
|       expect(user.default_privileges['user']).to be_empty
 | |
|     end
 | |
| 
 | |
|     it 'others are r' do
 | |
|       result = user.default_privileges
 | |
|       result.delete('user')
 | |
|       expect(result.values.uniq).to eq ['r']
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#grant' do
 | |
|     it 'sets privilege' do
 | |
|       expect {
 | |
|         user.grant('key', 'rw')
 | |
|       }.to change{ user.privileges['key'] }.from('r').to('rw')
 | |
|     end
 | |
|     it 'could not be applied to root' do
 | |
|       root = build(:user, id: 'root')
 | |
|       expect{root.grant('user', 'r')}.to raise_error(InvalidPrivileges)
 | |
|     end
 | |
| 
 | |
|     it 'recognize all value of entity' do
 | |
|       user.grant('all', 'rw')
 | |
|       expect(user.privileges.values.uniq).to eq ['rw']
 | |
|     end
 | |
| 
 | |
|     it 'sets default privileges if cmd is empty' do
 | |
|       user.grant('user', 'rw')
 | |
|       user.grant('', 'rwx')
 | |
|       expect(user.privileges).to eq user.default_privileges
 | |
|     end
 | |
| 
 | |
|     it 'could not be applied with unknown privilege value' do
 | |
|       expect{user.grant('user', 'q')}.to raise_error(InvalidCommand)
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '#check_privileges' do
 | |
|     it "raises InvalidPrivileges if user hasn't specified privilege" do
 | |
|       expect { user.check_privileges('key', 'w') }.to raise_error(InvalidPrivileges)
 | |
|     end
 | |
| 
 | |
|     it 'does nothing is user has specified privilege' do
 | |
|       user.check_privileges('key', 'r')
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   describe '.create_root' do
 | |
|     subject {Devops::Model::User.create_root}
 | |
|     it { should be_valid }
 | |
|     it 'his name is root' do
 | |
|       expect(subject.id).to eq Devops::Model::User::ROOT_USER_NAME
 | |
|     end
 | |
| 
 | |
|     it 'his password is root password' do
 | |
|       expect(subject.password).to eq Devops::Model::User::ROOT_PASSWORD
 | |
|     end
 | |
| 
 | |
|     it 'has all privileges' do
 | |
|       expect(subject.privileges).to eq user.all_privileges
 | |
|     end
 | |
|   end
 | |
| end
 | 
