Commit 0e949d15 authored by Patrick Bajao's avatar Patrick Bajao

Merge branch '250681_refactor_visibility_level_helper' into 'master'

Refactor visibility_level_helper

See merge request gitlab-org/gitlab!50051
parents cc1dd5ad 6f9ba4b8
...@@ -26,76 +26,6 @@ module VisibilityLevelHelper ...@@ -26,76 +26,6 @@ module VisibilityLevelHelper
end end
end end
def project_visibility_level_description(level)
case level
when Gitlab::VisibilityLevel::PRIVATE
_("Project access must be granted explicitly to each user. If this project is part of a group, access will be granted to members of the group.")
when Gitlab::VisibilityLevel::INTERNAL
_("The project can be accessed by any logged in user except external users.")
when Gitlab::VisibilityLevel::PUBLIC
_("The project can be accessed without any authentication.")
end
end
def group_visibility_level_description(level)
case level
when Gitlab::VisibilityLevel::PRIVATE
_("The group and its projects can only be viewed by members.")
when Gitlab::VisibilityLevel::INTERNAL
_("The group and any internal projects can be viewed by any logged in user except external users.")
when Gitlab::VisibilityLevel::PUBLIC
_("The group and any public projects can be viewed without any authentication.")
end
end
# Note: these messages closely mirror the form validation strings found in the project
# model and any changes or additons to these may also need to be made there.
def disallowed_project_visibility_level_description(level, project)
level_name = Gitlab::VisibilityLevel.level_name(level).downcase
reasons = []
instructions = []
unless project.visibility_level_allowed_as_fork?(level)
reasons << "the fork source project has lower visibility"
end
unless project.visibility_level_allowed_by_group?(level)
errors = visibility_level_errors_for_group(project.group, level_name)
reasons << errors[:reason]
instructions << errors[:instruction]
end
reasons = reasons.any? ? ' because ' + reasons.to_sentence : ''
"This project cannot be #{level_name}#{reasons}.#{instructions.join}".html_safe
end
# Note: these messages closely mirror the form validation strings found in the group
# model and any changes or additons to these may also need to be made there.
def disallowed_group_visibility_level_description(level, group)
level_name = Gitlab::VisibilityLevel.level_name(level).downcase
reasons = []
instructions = []
unless group.visibility_level_allowed_by_projects?(level)
reasons << "it contains projects with higher visibility"
end
unless group.visibility_level_allowed_by_sub_groups?(level)
reasons << "it contains sub-groups with higher visibility"
end
unless group.visibility_level_allowed_by_parent?(level)
errors = visibility_level_errors_for_group(group.parent, level_name)
reasons << errors[:reason]
instructions << errors[:instruction]
end
reasons = reasons.any? ? ' because ' + reasons.to_sentence : ''
"This group cannot be #{level_name}#{reasons}.#{instructions.join}".html_safe
end
def visibility_icon_description(form_model) def visibility_icon_description(form_model)
if form_model.respond_to?(:visibility_level_allowed_as_fork?) if form_model.respond_to?(:visibility_level_allowed_as_fork?)
project_visibility_icon_description(form_model.visibility_level) project_visibility_icon_description(form_model.visibility_level)
...@@ -104,14 +34,6 @@ module VisibilityLevelHelper ...@@ -104,14 +34,6 @@ module VisibilityLevelHelper
end end
end end
def group_visibility_icon_description(level)
"#{visibility_level_label(level)} - #{group_visibility_level_description(level)}"
end
def project_visibility_icon_description(level)
"#{visibility_level_label(level)} - #{project_visibility_level_description(level)}"
end
def visibility_level_label(level) def visibility_level_label(level)
# The visibility level can be: # The visibility level can be:
# 'VisibilityLevel|Private', 'VisibilityLevel|Internal', 'VisibilityLevel|Public' # 'VisibilityLevel|Private', 'VisibilityLevel|Internal', 'VisibilityLevel|Public'
...@@ -203,11 +125,33 @@ module VisibilityLevelHelper ...@@ -203,11 +125,33 @@ module VisibilityLevelHelper
current_level current_level
end end
def visibility_level_errors_for_group(group, level_name) def project_visibility_level_description(level)
group_name = link_to group.name, group_path(group) case level
change_visibility = link_to 'change the visibility', edit_group_path(group) when Gitlab::VisibilityLevel::PRIVATE
_("Project access must be granted explicitly to each user. If this project is part of a group, access will be granted to members of the group.")
when Gitlab::VisibilityLevel::INTERNAL
_("The project can be accessed by any logged in user except external users.")
when Gitlab::VisibilityLevel::PUBLIC
_("The project can be accessed without any authentication.")
end
end
def group_visibility_level_description(level)
case level
when Gitlab::VisibilityLevel::PRIVATE
_("The group and its projects can only be viewed by members.")
when Gitlab::VisibilityLevel::INTERNAL
_("The group and any internal projects can be viewed by any logged in user except external users.")
when Gitlab::VisibilityLevel::PUBLIC
_("The group and any public projects can be viewed without any authentication.")
end
end
{ reason: "the visibility of #{group_name} is #{group.visibility}", def project_visibility_icon_description(level)
instruction: " To make this group #{level_name}, you must first #{change_visibility} of the parent group." } "#{visibility_level_label(level)} - #{project_visibility_level_description(level)}"
end
def group_visibility_icon_description(level)
"#{visibility_level_label(level)} - #{group_visibility_level_description(level)}"
end end
end end
...@@ -35,29 +35,33 @@ RSpec.describe VisibilityLevelHelper do ...@@ -35,29 +35,33 @@ RSpec.describe VisibilityLevelHelper do
describe 'visibility_level_description' do describe 'visibility_level_description' do
context 'used with a Project' do context 'used with a Project' do
it 'delegates projects to #project_visibility_level_description' do let(:descriptions) do
expect(visibility_level_description(Gitlab::VisibilityLevel::PRIVATE, project)) [
.to match /project/i visibility_level_description(Gitlab::VisibilityLevel::PRIVATE, project),
end visibility_level_description(Gitlab::VisibilityLevel::INTERNAL, project),
visibility_level_description(Gitlab::VisibilityLevel::PUBLIC, project)
]
end end
context 'used with a Group' do it 'returns different project related descriptions depending on visibility level' do
it 'delegates groups to #group_visibility_level_description' do expect(descriptions.uniq.size).to eq(descriptions.size)
expect(visibility_level_description(Gitlab::VisibilityLevel::PRIVATE, group)) expect(descriptions).to all match /project/i
.to match /group/i
end
end end
end end
describe "#project_visibility_level_description" do context 'used with a Group' do
it "describes private projects" do let(:descriptions) do
expect(project_visibility_level_description(Gitlab::VisibilityLevel::PRIVATE)) [
.to eq _('Project access must be granted explicitly to each user. If this project is part of a group, access will be granted to members of the group.') visibility_level_description(Gitlab::VisibilityLevel::PRIVATE, group),
visibility_level_description(Gitlab::VisibilityLevel::INTERNAL, group),
visibility_level_description(Gitlab::VisibilityLevel::PUBLIC, group)
]
end end
it "describes public projects" do it 'returns different group related descriptions depending on visibility level' do
expect(project_visibility_level_description(Gitlab::VisibilityLevel::PUBLIC)) expect(descriptions.uniq.size).to eq(descriptions.size)
.to eq _('The project can be accessed without any authentication.') expect(descriptions).to all match /group/i
end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment