Browse Source

Create delete merge request functionality

pull/2568/head
Manny Dinssa 2 years ago
parent
commit
11014452a9
  1. 5
      app/controllers/merge_requests_controller.rb
  2. 6
      app/models/merge_request.rb
  3. 23
      app/views/merge_requests/delete_confirmation.html.erb
  4. 10
      app/views/merge_requests/show.html.erb
  5. 3
      config/routes.rb
  6. 21
      spec/models/merge_request_spec.rb

5
app/controllers/merge_requests_controller.rb

@ -46,6 +46,11 @@ class MergeRequestsController < ApplicationController
render :organisations
end
def delete
@merge_request.discard!
redirect_to organisations_path(anchor: "merge-requests")
end
private
def page

6
app/models/merge_request.rb

@ -20,7 +20,7 @@ class MergeRequest < ApplicationRecord
scope :merged, -> { where(status: "request_merged") }
scope :visible, lambda {
open_collection_period_start_date = FormHandler.instance.start_date_of_earliest_open_collection_period
merged.where("merge_requests.merge_date >= ?", open_collection_period_start_date).or(not_merged)
merged.where("merge_requests.merge_date >= ?", open_collection_period_start_date).or(not_merged).where(discarded_at: nil)
}
def organisation_name_uniqueness
@ -36,4 +36,8 @@ class MergeRequest < ApplicationRecord
def dpo_user
absorbing_organisation.data_protection_officers.filter_by_active.first
end
def discard!
update!(discarded_at: Time.zone.now)
end
end

23
app/views/merge_requests/delete_confirmation.html.erb

@ -0,0 +1,23 @@
<% content_for :before_content do %>
<% content_for :title, "Are you sure you want to delete this merge request?" %>
<%= govuk_back_link(href: :back) %>
<% end %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds-from-desktop">
<h1 class="govuk-heading-xl">
<%= content_for(:title) %>
</h1>
<%= govuk_warning_text(text: "You cannot undo this.") %>
<div class="govuk-button-group">
<%= govuk_button_to(
"Delete merge request",
delete_merge_request_path(@merge_request),
method: :delete,
) %>
<%= govuk_button_link_to "Cancel", merge_request_path(@merge_request), html: { method: :get }, secondary: true %>
</div>
</div>
</div>

10
app/views/merge_requests/show.html.erb

@ -1,7 +1,7 @@
<% content_for :before_content do %>
<% title = "Merge details: #{@merge_request.absorbing_organisation_name}" %>
<% content_for :title, title %>
<%= govuk_back_link href: "#{organisations_path}#merge-requests" %>
<%= govuk_back_link href: organisations_path(anchor: "merge-requests") %>
<% end %>
<% unless @merge_request.signed_dsa || @merge_request.absorbing_organisation_id.blank? %>
<div class="govuk-notification-banner" role="region" aria-labelledby="govuk-notification-banner-title" data-module="govuk-notification-banner">
@ -27,12 +27,8 @@
</h1>
<% unless @merge_request.status == "request_merged" %>
<div class="govuk-button-group">
<button type="submit" <%= @merge_request.status == "ready_to_merge" ? "" : "disabled aria-disabled=\"true\"" %> class="govuk-button" data-module="govuk-button">
Begin merge
</button>
<button type="submit" class="govuk-button govuk-button--warning" data-module="govuk-button">
Delete merge request
</button>
<%= govuk_button_link_to "Begin merge", nil, html: { method: :get }, disabled: @merge_request.status == "ready_to_merge" ? false : true %>
<%= govuk_button_link_to "Delete merge request", delete_confirmation_merge_request_path(@merge_request), warning: true%>
</div>
<% end %>

3
config/routes.rb

@ -205,7 +205,8 @@ Rails.application.routes.draw do
get "new-organisation-telephone-number"
get "new-organisation-type"
get "merge-date"
get "details", to: "merge_requests#details"
get "delete-confirmation", to: "merge_requests#delete_confirmation"
delete "delete", to: "merge_requests#delete"
end
end

21
spec/models/merge_request_spec.rb

@ -23,4 +23,25 @@ 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 to the current time" do
Timecop.freeze(Time.zone.now) do
merge_request.discard!
expect(merge_request.discarded_at).to eq(Time.zone.now)
end
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

Loading…
Cancel
Save