From 1039b5b9d82b6ac052a867153646b93e2cfa5101 Mon Sep 17 00:00:00 2001
From: Paul Slaughter <pslaughter@gitlab.com>
Date: Wed, 1 May 2019 11:46:47 -0500
Subject: [PATCH] Fix approvals section when merge requests disabled

**Note:**
Previously, we simply hid the approvals section in the project edit.
This is consistent with the MR section, but it's problematic because
the approvals section uses ajax to load it's settings.
---
 ...merge_request_approvals_settings.html.haml |  5 +++--
 ...-fetching-when-merge-requests-disabled.yml |  5 +++++
 .../user_manages_approval_settings_spec.rb    | 21 +++++++++++++++++++
 3 files changed, 29 insertions(+), 2 deletions(-)
 create mode 100644 ee/changelogs/unreleased/11321-fix-approvals-fetching-when-merge-requests-disabled.yml

diff --git a/ee/app/views/projects/_merge_request_approvals_settings.html.haml b/ee/app/views/projects/_merge_request_approvals_settings.html.haml
index e526318a59c3a3e7..50450d448313e0b1 100644
--- a/ee/app/views/projects/_merge_request_approvals_settings.html.haml
+++ b/ee/app/views/projects/_merge_request_approvals_settings.html.haml
@@ -1,6 +1,7 @@
-- return unless @project.feature_available?(:merge_request_approvers)
+- return unless @project.feature_available?(:merge_requests, current_user)
+- return unless @project.feature_available?(:merge_request_approvers, current_user)
 
-%section.settings.merge-requests-feature.no-animate#js-merge-request-approval-settings{ class: [('expanded' if expanded), ('hidden' if @project.project_feature.send(:merge_requests_access_level) == 0)] }
+%section.settings.merge-requests-feature.no-animate#js-merge-request-approval-settings{ class: [('expanded' if expanded)] }
   .settings-header
     %h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only= _("Merge request approvals")
     %button.btn.js-settings-toggle{ type: 'button' }= expanded ? _("Collapse") : _("Expand")
diff --git a/ee/changelogs/unreleased/11321-fix-approvals-fetching-when-merge-requests-disabled.yml b/ee/changelogs/unreleased/11321-fix-approvals-fetching-when-merge-requests-disabled.yml
new file mode 100644
index 0000000000000000..508f34d2e14c0c3a
--- /dev/null
+++ b/ee/changelogs/unreleased/11321-fix-approvals-fetching-when-merge-requests-disabled.yml
@@ -0,0 +1,5 @@
+---
+title: Fix approvals project settings section when merge requests disabled
+merge_request: 12070
+author:
+type: fixed
diff --git a/ee/spec/features/projects/settings/user_manages_approval_settings_spec.rb b/ee/spec/features/projects/settings/user_manages_approval_settings_spec.rb
index 753e26e5a0407f0a..fecee2c75604df82 100644
--- a/ee/spec/features/projects/settings/user_manages_approval_settings_spec.rb
+++ b/ee/spec/features/projects/settings/user_manages_approval_settings_spec.rb
@@ -4,13 +4,34 @@
   let(:project) { create(:project) }
   let(:user) { project.owner }
   let(:path) { edit_project_path(project) }
+  let(:licensed_features) { {} }
+  let(:project_features) { {} }
 
   before do
     sign_in(user)
     stub_licensed_features(licensed_features)
+
+    project.project_feature.update(project_features)
+
     visit path
   end
 
+  context 'when merge requests is not available' do
+    let(:project_features) { { merge_requests_access_level: ::ProjectFeature::DISABLED } }
+
+    it 'does not show approval settings' do
+      expect(page).not_to have_selector('#js-merge-request-approval-settings')
+    end
+  end
+
+  context 'when merge requests is available' do
+    let(:project_features) { { merge_requests_access_level: ::ProjectFeature::ENABLED } }
+
+    it 'shows approval settings' do
+      expect(page).to have_selector('#js-merge-request-approval-settings')
+    end
+  end
+
   context 'when `code_owner_approval_required` is available' do
     let(:licensed_features) { { code_owner_approval_required: true } }
 
-- 
GitLab