Commit 1053131f authored by Jan Provaznik's avatar Jan Provaznik

Merge branch 'if-group_push_rules_spec_limit_admin_mode' into 'master'

Limit scope of admin mode in Groups::PushRulesController specs

See merge request gitlab-org/gitlab!32559
parents 0cc72c6f 8655855d
...@@ -74,135 +74,140 @@ describe Groups::PushRulesController do ...@@ -74,135 +74,140 @@ describe Groups::PushRulesController do
patch :update, params: { group_id: group, push_rule: { prevent_secrets: true } } patch :update, params: { group_id: group, push_rule: { prevent_secrets: true } }
end end
context 'when user is at least a maintainer' do before do
sign_in(user)
end
context 'push rules unlicensed' do
before do before do
sign_in(user) stub_licensed_features(push_rules: false)
group.add_maintainer(user) group.add_maintainer(user)
end end
context 'push rules unlicensed' do it 'returns 404 status' do
before do do_update
stub_licensed_features(push_rules: false)
end
it 'returns 404 status' do
do_update
expect(response).to have_gitlab_http_status(:not_found) expect(response).to have_gitlab_http_status(:not_found)
end
end end
end
context 'push rules licensed', :enable_admin_mode do context 'push rules licensed' do
before do before do
stub_licensed_features(push_rules: true) stub_licensed_features(push_rules: true)
end end
it 'updates the push rule' do shared_examples 'updateable setting' do |rule_attr, new_value|
do_update it 'updates the setting' do
patch :update, params: { group_id: group, push_rule: { rule_attr => new_value } }
expect(response).to have_gitlab_http_status(:found) expect(group.reload.push_rule.public_send(rule_attr)).to eq(new_value)
expect(group.reload.push_rule.prevent_secrets).to be_truthy
end end
end
shared_examples 'updateable setting' do |rule_attr, new_value| shared_examples 'not updateable setting' do |rule_attr, new_value|
it 'updates the setting' do it 'does not update the setting' do
expect do
patch :update, params: { group_id: group, push_rule: { rule_attr => new_value } } patch :update, params: { group_id: group, push_rule: { rule_attr => new_value } }
end.not_to change { group.reload.push_rule.public_send(rule_attr) }
end
end
expect(group.reload.push_rule.public_send(rule_attr)).to eq(new_value) shared_examples 'an updatable setting with global default' do |rule_attr|
context "when #{rule_attr} not specified on global level" do
before do
stub_licensed_features(rule_attr => true)
end end
it_behaves_like 'updateable setting', rule_attr, true
end end
shared_examples 'not updateable setting' do |rule_attr, new_value| context "when global setting #{rule_attr} is enabled" do
it 'does not update the setting' do before do
expect do stub_licensed_features(rule_attr => true)
patch :update, params: { group_id: group, push_rule: { rule_attr => new_value } } create(:push_rule_sample, rule_attr => true)
end.not_to change { group.reload.push_rule.public_send(rule_attr) }
end end
end
shared_examples 'an updatable setting with global default' do |rule_attr| it_behaves_like 'updateable setting', rule_attr, true
context "when #{rule_attr} not specified on global level" do end
before do end
stub_licensed_features(rule_attr => true)
end
it_behaves_like 'updateable setting', rule_attr, true shared_examples 'a not updatable setting with global default' do |rule_attr|
context "when #{rule_attr} is disabled" do
before do
stub_licensed_features(rule_attr => false)
end end
context "when global setting #{rule_attr} is enabled" do it_behaves_like 'not updateable setting', rule_attr, true
before do end
stub_licensed_features(rule_attr => true)
create(:push_rule_sample, rule_attr => true)
end
it_behaves_like 'updateable setting', rule_attr, true context "when global setting #{rule_attr} is enabled" do
before do
stub_licensed_features(rule_attr => true)
create(:push_rule_sample, rule_attr => true)
end end
it_behaves_like 'not updateable setting', rule_attr, true
end end
end
shared_examples 'a not updatable setting with global default' do |rule_attr| PushRule::SETTINGS_WITH_GLOBAL_DEFAULT.each do |rule_attr|
context "when #{rule_attr} is disabled" do context "Updating #{rule_attr} rule" do
before do let(:push_rule_for_group) { create(:push_rule, rule_attr => false) }
stub_licensed_features(rule_attr => false)
end
it_behaves_like 'not updateable setting', rule_attr, true before do
group.update!(push_rule_id: push_rule_for_group.id)
end end
context "when global setting #{rule_attr} is enabled" do context 'as an admin' do
before do let(:user) { create(:admin) }
stub_licensed_features(rule_attr => true)
create(:push_rule_sample, rule_attr => true) context 'when admin mode enabled', :enable_admin_mode do
it_behaves_like 'an updatable setting with global default', rule_attr, updates: true
end end
it_behaves_like 'not updateable setting', rule_attr, true context 'when admin mode disabled' do
it_behaves_like 'a not updatable setting with global default', rule_attr, updates: true
end
end end
end
PushRule::SETTINGS_WITH_GLOBAL_DEFAULT.each do |rule_attr|
context "Updating #{rule_attr} rule" do
let(:push_rule_for_group) { create(:push_rule, rule_attr => false) }
context 'as a maintainer user' do
before do before do
group.update!(push_rule_id: push_rule_for_group.id) group.add_maintainer(user)
end end
context 'as an admin' do it 'updates the push rule' do
let(:user) { create(:admin) } do_update
it_behaves_like 'an updatable setting with global default', rule_attr, updates: true expect(response).to have_gitlab_http_status(:found)
expect(group.reload.push_rule.prevent_secrets).to be_truthy
end end
context 'as a maintainer user' do context "when global setting #{rule_attr} is disabled" do
before do before do
group.add_maintainer(user) stub_licensed_features(rule_attr => false)
create(:push_rule_sample, rule_attr => true)
end end
context "when global setting #{rule_attr} is disabled" do it_behaves_like 'updateable setting', rule_attr, true
before do
stub_licensed_features(rule_attr => false)
create(:push_rule_sample, rule_attr => true)
end
it_behaves_like 'updateable setting', rule_attr, true
end
context "when global setting #{rule_attr} is enabled" do
before do
stub_licensed_features(rule_attr => true)
create(:push_rule_sample, rule_attr => true)
end
it_behaves_like 'not updateable setting', rule_attr, true
end
end end
context 'as a developer user' do context "when global setting #{rule_attr} is enabled" do
before do before do
group.add_developer(user) stub_licensed_features(rule_attr => true)
create(:push_rule_sample, rule_attr => true)
end end
it_behaves_like 'a not updatable setting with global default', rule_attr it_behaves_like 'not updateable setting', rule_attr, true
end
end
context 'as a developer user' do
before do
group.add_developer(user)
end end
it_behaves_like 'a not updatable setting with global default', rule_attr
end 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