Commit b9606f07 authored by Paul Slaughter's avatar Paul Slaughter

Merge branch '343872-remove-group-merge-request-approval-settings-feature-flag' into 'master'

Remove feature flag `group_merge_request_approval_settings_feature_flag`

See merge request gitlab-org/gitlab!81252
parents b1feb9ae ef2be582
...@@ -806,9 +806,7 @@ The group's new subgroups have push rules set for them based on either: ...@@ -806,9 +806,7 @@ The group's new subgroups have push rules set for them based on either:
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/285458) in GitLab 13.9. [Deployed behind the `group_merge_request_approval_settings_feature_flag` flag](../../administration/feature_flags.md), disabled by default. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/285458) in GitLab 13.9. [Deployed behind the `group_merge_request_approval_settings_feature_flag` flag](../../administration/feature_flags.md), disabled by default.
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.5. > - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.5.
> - [Feature flag `group_merge_request_approval_settings_feature_flag`](https://gitlab.com/gitlab-org/gitlab/-/issues/343872) removed in GitLab 14.9.
FLAG:
On self-managed GitLab, by default this feature is available. To hide the feature per group, ask an administrator to [disable the feature flag](../../administration/feature_flags.md) named `group_merge_request_approval_settings_feature_flag`. On GitLab.com, this feature is available.
Group approval rules manage [project merge request approval rules](../project/merge_requests/approvals/index.md) Group approval rules manage [project merge request approval rules](../project/merge_requests/approvals/index.md)
at the top-level group level. These rules [cascade to all projects](../project/merge_requests/approvals/settings.md#settings-cascading) at the top-level group level. These rules [cascade to all projects](../project/merge_requests/approvals/settings.md#settings-cascading)
......
...@@ -140,9 +140,7 @@ To learn more, see [Coverage check approval rule](../../../../ci/pipelines/setti ...@@ -140,9 +140,7 @@ To learn more, see [Coverage check approval rule](../../../../ci/pipelines/setti
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.4. [Deployed behind the `group_merge_request_approval_settings_feature_flag` flag](../../../../administration/feature_flags.md), disabled by default. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.4. [Deployed behind the `group_merge_request_approval_settings_feature_flag` flag](../../../../administration/feature_flags.md), disabled by default.
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.5. > - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/285410) in GitLab 14.5.
> - [Feature flag `group_merge_request_approval_settings_feature_flag`](https://gitlab.com/gitlab-org/gitlab/-/issues/343872) removed in GitLab 14.9.
FLAG:
On self-managed GitLab, by default this feature is available. To hide the feature per group, ask an administrator to [disable the feature flag](../../../../administration/feature_flags.md) named `group_merge_request_approval_settings_feature_flag`. On GitLab.com, this feature is available.
You can also enforce merge request approval settings: You can also enforce merge request approval settings:
......
...@@ -123,20 +123,3 @@ export const mergeRequestApprovalSettingsMappers = { ...@@ -123,20 +123,3 @@ export const mergeRequestApprovalSettingsMappers = {
allow_committer_approval: !settings.preventCommittersApproval.value, allow_committer_approval: !settings.preventCommittersApproval.value,
}), }),
}; };
export const projectApprovalsMappers = {
mapDataToState: (data) => ({
preventAuthorApproval: { value: !data.merge_requests_author_approval },
preventMrApprovalRuleEdit: { value: data.disable_overriding_approvers_per_merge_request },
requireUserPassword: { value: data.require_password_to_approve },
removeApprovalsOnPush: { value: data.reset_approvals_on_push },
preventCommittersApproval: { value: data.merge_requests_disable_committers_approval },
}),
mapStateToPayload: ({ settings }) => ({
merge_requests_author_approval: !settings.preventAuthorApproval.value,
disable_overriding_approvers_per_merge_request: settings.preventMrApprovalRuleEdit.value,
require_password_to_approve: settings.requireUserPassword.value,
reset_approvals_on_push: settings.removeApprovalsOnPush.value,
merge_requests_disable_committers_approval: settings.preventCommittersApproval.value,
}),
};
...@@ -2,7 +2,7 @@ import Vue from 'vue'; ...@@ -2,7 +2,7 @@ import Vue from 'vue';
import { GlToast } from '@gitlab/ui'; import { GlToast } from '@gitlab/ui';
import { parseBoolean } from '~/lib/utils/common_utils'; import { parseBoolean } from '~/lib/utils/common_utils';
import ProjectSettingsApp from './components/project_settings/app.vue'; import ProjectSettingsApp from './components/project_settings/app.vue';
import { projectApprovalsMappers, mergeRequestApprovalSettingsMappers } from './mappers'; import { mergeRequestApprovalSettingsMappers } from './mappers';
import createStore from './stores'; import createStore from './stores';
import approvalSettingsModule from './stores/modules/approval_settings'; import approvalSettingsModule from './stores/modules/approval_settings';
import projectSettingsModule from './stores/modules/project_settings'; import projectSettingsModule from './stores/modules/project_settings';
...@@ -22,14 +22,7 @@ export default function mountProjectSettingsApprovals(el) { ...@@ -22,14 +22,7 @@ export default function mountProjectSettingsApprovals(el) {
approvals: projectSettingsModule(), approvals: projectSettingsModule(),
}; };
if (gon.features.groupMergeRequestApprovalSettingsFeatureFlag) { modules.approvalSettings = approvalSettingsModule(mergeRequestApprovalSettingsMappers);
modules.approvalSettings = approvalSettingsModule(mergeRequestApprovalSettingsMappers);
} else {
modules.approvalSettings = approvalSettingsModule({
updateMethod: 'post',
...projectApprovalsMappers,
});
}
const store = createStore(modules, { const store = createStore(modules, {
...el.dataset, ...el.dataset,
......
...@@ -13,7 +13,6 @@ module EE ...@@ -13,7 +13,6 @@ module EE
before_action :log_unarchive_audit_event, only: [:unarchive] before_action :log_unarchive_audit_event, only: [:unarchive]
before_action only: :edit do before_action only: :edit do
push_frontend_feature_flag(:group_merge_request_approval_settings_feature_flag, project.root_ancestor, default_enabled: :yaml)
push_frontend_feature_flag(:permit_all_shared_groups_for_approval, project, default_enabled: :yaml) push_frontend_feature_flag(:permit_all_shared_groups_for_approval, project, default_enabled: :yaml)
end end
......
...@@ -64,7 +64,7 @@ module EE ...@@ -64,7 +64,7 @@ module EE
can_modify_commiter_settings: can_modify_commiter_settings.to_s, can_modify_commiter_settings: can_modify_commiter_settings.to_s,
project_path: expose_path(api_v4_projects_path(id: project.id)), project_path: expose_path(api_v4_projects_path(id: project.id)),
settings_path: expose_path(api_v4_projects_approval_settings_path(id: project.id)), settings_path: expose_path(api_v4_projects_approval_settings_path(id: project.id)),
approvals_path: expose_path(api_v4_projects_approvals_path(id: project.id)), approvals_path: expose_path(api_v4_projects_merge_request_approval_setting_path(id: project.id)),
rules_path: expose_path(api_v4_projects_approval_settings_rules_path(id: project.id)), rules_path: expose_path(api_v4_projects_approval_settings_rules_path(id: project.id)),
allow_multi_rule: project.multiple_approval_rules_available?.to_s, allow_multi_rule: project.multiple_approval_rules_available?.to_s,
eligible_approvers_docs_path: help_page_path('user/project/merge_requests/approvals/rules', anchor: 'eligible-approvers'), eligible_approvers_docs_path: help_page_path('user/project/merge_requests/approvals/rules', anchor: 'eligible-approvers'),
...@@ -72,13 +72,9 @@ module EE ...@@ -72,13 +72,9 @@ module EE
security_configuration_path: project_security_configuration_path(project), security_configuration_path: project_security_configuration_path(project),
vulnerability_check_help_page_path: help_page_path('user/application_security/index', anchor: 'security-approvals-in-merge-requests'), vulnerability_check_help_page_path: help_page_path('user/application_security/index', anchor: 'security-approvals-in-merge-requests'),
license_check_help_page_path: help_page_path('user/application_security/index', anchor: 'enabling-license-approvals-within-a-project'), license_check_help_page_path: help_page_path('user/application_security/index', anchor: 'enabling-license-approvals-within-a-project'),
coverage_check_help_page_path: help_page_path('ci/pipelines/settings', anchor: 'coverage-check-approval-rule') coverage_check_help_page_path: help_page_path('ci/pipelines/settings', anchor: 'coverage-check-approval-rule'),
}.tap do |data| group_name: project.root_ancestor.name
if ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, project.root_ancestor, default_enabled: :yaml) }
data[:approvals_path] = expose_path(api_v4_projects_merge_request_approval_setting_path(id: project.id))
data[:group_name] = project.root_ancestor.name
end
end
end end
def status_checks_app_data(project) def status_checks_app_data(project)
......
...@@ -3,8 +3,7 @@ ...@@ -3,8 +3,7 @@
module Groups module Groups
module MergeRequestApprovalSettingsHelper module MergeRequestApprovalSettingsHelper
def show_merge_request_approval_settings?(user, group) def show_merge_request_approval_settings?(user, group)
Feature.enabled?(:group_merge_request_approval_settings_feature_flag, group, default_enabled: :yaml) && user.can?(:admin_merge_request_approval_settings, group)
user.can?(:admin_merge_request_approval_settings, group)
end end
end end
end end
...@@ -543,13 +543,9 @@ module EE ...@@ -543,13 +543,9 @@ module EE
end end
def reset_approvals_on_push def reset_approvals_on_push
if ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, self.group&.root_ancestor, default_enabled: :yaml) !ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group, project: self)
!ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group, project: self) .retain_approvals_on_push
.retain_approvals_on_push .value && feature_available?(:merge_request_approvers)
.value && feature_available?(:merge_request_approvers)
else
super && feature_available?(:merge_request_approvers)
end
end end
alias_method :reset_approvals_on_push?, :reset_approvals_on_push alias_method :reset_approvals_on_push?, :reset_approvals_on_push
...@@ -577,13 +573,9 @@ module EE ...@@ -577,13 +573,9 @@ module EE
end end
def require_password_to_approve def require_password_to_approve
if ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, self&.group&.root_ancestor, default_enabled: :yaml) ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group, project: self)
ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group, project: self) .require_password_to_approve
.require_password_to_approve .value && password_authentication_enabled_for_web?
.value && password_authentication_enabled_for_web?
else
super && password_authentication_enabled_for_web?
end
end end
def require_password_to_approve? def require_password_to_approve?
...@@ -750,17 +742,11 @@ module EE ...@@ -750,17 +742,11 @@ module EE
def disable_overriding_approvers_per_merge_request def disable_overriding_approvers_per_merge_request
strong_memoize(:disable_overriding_approvers_per_merge_request) do strong_memoize(:disable_overriding_approvers_per_merge_request) do
if ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, self, default_enabled: :yaml) super unless feature_available?(:admin_merge_request_approvers_rules)
super unless feature_available?(:admin_merge_request_approvers_rules)
!ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group&.root_ancestor, project: self) !ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group&.root_ancestor, project: self)
.allow_overrides_to_approver_list_per_merge_request .allow_overrides_to_approver_list_per_merge_request
.value .value
else
next super unless feature_available?(:admin_merge_request_approvers_rules)
::Gitlab::CurrentSettings.disable_overriding_approvers_per_merge_request? || super
end
end end
end end
...@@ -770,18 +756,11 @@ module EE ...@@ -770,18 +756,11 @@ module EE
def merge_requests_author_approval def merge_requests_author_approval
strong_memoize(:merge_requests_author_approval) do strong_memoize(:merge_requests_author_approval) do
if ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, self, default_enabled: :yaml) super unless feature_available?(:admin_merge_request_approvers_rules)
super unless feature_available?(:admin_merge_request_approvers_rules)
ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group&.root_ancestor, project: self) ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group&.root_ancestor, project: self)
.allow_author_approval .allow_author_approval
.value .value
else
next super unless License.feature_available?(:admin_merge_request_approvers_rules)
next false if ::Gitlab::CurrentSettings.prevent_merge_requests_author_approval?
!!read_attribute(:merge_requests_author_approval)
end
end end
end end
...@@ -791,17 +770,11 @@ module EE ...@@ -791,17 +770,11 @@ module EE
def merge_requests_disable_committers_approval def merge_requests_disable_committers_approval
strong_memoize(:merge_requests_disable_committers_approval) do strong_memoize(:merge_requests_disable_committers_approval) do
if ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, self, default_enabled: :yaml) super unless feature_available?(:admin_merge_request_approvers_rules)
super unless feature_available?(:admin_merge_request_approvers_rules)
!ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group&.root_ancestor, project: self) !ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group&.root_ancestor, project: self)
.allow_committer_approval .allow_committer_approval
.value .value
else
next super unless License.feature_available?(:admin_merge_request_approvers_rules)
::Gitlab::CurrentSettings.prevent_merge_requests_committers_approval? || super
end
end end
end end
......
---
name: group_merge_request_approval_settings_feature_flag
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/50256
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/247921
milestone: '13.8'
type: development
group: group::compliance
default_enabled: true
...@@ -35,19 +35,15 @@ module API ...@@ -35,19 +35,15 @@ module API
end end
segment ':id/merge_request_approval_setting' do segment ':id/merge_request_approval_setting' do
desc 'Get project-level MR approval settings' do desc 'Get project-level MR approval settings' do
detail 'This feature was introduced in 14.3 behind the :group_merge_request_approval_settings_feature_flag'
success EE::API::Entities::MergeRequestApprovalSettings success EE::API::Entities::MergeRequestApprovalSettings
end end
get '/', urgency: :medium do get '/', urgency: :medium do
not_found! unless ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, user_project.root_ancestor, default_enabled: :yaml)
group = user_project.group.present? ? user_project.root_ancestor : nil group = user_project.group.present? ? user_project.root_ancestor : nil
setting = ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group, project: user_project).execute setting = ComplianceManagement::MergeRequestApprovalSettings::Resolver.new(group, project: user_project).execute
present setting, with: ::API::Entities::MergeRequestApprovalSetting present setting, with: ::API::Entities::MergeRequestApprovalSetting
end end
desc 'Update existing merge request approval setting' do desc 'Update existing merge request approval setting' do
detail 'This feature is gated by the :group_merge_request_approval_settings_feature_flag'
success ::API::Entities::MergeRequestApprovalSetting success ::API::Entities::MergeRequestApprovalSetting
end end
params do params do
...@@ -77,13 +73,10 @@ module API ...@@ -77,13 +73,10 @@ module API
end end
resource :groups, requirements: ::API::API::NAMESPACE_OR_PROJECT_REQUIREMENTS do resource :groups, requirements: ::API::API::NAMESPACE_OR_PROJECT_REQUIREMENTS do
before do before do
not_found! unless ::Feature.enabled?(:group_merge_request_approval_settings_feature_flag, user_group, default_enabled: :yaml)
authorize! :admin_merge_request_approval_settings, user_group authorize! :admin_merge_request_approval_settings, user_group
end end
segment ':id/merge_request_approval_setting' do segment ':id/merge_request_approval_setting' do
desc 'Get group merge request approval setting' do desc 'Get group merge request approval setting' do
detail 'This feature is gated by the :group_merge_request_approval_settings_feature_flag'
success ::API::Entities::MergeRequestApprovalSetting success ::API::Entities::MergeRequestApprovalSetting
end end
get do get do
...@@ -93,7 +86,6 @@ module API ...@@ -93,7 +86,6 @@ module API
end end
desc 'Update existing merge request approval setting' do desc 'Update existing merge request approval setting' do
detail 'This feature is gated by the :group_merge_request_approval_settings_feature_flag'
success ::API::Entities::MergeRequestApprovalSetting success ::API::Entities::MergeRequestApprovalSetting
end end
params do params do
......
...@@ -319,9 +319,8 @@ RSpec.describe 'Edit group settings' do ...@@ -319,9 +319,8 @@ RSpec.describe 'Edit group settings' do
create(:group_merge_request_approval_setting, group: group, allow_author_approval: false) create(:group_merge_request_approval_setting, group: group, allow_author_approval: false)
end end
context 'when feature flag is enabled and group is licensed' do context 'when group is licensed' do
before do before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: true)
stub_licensed_features(merge_request_approvers: true) stub_licensed_features(merge_request_approvers: true)
end end
...@@ -352,9 +351,8 @@ RSpec.describe 'Edit group settings' do ...@@ -352,9 +351,8 @@ RSpec.describe 'Edit group settings' do
end end
end end
context 'when feature flag is disabled and group is not licensed' do context 'when group is not licensed' do
before do before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: false)
stub_licensed_features(merge_request_approvers: false) stub_licensed_features(merge_request_approvers: false)
end end
......
...@@ -133,45 +133,38 @@ RSpec.describe 'Projects > Audit Events', :js do ...@@ -133,45 +133,38 @@ RSpec.describe 'Projects > Audit Events', :js do
end end
end end
context 'with the group_merge_request_approval_settings feature' do describe 'changing merge request approval permission for authors and reviewers' do
where(feature_enabled: [true, false]) before do
stub_licensed_features(merge_request_approvers: true)
with_them do project.add_developer(pete)
describe 'changing merge request approval permission for authors and reviewers' do end
before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: feature_enabled)
stub_licensed_features(merge_request_approvers: true)
project.add_developer(pete)
end
it "appears in the project's audit events", :js do it "appears in the project's audit events", :js do
visit edit_project_path(project) visit edit_project_path(project)
page.within('[data-testid="merge-request-approval-settings"]') do page.within('[data-testid="merge-request-approval-settings"]') do
find('[data-testid="prevent-author-approval"] > input').set(false) find('[data-testid="prevent-author-approval"] > input').set(false)
find('[data-testid="prevent-committers-approval"] > input').set(true) find('[data-testid="prevent-committers-approval"] > input').set(true)
click_button 'Save changes' click_button 'Save changes'
end end
wait_for_all_requests wait_for_all_requests
page.within('.sidebar-top-level-items') do page.within('.sidebar-top-level-items') do
click_link 'Security & Compliance' click_link 'Security & Compliance'
wait_for_all_requests wait_for_all_requests
click_link 'Audit events' click_link 'Audit events'
end end
wait_for_all_requests wait_for_all_requests
page.within('.audit-log-table') do page.within('.audit-log-table') do
expect(page).to have_content(project.first_owner.name) expect(page).to have_content(project.first_owner.name)
expect(page).to have_content('Changed prevent merge request approval from authors') expect(page).to have_content('Changed prevent merge request approval from authors')
expect(page).to have_content('Changed prevent merge request approval from committers') expect(page).to have_content('Changed prevent merge request approval from committers')
expect(page).to have_content(project.name) expect(page).to have_content(project.name)
end
end
end end
end end
end end
......
...@@ -4,7 +4,7 @@ import Vuex from 'vuex'; ...@@ -4,7 +4,7 @@ import Vuex from 'vuex';
import ApprovalSettings from 'ee/approvals/components/approval_settings.vue'; import ApprovalSettings from 'ee/approvals/components/approval_settings.vue';
import ProjectApprovalSettings from 'ee/approvals/components/project_settings/project_approval_settings.vue'; import ProjectApprovalSettings from 'ee/approvals/components/project_settings/project_approval_settings.vue';
import { PROJECT_APPROVAL_SETTINGS_LABELS_I18N } from 'ee/approvals/constants'; import { PROJECT_APPROVAL_SETTINGS_LABELS_I18N } from 'ee/approvals/constants';
import { projectApprovalsMappers } from 'ee/approvals/mappers'; import { mergeRequestApprovalSettingsMappers } from 'ee/approvals/mappers';
import createStore from 'ee/approvals/stores'; import createStore from 'ee/approvals/stores';
import approvalSettingsModule from 'ee/approvals/stores/modules/approval_settings'; import approvalSettingsModule from 'ee/approvals/stores/modules/approval_settings';
...@@ -18,7 +18,7 @@ describe('ProjectApprovalSettings', () => { ...@@ -18,7 +18,7 @@ describe('ProjectApprovalSettings', () => {
const setupStore = (data = {}) => { const setupStore = (data = {}) => {
store = createStore({ store = createStore({
approvalSettings: approvalSettingsModule(projectApprovalsMappers), approvalSettings: approvalSettingsModule(mergeRequestApprovalSettingsMappers),
}); });
store.state.settings = data; store.state.settings = data;
......
...@@ -430,43 +430,25 @@ RSpec.describe ProjectsHelper do ...@@ -430,43 +430,25 @@ RSpec.describe ProjectsHelper do
allow(helper).to receive(:can?).and_return(true) allow(helper).to receive(:can?).and_return(true)
end end
context 'with group_merge_request_approval_settings_feature_flag disabled' do it 'returns the correct data' do
before do expect(subject).to include(
stub_feature_flags(group_merge_request_approval_settings_feature_flag: false) project_id: project.id,
end can_edit: 'true',
can_modify_author_settings: 'true',
it 'returns the correct data' do can_modify_commiter_settings: 'true',
expect(subject).to eq({ approvals_path: expose_path(api_v4_projects_merge_request_approval_setting_path(id: project.id)),
project_id: project.id, project_path: expose_path(api_v4_projects_path(id: project.id)),
can_edit: 'true', settings_path: expose_path(api_v4_projects_approval_settings_path(id: project.id)),
can_modify_author_settings: 'true', rules_path: expose_path(api_v4_projects_approval_settings_rules_path(id: project.id)),
can_modify_commiter_settings: 'true', allow_multi_rule: project.multiple_approval_rules_available?.to_s,
approvals_path: expose_path(api_v4_projects_approvals_path(id: project.id)), eligible_approvers_docs_path: help_page_path('user/project/merge_requests/approvals/rules', anchor: 'eligible-approvers'),
project_path: expose_path(api_v4_projects_path(id: project.id)), security_approvals_help_page_path: help_page_path('user/application_security/index', anchor: 'security-approvals-in-merge-requests'),
settings_path: expose_path(api_v4_projects_approval_settings_path(id: project.id)), security_configuration_path: project_security_configuration_path(project),
rules_path: expose_path(api_v4_projects_approval_settings_rules_path(id: project.id)), vulnerability_check_help_page_path: help_page_path('user/application_security/index', anchor: 'security-approvals-in-merge-requests'),
allow_multi_rule: project.multiple_approval_rules_available?.to_s, license_check_help_page_path: help_page_path('user/application_security/index', anchor: 'enabling-license-approvals-within-a-project'),
eligible_approvers_docs_path: help_page_path('user/project/merge_requests/approvals/rules', anchor: 'eligible-approvers'), coverage_check_help_page_path: help_page_path('ci/pipelines/settings', anchor: 'coverage-check-approval-rule'),
security_approvals_help_page_path: help_page_path('user/application_security/index', anchor: 'security-approvals-in-merge-requests'), group_name: project.root_ancestor.name
security_configuration_path: project_security_configuration_path(project), )
vulnerability_check_help_page_path: help_page_path('user/application_security/index', anchor: 'security-approvals-in-merge-requests'),
license_check_help_page_path: help_page_path('user/application_security/index', anchor: 'enabling-license-approvals-within-a-project'),
coverage_check_help_page_path: help_page_path('ci/pipelines/settings', anchor: 'coverage-check-approval-rule')
})
end
end
context 'with group_merge_request_approval_settings_feature_flag enabled' do
before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: true)
end
it 'returns the correct data' do
expect(subject).to include(
approvals_path: expose_path(api_v4_projects_merge_request_approval_setting_path(id: project.id)),
group_name: project.root_ancestor.name
)
end
end end
end end
......
...@@ -819,121 +819,61 @@ RSpec.describe ApprovalState do ...@@ -819,121 +819,61 @@ RSpec.describe ApprovalState do
end end
describe '#authors_can_approve?' do describe '#authors_can_approve?' do
context 'group_merge_request_approval_settings_feature_flag is enabled' do context 'allow_author_approval is resolved to not be permitted' do
before do before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: true) allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
end allow(instance).to receive(:allow_author_approval).and_return(
context 'allow_author_approval is resolved to not be permitted' do ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: false, locked: false, inherited_from: nil)
before do )
allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
allow(instance).to receive(:allow_author_approval).and_return(
ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: false, locked: false, inherited_from: nil)
)
end
end
it 'returns false' do
expect(subject.authors_can_approve?).to be false
end end
end end
context 'allow_author_approval is resolved to be permitted' do it 'returns false' do
before do expect(subject.authors_can_approve?).to be false
allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
allow(instance).to receive(:allow_author_approval).and_return(
ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: true, locked: false, inherited_from: nil)
)
end
end
it 'returns true' do
expect(subject.authors_can_approve?).to be true
end
end end
end end
context 'group_merge_request_approval_settings_feature_flag is disabled' do context 'allow_author_approval is resolved to be permitted' do
before do before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: false) allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
end allow(instance).to receive(:allow_author_approval).and_return(
context 'when project allows author approval' do ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: true, locked: false, inherited_from: nil)
before do )
project.update!(merge_requests_author_approval: true)
end
it 'returns true' do
expect(subject.authors_can_approve?).to eq(true)
end end
end end
context 'when project disallows author approval' do it 'returns true' do
before do expect(subject.authors_can_approve?).to be true
project.update!(merge_requests_author_approval: false)
end
it 'returns true' do
expect(subject.authors_can_approve?).to eq(false)
end
end end
end end
end end
describe '#committers_can_approve?' do describe '#committers_can_approve?' do
context 'group_merge_request_approval_settings_feature_flag is enabled' do context 'allow_committer_approval is resolved to not be permitted' do
before do before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: true) allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
end allow(instance).to receive(:allow_committer_approval).and_return(
context 'allow_committer_approval is resolved to not be permitted' do ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: false, locked: false, inherited_from: nil)
before do )
allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
allow(instance).to receive(:allow_committer_approval).and_return(
ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: false, locked: false, inherited_from: nil)
)
end
end
it 'returns false' do
expect(subject.committers_can_approve?).to be false
end end
end end
context 'allow_committer_approval is resolved to be permitted' do it 'returns false' do
before do expect(subject.committers_can_approve?).to be false
allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
allow(instance).to receive(:allow_committer_approval).and_return(
ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: true, locked: false, inherited_from: nil)
)
end
end
it 'returns false' do
expect(subject.committers_can_approve?).to be true
end
end end
end end
context 'group_merge_request_approval_settings_feature_flag is disabled' do context 'allow_committer_approval is resolved to be permitted' do
before do before do
stub_feature_flags(group_merge_request_approval_settings_feature_flag: false) allow_next_instance_of ComplianceManagement::MergeRequestApprovalSettings::Resolver do |instance|
end allow(instance).to receive(:allow_committer_approval).and_return(
context 'when project allows committer approval' do ComplianceManagement::MergeRequestApprovalSettings::Setting.new(value: true, locked: false, inherited_from: nil)
before do )
project.update!(merge_requests_disable_committers_approval: false)
end
it 'returns true' do
expect(subject.committers_can_approve?).to eq(true)
end end
end end
context 'when project disallows committer approval' do it 'returns false' do
before do expect(subject.committers_can_approve?).to be true
project.update!(merge_requests_disable_committers_approval: true)
end
it 'returns true' do
expect(subject.committers_can_approve?).to eq(false)
end
end end
end end
end end
......
This diff is collapsed.
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