diff --git a/app/controllers/duplicate_logs_controller.rb b/app/controllers/duplicate_logs_controller.rb index b084a8124..e5ae95bbf 100644 --- a/app/controllers/duplicate_logs_controller.rb +++ b/app/controllers/duplicate_logs_controller.rb @@ -2,7 +2,7 @@ class DuplicateLogsController < ApplicationController before_action :authenticate_user! before_action :find_resource_by_named_id before_action :find_duplicate_logs - before_action :find_original_log_id + before_action :find_original_log def show if @log @@ -61,8 +61,13 @@ private end end - def find_original_log_id + def find_original_log query_params = URI.parse(request.url).query - @original_log_id = CGI.parse(query_params)["original_log_id"][0]&.to_i if query_params.present? + original_log_id = CGI.parse(query_params)["original_log_id"][0]&.to_i if query_params.present? + @original_log = if params[:sales_log_id].present? + current_user.sales_logs.find_by(id: original_log_id) + else + current_user.lettings_logs.find_by(id: original_log_id) + end end end diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index b7ab5de29..441ff53f6 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -48,7 +48,7 @@ class FormController < ApplicationController def show_page if request.params["referrer"] == "interruption_screen" && request.headers["HTTP_REFERER"].present? @interruption_page_id = URI.parse(request.headers["HTTP_REFERER"]).path.split("/").last.underscore - @interruption_page_referrer_type = referrer_from_query + @interruption_page_referrer_type = from_referrer_query("referrer") end if @log @@ -130,10 +130,10 @@ private end def is_referrer_type?(referrer_type) - referrer_from_query == referrer_type + from_referrer_query("referrer") == referrer_type end - def referrer_from_query + def from_referrer_query(query_param) referrer = request.headers["HTTP_REFERER"] return unless referrer @@ -141,7 +141,7 @@ private return unless query_params parsed_params = CGI.parse(query_params) - parsed_params["referrer"]&.first + parsed_params[query_param]&.first end def original_duplicate_log_id_from_query @@ -164,9 +164,13 @@ private def successful_redirect_path if FeatureToggle.deduplication_flow_enabled? if @log.lettings? - if current_user.lettings_logs.duplicate_logs(@log).count.positive? + if is_referrer_type?("duplicate_logs") + return send("lettings_log_duplicate_logs_path", lettings_log_id: from_referrer_query("remaining_duplicate_id"), original_log_id: from_referrer_query("original_log_id")) + elsif current_user.lettings_logs.duplicate_logs(@log).count.positive? return send("lettings_log_duplicate_logs_path", @log, original_log_id: @log.id) end + elsif is_referrer_type?("duplicate_logs") + return send("sales_log_duplicate_logs_path", sales_log_id: from_referrer_query("remaining_duplicate_id"), original_log_id: from_referrer_query("original_log_id")) elsif current_user.sales_logs.duplicate_logs(@log).count.positive? return send("sales_log_duplicate_logs_path", @log, original_log_id: @log.id) end diff --git a/app/helpers/duplicate_logs_helper.rb b/app/helpers/duplicate_logs_helper.rb index d991a0923..059785994 100644 --- a/app/helpers/duplicate_logs_helper.rb +++ b/app/helpers/duplicate_logs_helper.rb @@ -1,17 +1,17 @@ module DuplicateLogsHelper include GovukLinkHelper - def duplicate_logs_continue_button(all_duplicates, duplicate_log, original_log_id) + def duplicate_logs_continue_button(all_duplicates, duplicate_log, original_log) if all_duplicates.count > 1 return govuk_button_link_to "Keep this log and delete duplicates", url_for( controller: "duplicate_logs", action: "delete_duplicates", "#{duplicate_log.class.name.underscore}_id": duplicate_log.id, - original_log_id:, + original_log_id: original_log.id, ) end - if original_log_id == duplicate_log.id + if !original_log.deleted? govuk_button_link_to "Back to Log #{duplicate_log.id}", send("#{duplicate_log.class.name.underscore}_path", duplicate_log) else type = duplicate_log.lettings? ? "lettings" : "sales" @@ -23,8 +23,8 @@ module DuplicateLogsHelper send("#{log.model_name.param_key}_#{page_id}_path", log, referrer: "interruption_screen", original_log_id:) end - def change_duplicate_logs_action_href(log, page_id, all_duplicates) + def change_duplicate_logs_action_href(log, page_id, all_duplicates, original_log_id) remaining_duplicate_id = all_duplicates.map(&:id).reject { |id| id == log.id }.first - send("#{log.model_name.param_key}_#{page_id}_path", log, referrer: "duplicate_logs", remaining_duplicate_id:) + send("#{log.model_name.param_key}_#{page_id}_path", log, referrer: "duplicate_logs", remaining_duplicate_id:, original_log_id:) end end diff --git a/app/views/duplicate_logs/_duplicate_log_check_answers.erb b/app/views/duplicate_logs/_duplicate_log_check_answers.erb index 5d90457fc..b48830e33 100644 --- a/app/views/duplicate_logs/_duplicate_log_check_answers.erb +++ b/app/views/duplicate_logs/_duplicate_log_check_answers.erb @@ -29,13 +29,13 @@ <% if @all_duplicates.count > 1 %> <% row.action( text: question.action_text(log), - href: change_duplicate_logs_action_href(log, question.page.id, @all_duplicates), + href: change_duplicate_logs_action_href(log, question.page.id, @all_duplicates, @original_log.id), visually_hidden_text: question.check_answer_label.to_s.downcase, ) %> <% else %> <% row.action( text: question.action_text(log), - href: duplicate_logs_action_href(log, question.page.id, @original_log_id), + href: duplicate_logs_action_href(log, question.page.id, @original_log.id), visually_hidden_text: question.check_answer_label.to_s.downcase, ) %> <% end %> diff --git a/app/views/duplicate_logs/show.html.erb b/app/views/duplicate_logs/show.html.erb index 1a7dd8e86..80a07707a 100644 --- a/app/views/duplicate_logs/show.html.erb +++ b/app/views/duplicate_logs/show.html.erb @@ -18,7 +18,7 @@ <% @all_duplicates.each_with_index do |log, index| %> <%= render partial: "duplicate_log", locals: { log: } %> <%= render partial: "duplicate_log_check_answers", locals: { log: } %> - <%= duplicate_logs_continue_button(@all_duplicates, log, @original_log_id) %> + <%= duplicate_logs_continue_button(@all_duplicates, log, @original_log) %> <% if index < @all_duplicates.count - 1 %>
<% end %> diff --git a/app/views/logs/delete_duplicates.html.erb b/app/views/logs/delete_duplicates.html.erb index 5ba4459e2..18b3d56e4 100644 --- a/app/views/logs/delete_duplicates.html.erb +++ b/app/views/logs/delete_duplicates.html.erb @@ -29,7 +29,7 @@ <%= govuk_button_to @duplicate_logs.count == 1 ? "Delete this log" : "Delete these logs", send("delete_logs_#{@log.class.name.underscore}s_path"), method: "delete", - params: { ids: @duplicate_logs.map(&:id), original_log_id: @original_log_id, remaining_log_id: @log.id } %> + params: { ids: @duplicate_logs.map(&:id), original_log_id: @original_log.id, remaining_log_id: @log.id } %> <%= govuk_button_link_to( "Cancel", send("#{@log.class.name.underscore}_duplicate_logs_path", @log), diff --git a/spec/features/lettings_log_spec.rb b/spec/features/lettings_log_spec.rb index f849decc1..4c735fbc1 100644 --- a/spec/features/lettings_log_spec.rb +++ b/spec/features/lettings_log_spec.rb @@ -505,6 +505,23 @@ RSpec.describe "Lettings Log Features" do expect(page).to have_current_path("/lettings-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") expect(page).to have_link("Back to lettings logs", href: "/lettings-logs") end + + it "allows deduplicating logs by changing the answers on the duplicate log" do + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") + click_link("Change", href: "/lettings-logs/#{duplicate_log.id}/tenant-code?original_log_id=#{lettings_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{lettings_log.id}") + fill_in("lettings-log-tenancycode-field", with: "something else") + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") + expect(page).to have_link("Back to Log #{lettings_log.id}", href: "/lettings-logs/#{lettings_log.id}") + end + + it "allows deduplicating logs by changing the answers on the original log" do + click_link("Change", href: "/lettings-logs/#{lettings_log.id}/tenant-code?original_log_id=#{lettings_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_log.id}") + fill_in("lettings-log-tenancycode-field", with: "something else") + click_button("Save and continue") + expect(page).to have_current_path("/lettings-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") + # expect(page).to have_link("Back to Log #{lettings_log.id}", href: "/lettings-logs/#{lettings_log.id}") + end end end end diff --git a/spec/features/sales_log_spec.rb b/spec/features/sales_log_spec.rb index 023353fef..6f3b9a808 100644 --- a/spec/features/sales_log_spec.rb +++ b/spec/features/sales_log_spec.rb @@ -244,5 +244,22 @@ RSpec.describe "Sales Log Features" do expect(page).to have_current_path("/sales-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{sales_log.id}") expect(page).to have_link("Back to sales logs", href: "/sales-logs") end + + it "allows deduplicating logs by changing the answers on the duplicate log" do + expect(page).to have_current_path("/sales-logs/#{sales_log.id}/duplicate-logs?original_log_id=#{sales_log.id}") + click_link("Change", href: "/sales-logs/#{duplicate_log.id}/purchaser-code?original_log_id=#{sales_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{sales_log.id}") + fill_in("sales-log-purchid-field", with: "something else") + click_button("Save and continue") + expect(page).to have_current_path("/sales-logs/#{sales_log.id}/duplicate-logs?original_log_id=#{sales_log.id}") + expect(page).to have_link("Back to Log #{sales_log.id}", href: "/sales-logs/#{sales_log.id}") + end + + it "allows deduplicating logs by changing the answers on the original log" do + click_link("Change", href: "/sales-logs/#{sales_log.id}/purchaser-code?original_log_id=#{sales_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_log.id}") + fill_in("sales-log-purchid-field", with: "something else") + click_button("Save and continue") + expect(page).to have_current_path("/sales-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{sales_log.id}") + # expect(page).to have_link("Back to Log #{sales_log.id}", href: "/sales-logs/#{sales_log.id}") + end end end diff --git a/spec/requests/duplicate_logs_controller_spec.rb b/spec/requests/duplicate_logs_controller_spec.rb index 7550f0af4..633a96f70 100644 --- a/spec/requests/duplicate_logs_controller_spec.rb +++ b/spec/requests/duplicate_logs_controller_spec.rb @@ -58,9 +58,9 @@ RSpec.describe DuplicateLogsController, type: :request do expect(page).to have_content("Q37 - Lead tenant’s working situation", count: 3) expect(page).to have_content("Household rent and charges", count: 3) expect(page).to have_link("Change", count: 21) - expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/tenant-code?referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_logs[0].id}") - expect(page).to have_link("Change", href: "/lettings-logs/#{duplicate_logs[0].id}/tenant-code?referrer=duplicate_logs&remaining_duplicate_id=#{lettings_log.id}") - expect(page).to have_link("Change", href: "/lettings-logs/#{duplicate_logs[1].id}/tenant-code?referrer=duplicate_logs&remaining_duplicate_id=#{lettings_log.id}") + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/tenant-code?original_log_id=#{lettings_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_logs[0].id}") + expect(page).to have_link("Change", href: "/lettings-logs/#{duplicate_logs[0].id}/tenant-code?original_log_id=#{lettings_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{lettings_log.id}") + expect(page).to have_link("Change", href: "/lettings-logs/#{duplicate_logs[1].id}/tenant-code?original_log_id=#{lettings_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{lettings_log.id}") end it "displays buttons to delete" do @@ -122,9 +122,9 @@ RSpec.describe DuplicateLogsController, type: :request do expect(page).to have_content("Q25 - Buyer 1's working situation", count: 3) expect(page).to have_content("Q15 - Postcode", count: 3) expect(page).to have_link("Change", count: 18) - expect(page).to have_link("Change", href: "/sales-logs/#{sales_log.id}/purchaser-code?referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_logs[0].id}") - expect(page).to have_link("Change", href: "/sales-logs/#{duplicate_logs[0].id}/purchaser-code?referrer=duplicate_logs&remaining_duplicate_id=#{sales_log.id}") - expect(page).to have_link("Change", href: "/sales-logs/#{duplicate_logs[1].id}/purchaser-code?referrer=duplicate_logs&remaining_duplicate_id=#{sales_log.id}") + expect(page).to have_link("Change", href: "/sales-logs/#{sales_log.id}/purchaser-code?original_log_id=#{sales_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_logs[0].id}") + expect(page).to have_link("Change", href: "/sales-logs/#{duplicate_logs[0].id}/purchaser-code?original_log_id=#{sales_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{sales_log.id}") + expect(page).to have_link("Change", href: "/sales-logs/#{duplicate_logs[1].id}/purchaser-code?original_log_id=#{sales_log.id}&referrer=duplicate_logs&remaining_duplicate_id=#{sales_log.id}") end it "displays buttons to delete" do diff --git a/spec/requests/form_controller_spec.rb b/spec/requests/form_controller_spec.rb index 8f16efcca..ff8811562 100644 --- a/spec/requests/form_controller_spec.rb +++ b/spec/requests/form_controller_spec.rb @@ -732,6 +732,54 @@ RSpec.describe FormController, type: :request do end end end + + context "when the question was accessed from a duplicate logs screen" do + let(:lettings_log) { create(:lettings_log, :duplicate, created_by: user) } + let(:duplicate_log) { create(:lettings_log, :duplicate, created_by: user) } + let(:referrer) { "/lettings-logs/#{lettings_log.id}/lead-tenant-age?referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_log.id}&original_log_id=#{lettings_log.id}" } + let(:params) do + { + id: lettings_log.id, + lettings_log: { + page: "lead_tenant_age", + age1: 20, + age1_known: 1, + }, + } + end + + before do + post "/lettings-logs/#{lettings_log.id}/lead-tenant-age", params:, headers: headers.merge({ "HTTP_REFERER" => referrer }) + end + + it "redirects back to the duplicates page for remaining duplicates" do + expect(response).to redirect_to("/lettings-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") + end + end + + context "when the sales question was accessed from a duplicate logs screen" do + let(:sales_log) { create(:sales_log, :duplicate, created_by: user) } + let(:duplicate_log) { create(:sales_log, :duplicate, created_by: user) } + let(:referrer) { "/sales-logs/#{sales_log.id}/buyer-1-age?referrer=duplicate_logs&remaining_duplicate_id=#{duplicate_log.id}&original_log_id=#{sales_log.id}" } + let(:params) do + { + id: sales_log.id, + sales_log: { + page: "buyer_1_age", + age1: 20, + age1_known: 1, + }, + } + end + + before do + post "/sales-logs/#{sales_log.id}/buyer-1-age", params:, headers: headers.merge({ "HTTP_REFERER" => referrer }) + end + + it "redirects back to the duplicates page for remaining duplicates" do + expect(response).to redirect_to("/sales-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{sales_log.id}") + end + end end context "with checkbox questions" do