From 5e3f8db7073743a4e4da39fa4203bdeab5caea5b Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Mon, 23 Jan 2017 14:49:13 +0100 Subject: Fix build access policies when pipelines are public --- spec/policies/ci/build_policy_spec.rb | 93 +++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 spec/policies/ci/build_policy_spec.rb (limited to 'spec') diff --git a/spec/policies/ci/build_policy_spec.rb b/spec/policies/ci/build_policy_spec.rb new file mode 100644 index 00000000000..0f280f32eac --- /dev/null +++ b/spec/policies/ci/build_policy_spec.rb @@ -0,0 +1,93 @@ +require 'spec_helper' + +describe Ci::BuildPolicy, :models do + let(:user) { create(:user) } + let(:build) { create(:ci_build, pipeline: pipeline) } + let(:pipeline) { create(:ci_empty_pipeline, project: project) } + + let(:policies) do + described_class.abilities(user, build).to_set + end + + shared_context 'public pipelines disabled' do + before { project.update_attribute(:public_builds, false) } + end + + describe '#rules' do + context 'when user does not have access to the project' do + let(:project) { create(:empty_project, :private) } + + context 'when public builds are enabled' do + it 'does not include ability to read build' do + expect(policies).not_to include :read_build + end + end + + context 'when public builds are disabled' do + include_context 'public pipelines disabled' + + it 'does not include ability to read build' do + expect(policies).not_to include :read_build + end + end + end + + context 'when anonymous user has access to the project' do + let(:project) { create(:empty_project, :public) } + + context 'when public builds are enabled' do + it 'includes ability to read build' do + expect(policies).to include :read_build + end + end + + context 'when public builds are disabled' do + include_context 'public pipelines disabled' + + it 'does not include ability to read build' do + expect(policies).not_to include :read_build + end + end + end + + context 'when team member has access to the project' do + let(:project) { create(:empty_project, :public) } + + context 'team member is a guest' do + before { project.team << [user, :guest] } + + context 'when public builds are enabled' do + it 'includes ability to read build' do + expect(policies).to include :read_build + end + end + + context 'when public builds are disabled' do + include_context 'public pipelines disabled' + + it 'does not include ability to read build' do + expect(policies).not_to include :read_build + end + end + end + + context 'team member is a reporter' do + before { project.team << [user, :reporter] } + + context 'when public builds are enabled' do + it 'includes ability to read build' do + expect(policies).to include :read_build + end + end + + context 'when public builds are disabled' do + include_context 'public pipelines disabled' + + it 'does not include ability to read build' do + expect(policies).to include :read_build + end + end + end + end + end +end -- cgit v1.2.1