Browse Source

Add start merge and merge request job

pull/2575/head
Kat 2 years ago
parent
commit
a38a793e89
  1. 9
      app/controllers/merge_requests_controller.rb
  2. 11
      app/jobs/process_merge_request_job.rb
  3. 7
      app/models/merge_request_organisation.rb
  4. 4
      app/views/merge_requests/show.html.erb
  5. 1
      config/routes.rb
  6. 29
      spec/jobs/process_merge_request_job_spec.rb
  7. 32
      spec/requests/merge_requests_controller_spec.rb

9
app/controllers/merge_requests_controller.rb

@ -61,6 +61,15 @@ class MergeRequestsController < ApplicationController
@new_merging_org_ids = []
end
def start_merge
if @merge_request.status == "ready_to_merge"
@merge_request.update!(status: :processing)
ProcessMergeRequestJob.perform_later(merge_request: @merge_request)
end
redirect_to merge_request_path(@merge_request)
end
private
def page

11
app/jobs/process_merge_request_job.rb

@ -0,0 +1,11 @@
class ProcessMergeRequestJob < ApplicationJob
queue_as :default
def perform(merge_request:)
absorbing_organisation_id = merge_request.absorbing_organisation_id
merging_organisation_ids = merge_request.merging_organisations.pluck(:id)
merge_date = merge_request.merge_date
Merge::MergeOrganisationsService.new(absorbing_organisation_id:, merging_organisation_ids:, merge_date:).call
end
end

7
app/models/merge_request_organisation.rb

@ -8,12 +8,19 @@ class MergeRequestOrganisation < ApplicationRecord
scope :merged, -> { joins(:merge_request).where(merge_requests: { status: "request_merged" }) }
scope :with_merging_organisation, ->(merging_organisation) { where(merging_organisation:) }
after_save :update_merge_request_status
has_paper_trail
def merging_organisation_name
merging_organisation.name || ""
end
def update_merge_request_status
merge_request.update_status!
merge_request.save!
end
private
def validate_merging_organisations

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

@ -27,7 +27,9 @@
</h1>
<% unless @merge_request.status == "request_merged" %>
<div class="govuk-button-group">
<%= govuk_button_link_to "Begin merge", "#", disabled: @merge_request.status != "ready_to_merge" %>
<%= form_with model: @merge_request, url: start_merge_merge_request_path(@merge_request) do |f| %>
<%= f.govuk_submit "Begin merge", disabled: @merge_request.status != "ready_to_merge" %>
<% end %>
<%= govuk_button_link_to "Delete merge request", delete_confirmation_merge_request_path(@merge_request), warning: true %>
</div>
<% end %>

1
config/routes.rb

@ -203,6 +203,7 @@ Rails.application.routes.draw do
get "helpdesk-ticket"
get "delete-confirmation", to: "merge_requests#delete_confirmation"
delete "delete", to: "merge_requests#delete"
patch "start-merge", to: "merge_requests#start_merge"
end
end

29
spec/jobs/process_merge_request_job_spec.rb

@ -0,0 +1,29 @@
require "rails_helper"
describe ProcessMergeRequestJob do
let(:job) { described_class.new }
let(:merge_organisations_service) { instance_double(Merge::MergeOrganisationsService) }
before do
allow(Merge::MergeOrganisationsService).to receive(:new).and_return(merge_organisations_service)
allow(merge_organisations_service).to receive(:call).and_return(nil)
end
context "when processing a merge request" do
let(:organisation) { create(:organisation) }
let(:merging_organisation) { create(:organisation) }
let(:other_merging_organisation) { create(:organisation) }
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: organisation, merge_date: Time.zone.local(2022, 3, 3)) }
before do
create(:merge_request_organisation, merge_request:, merging_organisation:)
create(:merge_request_organisation, merge_request:, merging_organisation: other_merging_organisation)
end
it "calls the merge organisations service with correct arguments" do
expect(Merge::MergeOrganisationsService).to receive(:new).with(absorbing_organisation_id: organisation.id, merging_organisation_ids: [merging_organisation.id, other_merging_organisation.id], merge_date: Time.zone.local(2022, 3, 3))
job.perform(merge_request:)
end
end
end

32
spec/requests/merge_requests_controller_spec.rb

@ -364,6 +364,38 @@ RSpec.describe MergeRequestsController, type: :request do
end
end
end
describe "#start_merge" do
let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: organisation, merge_date: Time.zone.local(2022, 3, 3)) }
let(:merging_organisation) { create(:organisation, name: "Merging Test Org") }
before do
allow(ProcessMergeRequestJob).to receive(:perform_later).and_return(nil)
end
context "when merge request is ready to merge" do
before do
create(:merge_request_organisation, merge_request:, merging_organisation: other_organisation)
create(:merge_request_organisation, merge_request:, merging_organisation:)
end
it "runs the job with correct merge request" do
expect(merge_request.reload.status).to eq("ready_to_merge")
expect(ProcessMergeRequestJob).to receive(:perform_later).with(merge_request:).once
patch "/merge-request/#{merge_request.id}/start-merge"
expect(merge_request.reload.status).to eq("processing")
end
end
context "when merge request is not ready to merge" do
it "does not run the job" do
expect(merge_request.status).to eq("incomplete")
expect(ProcessMergeRequestJob).not_to receive(:perform_later).with(merge_request:)
patch "/merge-request/#{merge_request.id}/start-merge"
expect(merge_request.reload.status).to eq("incomplete")
end
end
end
end
context "when user is signed in with a data coordinator user" do

Loading…
Cancel
Save