ability_spec.rb revision 5ddd457a4e278410e58386a2333f5853f2f2ea8f
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornbergerrequire 'spec_helper'
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger let(:item){ create(:permission, subject: owner, role: 'owner').item }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger create(:permission, subject: editor, role: 'editor', item: item)
b2ee879528ace361f0f5a55de48c6b90515b27b0Eugen Kuksa create(:permission, subject: reader, role: 'reader', item: item)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger subject(:ability){ Ability.new(User.new) }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should_not be_able_to(perm, Repository.new)
b2ee879528ace361f0f5a55de48c6b90515b27b0Eugen Kuksa [:edit, :update, :destroy, :write].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger [:edit, :update, :destroy, :write].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'be allowed: edit, update, destroy, permissions, write' do
b2ee879528ace361f0f5a55de48c6b90515b27b0Eugen Kuksa [:show, :edit, :update, :destroy, :permissions].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'not be allowed on other: edit, update, destroy, permissions' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger [:edit, :update, :destroy, :permissions].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should_not be_able_to(perm, create(:repository))
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'not be allowed: edit, update, destroy, permissions' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger [:edit, :update, :destroy, :permissions].each do |perm|
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa let(:item){ create(:repository, access: 'private_rw', user: owner) }
b2ee879528ace361f0f5a55de48c6b90515b27b0Eugen Kuksa create(:permission, subject: editor, role: 'editor', item: item)
b2ee879528ace361f0f5a55de48c6b90515b27b0Eugen Kuksa create(:permission, subject: reader, role: 'reader', item: item)
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa let(:item){ create(:repository, access: 'private_r', user: owner) }
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa create(:permission, subject: editor, role: 'editor', item: item)
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa create(:permission, subject: reader, role: 'reader', item: item)
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa Ability.new(role).should_not be_able_to(:write, item)
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa Ability.new(role).should be_able_to(:show, item)
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa Ability.new(role).should_not be_able_to(:update, item)
5ddd457a4e278410e58386a2333f5853f2f2ea8fEugen Kuksa Ability.new(owner).should be_able_to(:update, item)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger let(:memberteam){ create(:team_user, user: other).team }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger let(:otherteam){ create(:team_user, user: other).team }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger context 'admin' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'be allowed: edit, update, destroy' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger [:edit, :update, :destroy].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should be_able_to(perm, create(:team_user, user: user).team)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger context 'member' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'be allowed: create, show, index' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger [:create, :show, :index].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should be_able_to(perm, Team.new)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'not be allowed: edit, update, destroy (without admin on team)' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger [:edit, :update, :destroy].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should_not be_able_to(perm, @memberteam)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'not be allowed: edit, update, destroy (without being on team)' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger [:edit, :update, :destroy].each do |perm|
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should_not be_able_to(perm, otherteam)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger context 'Comment' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger let(:comment){ create :comment }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger context 'author' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger subject(:ability){ Ability.new(comment.user) }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'destroy his own comment' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should be_able_to(:destroy, comment)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'not be allowed to destroy others comment' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should_not be_able_to(:destroy, create(:comment))
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger context 'admin' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger subject(:ability){ Ability.new(create :admin) }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'destroy others comment' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should be_able_to(:destroy, comment)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger context 'comments repository owner' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger subject(:ability){ Ability.new(owner) }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger create(:permission, subject: owner, role: 'owner', item: comment.commentable.repository)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'destroy others comments for his repository' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should be_able_to(:destroy, comment)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger context 'comments repository editor' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger subject(:ability){ Ability.new(owner) }
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger create(:permission, subject: owner, role: 'editor', item: comment.commentable.repository)
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger it 'not destroy others comments for his repository' do
65f00d360b7b3fabfc829fcc19a019bfef587595Julian Kornberger should_not be_able_to(:destroy, comment)