context'user is not allowed to push to protected branch'do
beforedo
allow(user_access)
.toreceive(:can_push_to_branch?)
.and_return(false)
end
it'raises an error'do
expect{subject.validate!}.toraise_error(Gitlab::GitAccess::UnauthorizedError,'You are not allowed to push code to protected branches on this project.')
end
it'does not raise an error'do
expect{subject.validate!}.not_toraise_error
end
end
context'user is allowed to push to protected branch'do
beforedo
allow(user_access)
.toreceive(:can_push_to_branch?)
.and_return(true)
end
it'does not raise an error'do
expect{subject.validate!}.not_toraise_error
end
context'user cannot push to branch'do
beforedo
allow(user_access)
.toreceive(:can_push_to_branch?)
.with('feature')
.and_return(false)
end
end
context'protected branch creation feature is enabled'do
context'user can push to branch'do
context'user cannot merge to branch'do
beforedo
allow(user_access)
.toreceive(:can_push_to_branch?)
.toreceive(:can_merge_to_branch?)
.with('feature')
.and_return(true)
.and_return(false)
end
it'does not raise an error'do
expect{subject.validate!}.not_toraise_error
it'raises an error'do
expect{subject.validate!}.toraise_error(Gitlab::GitAccess::UnauthorizedError,'You are not allowed to create protected branches on this project.')
end
end
context'user cannot push to branch'do
context'user can merge to branch'do
beforedo
allow(user_access)
.toreceive(:can_push_to_branch?)
.toreceive(:can_merge_to_branch?)
.with('feature')
.and_return(false)
.and_return(true)
allow(project.repository)
.toreceive(:branch_names_contains_sha)
.with(newrev)
.and_return(['branch'])
end
context'user cannot merge to branch'do
context"newrev isn't in any protected branches"do
beforedo
allow(user_access)
.toreceive(:can_merge_to_branch?)
.with('feature')
allow(ProtectedBranch)
.toreceive(:any_protected?)
.with(project,['branch'])
.and_return(false)
end
it'raises an error'do
expect{subject.validate!}.toraise_error(Gitlab::GitAccess::UnauthorizedError,'You are not allowed to create protected branches on this project.')
expect{subject.validate!}.toraise_error(Gitlab::GitAccess::UnauthorizedError,'You can only use an existing protected branch ref as the basis of a new protected branch.')
end
end
context'user can merge to branch'do
context'newrev is included in a protected branch'do
beforedo
allow(user_access)
.toreceive(:can_merge_to_branch?)
.with('feature')
allow(ProtectedBranch)
.toreceive(:any_protected?)
.with(project,['branch'])
.and_return(true)
allow(project.repository)
.toreceive(:branch_names_contains_sha)
.with(newrev)
.and_return(['branch'])
end
context"newrev isn't in any protected branches"do
beforedo
allow(ProtectedBranch)
.toreceive(:any_protected?)
.with(project,['branch'])
.and_return(false)
end
context'via web interface'do
let(:protocol){'web'}
it'raises an error'do
expect{subject.validate!}.toraise_error(Gitlab::GitAccess::UnauthorizedError,'You can only use an existing protected branch ref as the basis of a new protected branch.')
it'allows branch creation'do
expect{subject.validate!}.not_toraise_error
end
end
context'newrev is included in a protected branch'do
beforedo
allow(ProtectedBranch)
.toreceive(:any_protected?)
.with(project,['branch'])
.and_return(true)
end
context'via web interface'do
let(:protocol){'web'}
it'allows branch creation'do
expect{subject.validate!}.not_toraise_error
end
end
context'via SSH'do
it'raises an error'do
expect{subject.validate!}.toraise_error(Gitlab::GitAccess::UnauthorizedError,'You can only create protected branches using the web interface and API.')
end
context'via SSH'do
it'raises an error'do
expect{subject.validate!}.toraise_error(Gitlab::GitAccess::UnauthorizedError,'You can only create protected branches using the web interface and API.')