1# frozen_string_literal: true 2 3require 'spec_helper' 4 5RSpec.describe 'groups/edit.html.haml' do 6 include Devise::Test::ControllerHelpers 7 8 describe '"Share with group lock" setting' do 9 let(:root_owner) { create(:user) } 10 let(:root_group) { create(:group) } 11 12 before do 13 root_group.add_owner(root_owner) 14 end 15 16 shared_examples_for '"Share with group lock" setting' do |checkbox_options| 17 it 'has the correct label, help text, and checkbox options' do 18 assign(:group, test_group) 19 allow(view).to receive(:can?).with(test_user, :admin_group, test_group).and_return(true) 20 allow(view).to receive(:can_change_group_visibility_level?).and_return(false) 21 allow(view).to receive(:current_user).and_return(test_user) 22 expect(view).to receive(:can_change_share_with_group_lock?).and_return(!checkbox_options[:disabled]) 23 expect(view).to receive(:share_with_group_lock_help_text).and_return('help text here') 24 25 render 26 27 expect(rendered).to have_content("Prevent sharing a project within #{test_group.name} with other groups") 28 expect(rendered).to have_content('help text here') 29 expect(rendered).to have_field('group_share_with_group_lock', **checkbox_options) 30 end 31 end 32 33 context 'for a root group' do 34 let(:test_group) { root_group } 35 let(:test_user) { root_owner } 36 37 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: false } 38 end 39 40 context 'for a subgroup' do 41 let!(:subgroup) { create(:group, parent: root_group) } 42 let(:sub_owner) { create(:user) } 43 let(:test_group) { subgroup } 44 45 context 'when the root_group has "Share with group lock" disabled' do 46 context 'when the subgroup has "Share with group lock" disabled' do 47 context 'as the root_owner' do 48 let(:test_user) { root_owner } 49 50 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: false } 51 end 52 53 context 'as the sub_owner' do 54 let(:test_user) { sub_owner } 55 56 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: false } 57 end 58 end 59 60 context 'when the subgroup has "Share with group lock" enabled' do 61 before do 62 subgroup.update_column(:share_with_group_lock, true) 63 end 64 65 context 'as the root_owner' do 66 let(:test_user) { root_owner } 67 68 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: true } 69 end 70 71 context 'as the sub_owner' do 72 let(:test_user) { sub_owner } 73 74 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: true } 75 end 76 end 77 end 78 79 context 'when the root_group has "Share with group lock" enabled' do 80 before do 81 root_group.update_column(:share_with_group_lock, true) 82 end 83 84 context 'when the subgroup has "Share with group lock" disabled (parent overridden)' do 85 context 'as the root_owner' do 86 let(:test_user) { root_owner } 87 88 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: false } 89 end 90 91 context 'as the sub_owner' do 92 let(:test_user) { sub_owner } 93 94 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: false } 95 end 96 end 97 98 context 'when the subgroup has "Share with group lock" enabled (same as parent)' do 99 before do 100 subgroup.update_column(:share_with_group_lock, true) 101 end 102 103 context 'as the root_owner' do 104 let(:test_user) { root_owner } 105 106 it_behaves_like '"Share with group lock" setting', { disabled: false, checked: true } 107 end 108 109 context 'as the sub_owner' do 110 let(:test_user) { sub_owner } 111 112 it_behaves_like '"Share with group lock" setting', { disabled: true, checked: true } 113 end 114 end 115 end 116 end 117 end 118end 119