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:
authorMichael Kozono <mkozono@gmail.com>2017-09-01 08:58:05 +0300
committerMichael Kozono <mkozono@gmail.com>2017-09-06 22:07:20 +0300
commit8437a24ff46220e2813ce3d82a52062dd259276b (patch)
treec132cfe1a881a9aa7b2eb5794e0c983ebf9dfce9 /spec/views
parentc93e8f246a3ade5e60e770533393ed1a6df91731 (diff)
Vary share lock setting UI
…based on whether the current user owns the parent group and whether the parent group or current group is share locked.
Diffstat (limited to 'spec/views')
-rw-r--r--spec/views/groups/edit.html.haml_spec.rb140
1 files changed, 140 insertions, 0 deletions
diff --git a/spec/views/groups/edit.html.haml_spec.rb b/spec/views/groups/edit.html.haml_spec.rb
new file mode 100644
index 00000000000..613368049e1
--- /dev/null
+++ b/spec/views/groups/edit.html.haml_spec.rb
@@ -0,0 +1,140 @@
+require 'spec_helper'
+
+describe 'groups/edit.html.haml' do
+ include Devise::Test::ControllerHelpers
+
+ describe 'Share lock option' do
+ let(:root_owner) { create(:user) }
+ let(:root_group) { create(:group) }
+ let(:expected_label) { default_label }
+ let(:expected_help) { default_help }
+
+ before do
+ root_group.add_owner(root_owner)
+ end
+
+ shared_examples_for 'share lock option' do |checkbox_options|
+ it 'should have the correct label, help text, and checkbox options' do
+ assign(:group, test_group)
+ allow(view).to receive(:can?).and_return(true)
+ allow(view).to receive(:can_change_group_visibility_level?).and_return(false)
+ allow(view).to receive(:current_user).and_return(test_user)
+
+ render
+
+ expect(rendered).to have_content(expected_label)
+ expect(rendered).to have_css('.descr', text: expected_help)
+ expect(rendered).to have_field('group_share_with_group_lock', checkbox_options)
+ end
+ end
+
+ context 'for a root group' do
+ let(:test_group) { root_group }
+ let(:test_user) { root_owner }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: false }
+ end
+
+ context 'for a subgroup', :nested_groups do
+ let!(:subgroup) { create(:group, parent: root_group) }
+ let(:sub_owner) { create(:user) }
+ let(:test_group) { subgroup }
+
+ context 'when the root_group has "Share lock" disabled' do
+ context 'when the subgroup has "Share lock" disabled' do
+ context 'as the root_owner' do
+ let(:test_user) { root_owner }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: false }
+ end
+
+ context 'as the sub_owner' do
+ let(:test_user) { sub_owner }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: false }
+ end
+ end
+
+ context 'when the subgroup has "Share lock" enabled' do
+ before do
+ subgroup.update_column(:share_with_group_lock, true)
+ end
+
+ context 'as the root_owner' do
+ let(:test_user) { root_owner }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: true }
+ end
+
+ context 'as the sub_owner' do
+ let(:test_user) { sub_owner }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: true }
+ end
+ end
+ end
+
+ context 'when the root_group has "Share lock" enabled' do
+ before do
+ root_group.update_column(:share_with_group_lock, true)
+ end
+
+ context 'when the subgroup has "Share lock" disabled (parent overridden)' do
+ context 'as the root_owner' do
+ let(:test_user) { root_owner }
+ let(:expected_help) { parent_locked_and_has_been_overridden }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: false }
+ end
+
+ context 'as the sub_owner' do
+ let(:test_user) { sub_owner }
+ let(:expected_help) { parent_locked_and_has_been_overridden }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: false }
+ end
+ end
+
+ context 'when the subgroup has "Share lock" enabled (same as parent)' do
+ before do
+ subgroup.update_column(:share_with_group_lock, true)
+ end
+
+ context 'as the root_owner' do
+ let(:test_user) { root_owner }
+ let(:expected_help) { parent_locked_but_you_can_override }
+
+ it_behaves_like 'share lock option', { disabled: false, checked: true }
+ end
+
+ context 'as the sub_owner' do
+ let(:test_user) { sub_owner }
+ let(:expected_help) { parent_locked_so_ask_the_owner }
+
+ it_behaves_like 'share lock option', { disabled: true, checked: true }
+ end
+ end
+ end
+ end
+
+ def default_label
+ "Prevent sharing a project within #{test_group.name} with other groups"
+ end
+
+ def default_help
+ "This setting will be applied to all subgroups unless overridden by a group owner."
+ end
+
+ def parent_locked_but_you_can_override
+ "This setting is applied on #{test_group.parent.name}. You can override the setting or remove the share lock from the parent group."
+ end
+
+ def parent_locked_so_ask_the_owner
+ "This setting is applied on #{test_group.parent.name}. To share this group with another group, ask the owner to override the setting or remove the share lock from the parent group."
+ end
+
+ def parent_locked_and_has_been_overridden
+ "This setting is applied on #{test_group.parent.name} and has been overridden on this subgroup."
+ end
+ end
+end