From 8caad77441473ebb36971b6056948c8a2895674a Mon Sep 17 00:00:00 2001
From: Jose Ivan Vargas <jvargas@gitlab.com>
Date: Mon, 12 Feb 2018 15:44:55 -0600
Subject: [PATCH] Fix approve button showing closed merge requests

---
 .../components/approvals/approvals_body.js       |  2 +-
 .../user_approves_merge_request_spec.rb          | 16 +++++++++++++++-
 .../javascripts/approvals/approvals_body_spec.js |  4 +++-
 3 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_body.js b/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_body.js
index 42bd0d615ee..86d39ff2dbb 100644
--- a/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_body.js
+++ b/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_body.js
@@ -65,7 +65,7 @@ export default {
       };
     },
     showApproveButton() {
-      return this.userCanApprove && !this.userHasApproved;
+      return this.userCanApprove && !this.userHasApproved && this.mr.isOpen;
     },
     showSuggestedApprovers() {
       return this.suggestedApprovers && this.suggestedApprovers.length;
diff --git a/ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb b/ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb
index 32f08e04c1e..a6d5e6995a6 100644
--- a/ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb
+++ b/ee/spec/features/projects/merge_requests/user_approves_merge_request_spec.rb
@@ -32,10 +32,11 @@ describe 'User approves a merge request', :js do
     before do
       project.add_developer(user2)
       project.add_developer(user3)
-      visit(merge_request_path(merge_request))
     end
 
     it 'shows multiple approvers beyond the needed count' do
+      visit(merge_request_path(merge_request))
+
       click_button('Approve')
       wait_for_requests
 
@@ -47,6 +48,19 @@ describe 'User approves a merge request', :js do
       expect(all('.js-approver-list-member').count).to eq(3)
     end
 
+    it "doesn't show the approve additionally when a merge request is closed" do
+      merge_request_closed = create(:merge_request, :closed, source_project: project, target_project: project)
+      create(:approval, merge_request: merge_request_closed, user: user)
+
+      sign_in(user2)
+
+      visit(merge_request_path(merge_request_closed))
+      wait_for_requests
+
+      expect(page).not_to have_button('Approve')
+      expect(page).not_to have_button('Approve additionally')
+    end
+
     def sign_in_visit_merge_request(user)
       sign_in(user)
       visit(merge_request_path(merge_request))
diff --git a/spec/javascripts/approvals/approvals_body_spec.js b/spec/javascripts/approvals/approvals_body_spec.js
index 4ffb656facd..30432f4bdf9 100644
--- a/spec/javascripts/approvals/approvals_body_spec.js
+++ b/spec/javascripts/approvals/approvals_body_spec.js
@@ -20,7 +20,9 @@ import ApprovalsBody from 'ee/vue_merge_request_widget/components/approvals/appr
     `);
 
     this.initialData = {
-      mr: {},
+      mr: {
+        isOpen: true,
+      },
       service: {},
       suggestedApprovers: [{ name: 'Approver 1' }],
       userCanApprove: false,
-- 
2.30.9