From 78bad539fd0b61b7d2bb24d89650b3617db85732 Mon Sep 17 00:00:00 2001 From: Kat Date: Thu, 22 Aug 2024 09:27:39 +0100 Subject: [PATCH] Add existing absorbing organisation page and field --- app/controllers/merge_requests_controller.rb | 8 ++++ app/helpers/merge_requests_helper.rb | 4 +- .../existing_absorbing_organisation.html.erb | 24 ++++++++++ config/locales/en.yml | 2 + config/routes.rb | 1 + ...d_existing_absorbing_organisation_field.rb | 5 ++ db/schema.rb | 3 +- .../merge_requests_controller_spec.rb | 46 ++++++++++++++++++- 8 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 app/views/merge_requests/existing_absorbing_organisation.html.erb create mode 100644 db/migrate/20240822080228_add_existing_absorbing_organisation_field.rb diff --git a/app/controllers/merge_requests_controller.rb b/app/controllers/merge_requests_controller.rb index c34e00581..65bedb6ca 100644 --- a/app/controllers/merge_requests_controller.rb +++ b/app/controllers/merge_requests_controller.rb @@ -6,6 +6,7 @@ class MergeRequestsController < ApplicationController def absorbing_organisation; end def merge_date; end + def existing_absorbing_organisation; end def helpdesk_ticket; end def merge_start_confirmation; end def user_outcomes; end @@ -86,6 +87,8 @@ private when "merging_organisations" merge_date_merge_request_path(@merge_request) when "merge_date" + existing_absorbing_organisation_merge_request_path(@merge_request) + when "existing_absorbing_organisation" helpdesk_ticket_merge_request_path(@merge_request) when "helpdesk_ticket" merge_request_path(@merge_request) @@ -115,6 +118,7 @@ private :status, :absorbing_organisation_id, :merge_date, + :existing_absorbing_organisation, ) merge_params[:requesting_organisation_id] = current_user.organisation.id @@ -140,6 +144,10 @@ private else @merge_request.errors.add(:merge_date, :invalid) end + when "existing_absorbing_organisation" + if merge_request_params[:existing_absorbing_organisation].nil? + @merge_request.errors.add(:existing_absorbing_organisation, :blank) + end end end diff --git a/app/helpers/merge_requests_helper.rb b/app/helpers/merge_requests_helper.rb index 23623b0a6..31e6fb807 100644 --- a/app/helpers/merge_requests_helper.rb +++ b/app/helpers/merge_requests_helper.rb @@ -67,8 +67,10 @@ module MergeRequestsHelper absorbing_organisation_merge_request_path(merge_request) when "merge_date" merging_organisations_merge_request_path(merge_request) - when "helpdesk_ticket" + when "existing_absorbing_organisation" merge_date_merge_request_path(merge_request) + when "helpdesk_ticket" + existing_absorbing_organisation_merge_request_path(merge_request) end end diff --git a/app/views/merge_requests/existing_absorbing_organisation.html.erb b/app/views/merge_requests/existing_absorbing_organisation.html.erb new file mode 100644 index 000000000..9a13905b5 --- /dev/null +++ b/app/views/merge_requests/existing_absorbing_organisation.html.erb @@ -0,0 +1,24 @@ +<% content_for :before_content do %> + <% title = "Tell us if your organisation is merging" %> + <% content_for :title, title %> + <%= govuk_back_link href: merge_request_back_link(@merge_request, "existing_absorbing_organisation", request.query_parameters["referrer"]) %> +<% end %> +
+
+ <%= form_with model: @merge_request, url: submit_merge_request_url(request.query_parameters["referrer"]), method: :patch do |f| %> + <%= f.govuk_error_summary %> + <%= f.govuk_radio_buttons_fieldset :existing_absorbing_organisation, + legend: { text: "Was #{@merge_request.absorbing_organisation&.name} already active before the merge date?", size: "l" } do %> + <%= f.govuk_radio_button :existing_absorbing_organisation, + "true", + label: { text: "Yes, this organisation existed before the merge" } %> + <%= f.govuk_radio_button :existing_absorbing_organisation, + "false", + label: { text: "No, it is a new organisation created by this merge" } %> + <% end %> + + <%= f.hidden_field :page, value: "existing_absorbing_organisation" %> + <%= f.govuk_submit submit_merge_request_button_text(request.query_parameters["referrer"]) %> + <% end %> +
+
diff --git a/config/locales/en.yml b/config/locales/en.yml index 649ec358a..7d52a92e0 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -179,6 +179,8 @@ en: merge_date: blank: "Enter a merge date" invalid: "Enter a valid merge date" + existing_absorbing_organisation: + blank: "You must answer absorbing organisation already active?" notification: logs_deleted: diff --git a/config/routes.rb b/config/routes.rb index d8e61c04b..a22324ef3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -208,6 +208,7 @@ Rails.application.routes.draw do get "merging-organisations/remove", to: "merge_requests#remove_merging_organisation" get "absorbing-organisation" get "merge-date" + get "existing-absorbing-organisation" get "helpdesk-ticket" get "merge-start-confirmation" get "user-outcomes" diff --git a/db/migrate/20240822080228_add_existing_absorbing_organisation_field.rb b/db/migrate/20240822080228_add_existing_absorbing_organisation_field.rb new file mode 100644 index 000000000..f1a0d8b1e --- /dev/null +++ b/db/migrate/20240822080228_add_existing_absorbing_organisation_field.rb @@ -0,0 +1,5 @@ +class AddExistingAbsorbingOrganisationField < ActiveRecord::Migration[7.0] + def change + add_column :merge_requests, :existing_absorbing_organisation, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index cb4a44e44..449d7ece2 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2024_08_19_143150) do +ActiveRecord::Schema[7.0].define(version: 2024_08_22_080228) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -434,6 +434,7 @@ ActiveRecord::Schema[7.0].define(version: 2024_08_19_143150) do t.datetime "last_failed_attempt" t.boolean "request_merged" t.boolean "processing" + t.boolean "existing_absorbing_organisation" end create_table "notifications", force: :cascade do |t| diff --git a/spec/requests/merge_requests_controller_spec.rb b/spec/requests/merge_requests_controller_spec.rb index 30941360e..1571c5f98 100644 --- a/spec/requests/merge_requests_controller_spec.rb +++ b/spec/requests/merge_requests_controller_spec.rb @@ -219,6 +219,23 @@ RSpec.describe MergeRequestsController, type: :request do end end + describe "#existing_absorbing_organisation" do + context "when viewing helpdesk ticket page" do + before do + merge_request.update!(absorbing_organisation_id: organisation.id, merge_date: Time.zone.today) + get "/merge-request/#{merge_request.id}/existing-absorbing-organisation", headers: + end + + it "shows the correct content" do + expect(page).to have_content("Was #{merge_request.absorbing_organisation.name} already active before the merge date?") + expect(page).to have_content("Yes, this organisation existed before the merge") + expect(page).to have_content("No, it is a new organisation created by this merge") + expect(page).to have_link("Back", href: merge_date_merge_request_path(merge_request)) + expect(page).to have_button("Save and continue") + end + end + end + describe "#helpdesk_ticket" do context "when viewing helpdesk ticket page" do before do @@ -228,6 +245,8 @@ RSpec.describe MergeRequestsController, type: :request do it "shows the correct content" do expect(page).to have_content("Which helpdesk ticket reported this merge?") + expect(page).to have_link("Back", href: existing_absorbing_organisation_merge_request_path(merge_request)) + expect(page).to have_button("Save and continue") end end end @@ -365,10 +384,10 @@ RSpec.describe MergeRequestsController, type: :request do patch "/merge-request/#{merge_request.id}", headers:, params: end - it "redirects to helpdesk ticket path" do + it "redirects to existing absorbing organisation path" do request - expect(response).to redirect_to(helpdesk_ticket_merge_request_path(merge_request)) + expect(response).to redirect_to(existing_absorbing_organisation_merge_request_path(merge_request)) end it "updates merge_date" do @@ -400,6 +419,29 @@ RSpec.describe MergeRequestsController, type: :request do end end end + + describe "from existing_absorbing_organisation page" do + context "when not answering the question" do + let(:merge_request) { MergeRequest.create!(requesting_organisation: organisation, absorbing_organisation: other_organisation) } + let(:params) do + { merge_request: { page: "existing_absorbing_organisation" } } + end + let(:request) do + patch "/merge-request/#{merge_request.id}", headers:, params: + end + + it "renders the error" do + request + + expect(response).to have_http_status(:unprocessable_entity) + expect(page).to have_content("You must answer absorbing organisation already active?") + end + + it "does not update the request" do + expect { request }.not_to(change { merge_request.reload.attributes }) + end + end + end end describe "#merge_start_confirmation" do