diff options
author | Michael Kozono <mkozono@gmail.com> | 2017-08-31 22:58:05 -0700 |
---|---|---|
committer | Michael Kozono <mkozono@gmail.com> | 2017-09-06 12:07:20 -0700 |
commit | 8437a24ff46220e2813ce3d82a52062dd259276b (patch) | |
tree | c132cfe1a881a9aa7b2eb5794e0c983ebf9dfce9 /spec/views/groups | |
parent | c93e8f246a3ade5e60e770533393ed1a6df91731 (diff) | |
download | gitlab-ce-8437a24ff46220e2813ce3d82a52062dd259276b.tar.gz |
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/groups')
-rw-r--r-- | spec/views/groups/edit.html.haml_spec.rb | 140 |
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 |