<% end %>
diff --git a/config/routes.rb b/config/routes.rb
index 92aef0b5e..ecdb8f2c1 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -201,6 +201,8 @@ Rails.application.routes.draw do
get "absorbing-organisation"
get "merge-date"
get "helpdesk-ticket"
+ get "delete-confirmation", to: "merge_requests#delete_confirmation"
+ delete "delete", to: "merge_requests#delete"
end
end
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index e3bb24b46..cf38d5033 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -23,4 +23,23 @@ RSpec.describe MergeRequest, type: :model do
expect(described_class.visible).to include(not_merged)
end
end
+
+ describe "#discard!" do
+ let(:merge_request) { create(:merge_request) }
+
+ it "sets the discarded_at field" do
+ merge_request.discard!
+ expect(merge_request.discarded_at).not_to be_nil
+ end
+
+ it "does not delete the record" do
+ merge_request.discard!
+ expect(merge_request).to be_persisted
+ end
+
+ it "is not visible in the visible scope" do
+ merge_request.discard!
+ expect(described_class.visible).not_to include(merge_request)
+ end
+ end
end
diff --git a/spec/requests/merge_request_spec.rb b/spec/requests/merge_request_spec.rb
new file mode 100644
index 000000000..3666244dd
--- /dev/null
+++ b/spec/requests/merge_request_spec.rb
@@ -0,0 +1,28 @@
+require "rails_helper"
+
+RSpec.describe MergeRequest, type: :request do
+ let(:user) { create(:user, :data_coordinator) }
+ let(:organisation) { user.organisation }
+ let(:merge_request) { create(:merge_request) }
+ let(:support_user) { create(:user, :support, organisation:) }
+ let(:page) { Capybara::Node::Simple.new(response.body) }
+
+ before do
+ allow(support_user).to receive(:need_two_factor_authentication?).and_return(false)
+ sign_in support_user
+ end
+
+ context "when deleting a merge request" do
+ it "discards the merge request" do
+ delete delete_merge_request_path(merge_request)
+ expect(merge_request.reload.discarded_at).not_to be_nil
+ end
+
+ it "redirects to the merge request list" do
+ delete delete_merge_request_path(merge_request)
+ expect(response).to redirect_to(organisations_path(anchor: "merge-requests"))
+ follow_redirect!
+ expect(page).to have_content("Merge requests")
+ end
+ end
+end