Browse Source

allow deduplicating logs by changing the answers

pull/1793/head
Kat 3 years ago
parent
commit
7c8d83f3fc
  1. 11
      app/controllers/duplicate_logs_controller.rb
  2. 14
      app/controllers/form_controller.rb
  3. 10
      app/helpers/duplicate_logs_helper.rb
  4. 4
      app/views/duplicate_logs/_duplicate_log_check_answers.erb
  5. 2
      app/views/duplicate_logs/show.html.erb
  6. 2
      app/views/logs/delete_duplicates.html.erb
  7. 17
      spec/features/lettings_log_spec.rb
  8. 17
      spec/features/sales_log_spec.rb
  9. 12
      spec/requests/duplicate_logs_controller_spec.rb
  10. 48
      spec/requests/form_controller_spec.rb

11
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

14
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

10
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

4
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 %>

2
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 %>
<hr class="govuk-section-break govuk-section-break--visible govuk-section-break--m">
<% end %>

2
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),

17
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

17
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

12
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

48
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

Loading…
Cancel
Save