Commit 9b40fc74 authored by Luke Bennett's avatar Luke Bennett Committed by Douglas Barbosa Alexandre

Hide restricted and disallowed visibility radios

Show a message if many levels are restricted and a
different message if all levels are restricted.
parent 96277bb9
...@@ -65,20 +65,6 @@ module VisibilityLevelHelper ...@@ -65,20 +65,6 @@ module VisibilityLevelHelper
end end
end end
def restricted_visibility_level_description(level)
level_name = Gitlab::VisibilityLevel.level_name(level)
_("%{level_name} visibility has been restricted by the administrator.") % { level_name: level_name.capitalize }
end
def disallowed_visibility_level_description(level, form_model)
case form_model
when Project
disallowed_project_visibility_level_description(level, form_model)
when Group
disallowed_group_visibility_level_description(level, form_model)
end
end
# Note: these messages closely mirror the form validation strings found in the project # 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. # model and any changes or additons to these may also need to be made there.
def disallowed_project_visibility_level_description(level, project) def disallowed_project_visibility_level_description(level, project)
...@@ -181,6 +167,14 @@ module VisibilityLevelHelper ...@@ -181,6 +167,14 @@ module VisibilityLevelHelper
[requested_level, max_allowed_visibility_level(form_model)].min [requested_level, max_allowed_visibility_level(form_model)].min
end end
def multiple_visibility_levels_restricted?
restricted_visibility_levels.many? # rubocop: disable CodeReuse/ActiveRecord
end
def all_visibility_levels_restricted?
Gitlab::VisibilityLevel.values == restricted_visibility_levels
end
private private
def max_allowed_visibility_level(form_model) def max_allowed_visibility_level(form_model)
......
- Gitlab::VisibilityLevel.values.each do |level| - Gitlab::VisibilityLevel.values.each do |level|
- disallowed = disallowed_visibility_level?(form_model, level) - disallowed = disallowed_visibility_level?(form_model, level)
- restricted = restricted_visibility_levels.include?(level) - restricted = restricted_visibility_levels.include?(level)
- disabled = disallowed || restricted - next if disallowed || restricted
.form-check{ class: [('disabled' if disabled), ('restricted' if restricted)] }
= form.radio_button model_method, level, checked: (selected_level == level), disabled: disabled, class: 'form-check-input', data: { track_label: "blank_project", track_event: "activate_form_input", track_property: "#{model_method}", track_value: "#{level}" } .form-check
= form.radio_button model_method, level, checked: (selected_level == level), class: 'form-check-input', data: { track_label: "blank_project", track_event: "activate_form_input", track_property: "#{model_method}", track_value: "#{level}" }
= form.label "#{model_method}_#{level}", class: 'form-check-label' do = form.label "#{model_method}_#{level}", class: 'form-check-label' do
= visibility_level_icon(level) = visibility_level_icon(level)
.option-title .option-title
= visibility_level_label(level) = visibility_level_label(level)
.option-description .option-description
= visibility_level_description(level, form_model) = visibility_level_description(level, form_model)
.option-disabled-reason
- if restricted .text-muted
= restricted_visibility_level_description(level) - if all_visibility_levels_restricted?
- elsif disallowed = _('Visibility settings have been disabled by the administrator.')
= disallowed_visibility_level_description(level, form_model) - elsif multiple_visibility_levels_restricted?
= _('Other visibility settings have been disabled by the administrator.')
---
title: Hide restricted and disallowed visibility radios
merge_request: 30590
author:
type: fixed
...@@ -171,9 +171,6 @@ msgstr "" ...@@ -171,9 +171,6 @@ msgstr ""
msgid "%{level_name} is not allowed since the fork source project has lower visibility." msgid "%{level_name} is not allowed since the fork source project has lower visibility."
msgstr "" msgstr ""
msgid "%{level_name} visibility has been restricted by the administrator."
msgstr ""
msgid "%{link_start}Read more%{link_end} about role permissions" msgid "%{link_start}Read more%{link_end} about role permissions"
msgstr "" msgstr ""
...@@ -7228,6 +7225,9 @@ msgstr "" ...@@ -7228,6 +7225,9 @@ msgstr ""
msgid "Other Labels" msgid "Other Labels"
msgstr "" msgstr ""
msgid "Other visibility settings have been disabled by the administrator."
msgstr ""
msgid "Outbound requests" msgid "Outbound requests"
msgstr "" msgstr ""
...@@ -11974,6 +11974,9 @@ msgstr "" ...@@ -11974,6 +11974,9 @@ msgstr ""
msgid "Visibility level:" msgid "Visibility level:"
msgstr "" msgstr ""
msgid "Visibility settings have been disabled by the administrator."
msgstr ""
msgid "Visibility, project features, permissions" msgid "Visibility, project features, permissions"
msgstr "" msgstr ""
......
...@@ -3,300 +3,330 @@ require 'spec_helper' ...@@ -3,300 +3,330 @@ require 'spec_helper'
describe 'New project' do describe 'New project' do
include Select2Helper include Select2Helper
let(:user) { create(:admin) } context 'as a user' do
let(:user) { create(:user) }
before do before do
sign_in(user) sign_in(user)
end end
it 'shows "New project" page', :js do it 'shows a message if multiple levels are restricted' do
visit new_project_path Gitlab::CurrentSettings.update!(
restricted_visibility_levels: [Gitlab::VisibilityLevel::PRIVATE, Gitlab::VisibilityLevel::INTERNAL]
)
expect(page).to have_content('Project name') visit new_project_path
expect(page).to have_content('Project URL')
expect(page).to have_content('Project slug')
find('#import-project-tab').click expect(page).to have_content 'Other visibility settings have been disabled by the administrator.'
end
expect(page).to have_link('GitHub') it 'shows a message if all levels are restricted' do
expect(page).to have_link('Bitbucket') Gitlab::CurrentSettings.update!(
expect(page).to have_link('GitLab.com') restricted_visibility_levels: Gitlab::VisibilityLevel.values
expect(page).to have_link('Google Code') )
expect(page).to have_button('Repo by URL')
expect(page).to have_link('GitLab export')
end
describe 'manifest import option' do
before do
visit new_project_path visit new_project_path
find('#import-project-tab').click expect(page).to have_content 'Visibility settings have been disabled by the administrator.'
end end
end
context 'when using postgres', :postgresql do context 'as an admin' do
it { expect(page).to have_link('Manifest file') } let(:user) { create(:admin) }
end
context 'when using mysql', :mysql do before do
it { expect(page).not_to have_link('Manifest file') } sign_in(user)
end end
end
context 'Visibility level selector', :js do it 'shows "New project" page', :js do
Gitlab::VisibilityLevel.options.each do |key, level| visit new_project_path
it "sets selector to #{key}" do
stub_application_setting(default_project_visibility: level)
visit new_project_path expect(page).to have_content('Project name')
page.within('#blank-project-pane') do expect(page).to have_content('Project URL')
expect(find_field("project_visibility_level_#{level}")).to be_checked expect(page).to have_content('Project slug')
end
end
it "saves visibility level #{level} on validation error" do find('#import-project-tab').click
visit new_project_path
choose(s_(key)) expect(page).to have_link('GitHub')
click_button('Create project') expect(page).to have_link('Bitbucket')
page.within('#blank-project-pane') do expect(page).to have_link('GitLab.com')
expect(find_field("project_visibility_level_#{level}")).to be_checked expect(page).to have_link('Google Code')
end expect(page).to have_button('Repo by URL')
end expect(page).to have_link('GitLab export')
end end
context 'when group visibility is private but default is internal' do describe 'manifest import option' do
before do before do
stub_application_setting(default_project_visibility: Gitlab::VisibilityLevel::INTERNAL) visit new_project_path
find('#import-project-tab').click
end end
it 'has private selected' do context 'when using postgres', :postgresql do
group = create(:group, visibility_level: Gitlab::VisibilityLevel::PRIVATE) it { expect(page).to have_link('Manifest file') }
visit new_project_path(namespace_id: group.id) end
page.within('#blank-project-pane') do context 'when using mysql', :mysql do
expect(find_field("project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).to be_checked it { expect(page).not_to have_link('Manifest file') }
end
end end
end end
context 'when group visibility is public but user requests private' do context 'Visibility level selector', :js do
before do Gitlab::VisibilityLevel.options.each do |key, level|
stub_application_setting(default_project_visibility: Gitlab::VisibilityLevel::INTERNAL) it "sets selector to #{key}" do
end stub_application_setting(default_project_visibility: level)
visit new_project_path
page.within('#blank-project-pane') do
expect(find_field("project_visibility_level_#{level}")).to be_checked
end
end
it 'has private selected' do it "saves visibility level #{level} on validation error" do
group = create(:group, visibility_level: Gitlab::VisibilityLevel::PUBLIC) visit new_project_path
visit new_project_path(namespace_id: group.id, project: { visibility_level: Gitlab::VisibilityLevel::PRIVATE })
page.within('#blank-project-pane') do choose(s_(key))
expect(find_field("project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).to be_checked click_button('Create project')
page.within('#blank-project-pane') do
expect(find_field("project_visibility_level_#{level}")).to be_checked
end
end end
end end
end
end
context 'Readme selector' do context 'when group visibility is private but default is internal' do
it 'shows the initialize with Readme checkbox on "Blank project" tab' do before do
visit new_project_path stub_application_setting(default_project_visibility: Gitlab::VisibilityLevel::INTERNAL)
end
expect(page).to have_css('input#project_initialize_with_readme') it 'has private selected' do
expect(page).to have_content('Initialize repository with a README') group = create(:group, visibility_level: Gitlab::VisibilityLevel::PRIVATE)
end visit new_project_path(namespace_id: group.id)
it 'does not show the initialize with Readme checkbox on "Create from template" tab' do page.within('#blank-project-pane') do
visit new_project_path expect(find_field("project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).to be_checked
find('#create-from-template-pane').click end
first('.choose-template').click end
end
context 'when group visibility is public but user requests private' do
before do
stub_application_setting(default_project_visibility: Gitlab::VisibilityLevel::INTERNAL)
end
page.within '.project-fields-form' do it 'has private selected' do
expect(page).not_to have_css('input#project_initialize_with_readme') group = create(:group, visibility_level: Gitlab::VisibilityLevel::PUBLIC)
expect(page).not_to have_content('Initialize repository with a README') visit new_project_path(namespace_id: group.id, project: { visibility_level: Gitlab::VisibilityLevel::PRIVATE })
page.within('#blank-project-pane') do
expect(find_field("project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).to be_checked
end
end
end end
end end
it 'does not show the initialize with Readme checkbox on "Import project" tab' do context 'Readme selector' do
visit new_project_path it 'shows the initialize with Readme checkbox on "Blank project" tab' do
find('#import-project-tab').click visit new_project_path
first('.js-import-git-toggle-button').click
page.within '.toggle-import-form' do expect(page).to have_css('input#project_initialize_with_readme')
expect(page).not_to have_css('input#project_initialize_with_readme') expect(page).to have_content('Initialize repository with a README')
expect(page).not_to have_content('Initialize repository with a README')
end end
end
end
context 'Namespace selector' do it 'does not show the initialize with Readme checkbox on "Create from template" tab' do
context 'with user namespace' do
before do
visit new_project_path visit new_project_path
find('#create-from-template-pane').click
first('.choose-template').click
page.within '.project-fields-form' do
expect(page).not_to have_css('input#project_initialize_with_readme')
expect(page).not_to have_content('Initialize repository with a README')
end
end end
it 'selects the user namespace' do it 'does not show the initialize with Readme checkbox on "Import project" tab' do
page.within('#blank-project-pane') do visit new_project_path
namespace = find('#project_namespace_id') find('#import-project-tab').click
first('.js-import-git-toggle-button').click
expect(namespace.text).to eq user.username page.within '.toggle-import-form' do
expect(page).not_to have_css('input#project_initialize_with_readme')
expect(page).not_to have_content('Initialize repository with a README')
end end
end end
end end
context 'with group namespace' do context 'Namespace selector' do
let(:group) { create(:group, :private) } context 'with user namespace' do
before do
visit new_project_path
end
before do it 'selects the user namespace' do
group.add_owner(user) page.within('#blank-project-pane') do
visit new_project_path(namespace_id: group.id) namespace = find('#project_namespace_id')
expect(namespace.text).to eq user.username
end
end
end end
it 'selects the group namespace' do context 'with group namespace' do
page.within('#blank-project-pane') do let(:group) { create(:group, :private) }
namespace = find('#project_namespace_id option[selected]')
expect(namespace.text).to eq group.name before do
group.add_owner(user)
visit new_project_path(namespace_id: group.id)
end end
end
end
context 'with subgroup namespace' do it 'selects the group namespace' do
let(:group) { create(:group) } page.within('#blank-project-pane') do
let(:subgroup) { create(:group, parent: group) } namespace = find('#project_namespace_id option[selected]')
before do expect(namespace.text).to eq group.name
group.add_maintainer(user) end
visit new_project_path(namespace_id: subgroup.id) end
end end
it 'selects the group namespace' do context 'with subgroup namespace' do
page.within('#blank-project-pane') do let(:group) { create(:group) }
namespace = find('#project_namespace_id option[selected]') let(:subgroup) { create(:group, parent: group) }
expect(namespace.text).to eq subgroup.full_path before do
group.add_maintainer(user)
visit new_project_path(namespace_id: subgroup.id)
end end
end
end
context 'when changing namespaces dynamically', :js do it 'selects the group namespace' do
let(:public_group) { create(:group, :public) } page.within('#blank-project-pane') do
let(:internal_group) { create(:group, :internal) } namespace = find('#project_namespace_id option[selected]')
let(:private_group) { create(:group, :private) }
before do expect(namespace.text).to eq subgroup.full_path
public_group.add_owner(user) end
internal_group.add_owner(user) end
private_group.add_owner(user)
visit new_project_path(namespace_id: public_group.id)
end end
it 'enables the correct visibility options' do context 'when changing namespaces dynamically', :js do
select2(user.namespace_id, from: '#project_namespace_id') let(:public_group) { create(:group, :public) }
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled let(:internal_group) { create(:group, :internal) }
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled let(:private_group) { create(:group, :private) }
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
select2(public_group.id, from: '#project_namespace_id')
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
select2(internal_group.id, from: '#project_namespace_id')
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
select2(private_group.id, from: '#project_namespace_id')
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
end
end
end
context 'Import project options', :js do before do
before do public_group.add_owner(user)
visit new_project_path internal_group.add_owner(user)
find('#import-project-tab').click private_group.add_owner(user)
visit new_project_path(namespace_id: public_group.id)
end
it 'enables the correct visibility options' do
select2(user.namespace_id, from: '#project_namespace_id')
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
select2(public_group.id, from: '#project_namespace_id')
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
select2(internal_group.id, from: '#project_namespace_id')
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
select2(private_group.id, from: '#project_namespace_id')
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).to be_disabled
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
end
end
end end
context 'from git repository url, "Repo by URL"' do context 'Import project options', :js do
before do before do
first('.js-import-git-toggle-button').click visit new_project_path
find('#import-project-tab').click
end end
it 'does not autocomplete sensitive git repo URL' do context 'from git repository url, "Repo by URL"' do
autocomplete = find('#project_import_url')['autocomplete'] before do
first('.js-import-git-toggle-button').click
end
it 'does not autocomplete sensitive git repo URL' do
autocomplete = find('#project_import_url')['autocomplete']
expect(autocomplete).to eq('off') expect(autocomplete).to eq('off')
end end
it 'shows import instructions' do it 'shows import instructions' do
git_import_instructions = first('.js-toggle-content') git_import_instructions = first('.js-toggle-content')
expect(git_import_instructions).to be_visible expect(git_import_instructions).to be_visible
expect(git_import_instructions).to have_content 'Git repository URL' expect(git_import_instructions).to have_content 'Git repository URL'
end end
it 'keeps "Import project" tab open after form validation error' do it 'keeps "Import project" tab open after form validation error' do
collision_project = create(:project, name: 'test-name-collision', namespace: user.namespace) collision_project = create(:project, name: 'test-name-collision', namespace: user.namespace)
fill_in 'project_import_url', with: collision_project.http_url_to_repo fill_in 'project_import_url', with: collision_project.http_url_to_repo
fill_in 'project_name', with: collision_project.name fill_in 'project_name', with: collision_project.name
click_on 'Create project' click_on 'Create project'
expect(page).to have_css('#import-project-pane.active') expect(page).to have_css('#import-project-pane.active')
expect(page).not_to have_css('.toggle-import-form.hide') expect(page).not_to have_css('.toggle-import-form.hide')
end
end end
end
context 'from GitHub' do context 'from GitHub' do
before do before do
first('.js-import-github').click first('.js-import-github').click
end end
it 'shows import instructions' do it 'shows import instructions' do
expect(page).to have_content('Import repositories from GitHub') expect(page).to have_content('Import repositories from GitHub')
expect(current_path).to eq new_import_github_path expect(current_path).to eq new_import_github_path
end
end end
end
context 'from Google Code' do context 'from Google Code' do
before do before do
first('.import_google_code').click first('.import_google_code').click
end end
it 'shows import instructions' do it 'shows import instructions' do
expect(page).to have_content('Import projects from Google Code') expect(page).to have_content('Import projects from Google Code')
expect(current_path).to eq new_import_google_code_path expect(current_path).to eq new_import_google_code_path
end
end end
end
context 'from manifest file', :postgresql do context 'from manifest file', :postgresql do
before do before do
first('.import_manifest').click first('.import_manifest').click
end end
it 'shows import instructions' do it 'shows import instructions' do
expect(page).to have_content('Manifest file import') expect(page).to have_content('Manifest file import')
expect(current_path).to eq new_import_manifest_path expect(current_path).to eq new_import_manifest_path
end
end end
end end
end
context 'Namespace selector' do context 'Namespace selector' do
context 'with group with DEVELOPER_MAINTAINER_PROJECT_ACCESS project_creation_level' do context 'with group with DEVELOPER_MAINTAINER_PROJECT_ACCESS project_creation_level' do
let(:group) { create(:group, project_creation_level: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS) } let(:group) { create(:group, project_creation_level: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS) }
before do before do
group.add_developer(user) group.add_developer(user)
visit new_project_path(namespace_id: group.id) visit new_project_path(namespace_id: group.id)
end end
it 'selects the group namespace' do it 'selects the group namespace' do
page.within('#blank-project-pane') do page.within('#blank-project-pane') do
namespace = find('#project_namespace_id option[selected]') namespace = find('#project_namespace_id option[selected]')
expect(namespace.text).to eq group.full_path expect(namespace.text).to eq group.full_path
end
end end
end end
end end
......
...@@ -137,32 +137,6 @@ describe VisibilityLevelHelper do ...@@ -137,32 +137,6 @@ describe VisibilityLevelHelper do
end end
end end
describe "disallowed_visibility_level_description" do
let(:group) { create(:group, :internal) }
let!(:subgroup) { create(:group, :internal, parent: group) }
let!(:project) { create(:project, :internal, group: group) }
describe "project" do
it "provides correct description for disabled levels" do
expect(disallowed_visibility_level?(project, Gitlab::VisibilityLevel::PUBLIC)).to be_truthy
expect(strip_tags disallowed_visibility_level_description(Gitlab::VisibilityLevel::PUBLIC, project))
.to include "the visibility of #{project.group.name} is internal"
end
end
describe "group" do
it "provides correct description for disabled levels" do
expect(disallowed_visibility_level?(group, Gitlab::VisibilityLevel::PRIVATE)).to be_truthy
expect(disallowed_visibility_level_description(Gitlab::VisibilityLevel::PRIVATE, group))
.to include "it contains projects with higher visibility", "it contains sub-groups with higher visibility"
expect(disallowed_visibility_level?(subgroup, Gitlab::VisibilityLevel::PUBLIC)).to be_truthy
expect(strip_tags disallowed_visibility_level_description(Gitlab::VisibilityLevel::PUBLIC, subgroup))
.to include "the visibility of #{group.name} is internal"
end
end
end
describe "selected_visibility_level" do describe "selected_visibility_level" do
let(:group) { create(:group, :public) } let(:group) { create(:group, :public) }
let!(:project) { create(:project, :internal, group: group) } let!(:project) { create(:project, :internal, group: group) }
...@@ -207,4 +181,50 @@ describe VisibilityLevelHelper do ...@@ -207,4 +181,50 @@ describe VisibilityLevelHelper do
end end
end end
end end
describe 'multiple_visibility_levels_restricted?' do
using RSpec::Parameterized::TableSyntax
let(:user) { create(:user) }
subject { helper.multiple_visibility_levels_restricted? }
where(:restricted_visibility_levels, :expected) do
[Gitlab::VisibilityLevel::PUBLIC] | false
[Gitlab::VisibilityLevel::PUBLIC, Gitlab::VisibilityLevel::INTERNAL] | true
[Gitlab::VisibilityLevel::PUBLIC, Gitlab::VisibilityLevel::INTERNAL, Gitlab::VisibilityLevel::PRIVATE] | true
end
with_them do
before do
allow(helper).to receive(:current_user) { user }
allow(Gitlab::CurrentSettings.current_application_settings).to receive(:restricted_visibility_levels) { restricted_visibility_levels }
end
it { is_expected.to eq(expected) }
end
end
describe 'all_visibility_levels_restricted?' do
using RSpec::Parameterized::TableSyntax
let(:user) { create(:user) }
subject { helper.all_visibility_levels_restricted? }
where(:restricted_visibility_levels, :expected) do
[Gitlab::VisibilityLevel::PUBLIC] | false
[Gitlab::VisibilityLevel::PUBLIC, Gitlab::VisibilityLevel::INTERNAL] | false
Gitlab::VisibilityLevel.values | true
end
with_them do
before do
allow(helper).to receive(:current_user) { user }
allow(Gitlab::CurrentSettings.current_application_settings).to receive(:restricted_visibility_levels) { restricted_visibility_levels }
end
it { is_expected.to eq(expected) }
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