Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Speicher <robert@gitlab.com>2018-01-23 01:54:24 +0300
committerRobert Speicher <robert@gitlab.com>2018-01-23 01:54:24 +0300
commit4bf2fded92e05420e6d103c8df63d6d83198a684 (patch)
treee71cd5818fb957d0d5583d30d851538a6d6f2e61
parent9c5ba799966bab0a26d49e8a777359d3e85a7dcc (diff)
parent2c1d7c09483948f764693f30cc070671a93f789f (diff)
Merge branch '40612-cannot-change-project-visibility-from-private-even-when-owner' into 'master'
Resolve "Cannot change project visibility from Private (even when owner)" Closes #40612 See merge request gitlab-org/gitlab-ce!16595
-rw-r--r--app/models/project.rb2
-rw-r--r--changelogs/unreleased/40612-cannot-change-project-visibility-from-private-even-when-owner.yml6
-rw-r--r--spec/helpers/projects_helper_spec.rb22
-rw-r--r--spec/models/project_spec.rb4
4 files changed, 28 insertions, 6 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index c0f7b30ceb0..0570bbc8ee3 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -1032,6 +1032,8 @@ class Project < ActiveRecord::Base
end
def fork_source
+ return nil unless forked?
+
forked_from_project || fork_network&.root_project
end
diff --git a/changelogs/unreleased/40612-cannot-change-project-visibility-from-private-even-when-owner.yml b/changelogs/unreleased/40612-cannot-change-project-visibility-from-private-even-when-owner.yml
new file mode 100644
index 00000000000..96bb59d303c
--- /dev/null
+++ b/changelogs/unreleased/40612-cannot-change-project-visibility-from-private-even-when-owner.yml
@@ -0,0 +1,6 @@
+---
+title: Fix bug in which projects with forks could not change visibility settings from
+ Private to Public
+merge_request: 16595
+author:
+type: fixed
diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb
index ede9d232efd..c0251bf7dc0 100644
--- a/spec/helpers/projects_helper_spec.rb
+++ b/spec/helpers/projects_helper_spec.rb
@@ -1,6 +1,8 @@
require 'spec_helper'
describe ProjectsHelper do
+ include ProjectForksHelper
+
describe "#project_status_css_class" do
it "returns appropriate class" do
expect(project_status_css_class("started")).to eq("active")
@@ -10,9 +12,9 @@ describe ProjectsHelper do
end
describe "can_change_visibility_level?" do
- let(:project) { create(:project, :repository) }
+ let(:project) { create(:project) }
let(:user) { create(:project_member, :reporter, user: create(:user), project: project).user }
- let(:fork_project) { Projects::ForkService.new(project, user).execute }
+ let(:forked_project) { fork_project(project, user) }
it "returns false if there are no appropriate permissions" do
allow(helper).to receive(:can?) { false }
@@ -26,21 +28,29 @@ describe ProjectsHelper do
expect(helper.can_change_visibility_level?(project, user)).to be_truthy
end
+ it 'allows visibility level to be changed if the project is forked' do
+ allow(helper).to receive(:can?).with(user, :change_visibility_level, project) { true }
+ project.update!(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
+ fork_project(project)
+
+ expect(helper.can_change_visibility_level?(project, user)).to be_truthy
+ end
+
context "forks" do
it "returns false if there are permissions and origin project is PRIVATE" do
allow(helper).to receive(:can?) { true }
- project.update visibility_level: Gitlab::VisibilityLevel::PRIVATE
+ project.update(visibility_level: Gitlab::VisibilityLevel::PRIVATE)
- expect(helper.can_change_visibility_level?(fork_project, user)).to be_falsey
+ expect(helper.can_change_visibility_level?(forked_project, user)).to be_falsey
end
it "returns true if there are permissions and origin project is INTERNAL" do
allow(helper).to receive(:can?) { true }
- project.update visibility_level: Gitlab::VisibilityLevel::INTERNAL
+ project.update(visibility_level: Gitlab::VisibilityLevel::INTERNAL)
- expect(helper.can_change_visibility_level?(fork_project, user)).to be_truthy
+ expect(helper.can_change_visibility_level?(forked_project, user)).to be_truthy
end
end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 987be8e8b46..4d10df410ab 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -1951,6 +1951,10 @@ describe Project do
expect(second_fork.fork_source).to eq(project)
end
+
+ it 'returns nil if it is the root of the fork network' do
+ expect(project.fork_source).to be_nil
+ end
end
describe '#lfs_storage_project' do