Browse Source

Set and clear duplicate log references

pull/2141/head
Kat 2 years ago
parent
commit
d398002e52
  1. 5
      app/controllers/delete_logs_controller.rb
  2. 25
      app/controllers/form_controller.rb
  3. 26
      spec/features/lettings_log_spec.rb

5
app/controllers/delete_logs_controller.rb

@ -27,6 +27,11 @@ class DeleteLogsController < ApplicationController
logs = LettingsLog.find(params.require(:ids)) logs = LettingsLog.find(params.require(:ids))
discard logs discard logs
if request.referer&.include?("delete-duplicates") if request.referer&.include?("delete-duplicates")
logs.each do |log|
log.duplicate_log_references.destroy_all
end
LettingsLog.find(params["remaining_log_id"]).duplicate_log_references.destroy_all
redirect_to lettings_log_duplicate_logs_path(lettings_log_id: params["remaining_log_id"], original_log_id: params["original_log_id"], referrer: params[:referrer], organisation_id: params[:organisation_id]), notice: I18n.t("notification.duplicate_logs_deleted", count: logs.count, log_ids: duplicate_log_ids(logs)) redirect_to lettings_log_duplicate_logs_path(lettings_log_id: params["remaining_log_id"], original_log_id: params["original_log_id"], referrer: params[:referrer], organisation_id: params[:organisation_id]), notice: I18n.t("notification.duplicate_logs_deleted", count: logs.count, log_ids: duplicate_log_ids(logs))
else else
redirect_to lettings_logs_path, notice: I18n.t("notification.logs_deleted", count: logs.count) redirect_to lettings_logs_path, notice: I18n.t("notification.logs_deleted", count: logs.count)

25
app/controllers/form_controller.rb

@ -171,9 +171,19 @@ private
return correcting_duplicate_logs_redirect_path return correcting_duplicate_logs_redirect_path
end end
if @log.lettings? && current_user.lettings_logs.duplicate_logs(@log).count.positive? if @log.lettings?
dynamic_duplicates = current_user.lettings_logs.duplicate_logs(@log)
if dynamic_duplicates.count.positive?
saved_duplicates = @log.duplicates
unless saved_duplicates == dynamic_duplicates
duplicate_log_reference = DuplicateLogReference.find_or_create_by!(log_id: @log.id, log_type: "LettingsLog")
dynamic_duplicates.each do |duplicate|
DuplicateLogReference.find_or_create_by!(log_id: duplicate.id, log_type: "LettingsLog", duplicate_log_reference_id: duplicate_log_reference.duplicate_log_reference_id)
end
return send("lettings_log_duplicate_logs_path", @log, original_log_id: @log.id) return send("lettings_log_duplicate_logs_path", @log, original_log_id: @log.id)
end end
end
end
if @log.sales? && current_user.sales_logs.duplicate_logs(@log).count.positive? if @log.sales? && current_user.sales_logs.duplicate_logs(@log).count.positive?
return send("sales_log_duplicate_logs_path", @log, original_log_id: @log.id) return send("sales_log_duplicate_logs_path", @log, original_log_id: @log.id)
@ -252,9 +262,13 @@ private
original_log = current_user.send(class_name.pluralize).find_by(id: from_referrer_query("original_log_id")) original_log = current_user.send(class_name.pluralize).find_by(id: from_referrer_query("original_log_id"))
if original_log.present? && current_user.send(class_name.pluralize).duplicate_logs(original_log).count.positive? if original_log.present? && current_user.send(class_name.pluralize).duplicate_logs(original_log).count.positive?
flash[:notice] = deduplication_success_banner unless current_user.send(class_name.pluralize).duplicate_logs(@log).count.positive? unless current_user.send(class_name.pluralize).duplicate_logs(@log).count.positive?
remove_fixed_duplicate_log_references(@log)
flash[:notice] = deduplication_success_banner
end
send("#{class_name}_duplicate_logs_path", original_log, original_log_id: original_log.id, referrer: params[:referrer], organisation_id: params[:organisation_id]) send("#{class_name}_duplicate_logs_path", original_log, original_log_id: original_log.id, referrer: params[:referrer], organisation_id: params[:organisation_id])
else else
remove_fixed_duplicate_log_references(original_log)
flash[:notice] = deduplication_success_banner flash[:notice] = deduplication_success_banner
send("#{class_name}_duplicate_logs_path", "#{class_name}_id".to_sym => from_referrer_query("first_remaining_duplicate_id"), original_log_id: from_referrer_query("original_log_id"), referrer: params[:referrer], organisation_id: params[:organisation_id]) send("#{class_name}_duplicate_logs_path", "#{class_name}_id".to_sym => from_referrer_query("first_remaining_duplicate_id"), original_log_id: from_referrer_query("original_log_id"), referrer: params[:referrer], organisation_id: params[:organisation_id])
end end
@ -275,4 +289,11 @@ private
I18n.t("notification.duplicate_logs.deduplication_success_banner", log_link: deduplicated_log_link, changed_question_label:).html_safe I18n.t("notification.duplicate_logs.deduplication_success_banner", log_link: deduplicated_log_link, changed_question_label:).html_safe
end end
def remove_fixed_duplicate_log_references(log)
duplicate_log_reference = DuplicateLogReference.find_by(log_id: log.id, log_type: log.class.name)
duplicate_log_reference_id = duplicate_log_reference.duplicate_log_reference_id
duplicate_log_reference.destroy! if duplicate_log_reference.present?
DuplicateLogReference.find_by(duplicate_log_reference_id:).destroy! if DuplicateLogReference.where(duplicate_log_reference_id:).count == 1
end
end end

26
spec/features/lettings_log_spec.rb

@ -459,6 +459,11 @@ RSpec.describe "Lettings Log Features" do
end end
it "allows keeping the original log and deleting duplicates" do it "allows keeping the original log and deleting duplicates" do
expect(DuplicateLogReference.count).to eq(2)
lettings_log.reload
expect(lettings_log.duplicates.count).to eq(1)
expect(lettings_log.duplicates).to include(duplicate_log)
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}")
click_link("Keep this log and delete duplicates", href: "/lettings-logs/#{lettings_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}") click_link("Keep this log and delete duplicates", href: "/lettings-logs/#{lettings_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}")
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}")
@ -471,6 +476,9 @@ RSpec.describe "Lettings Log Features" do
expect(page).not_to have_content("These logs are duplicates") expect(page).not_to have_content("These logs are duplicates")
expect(page).not_to have_link("Keep this log and delete duplicates") expect(page).not_to have_link("Keep this log and delete duplicates")
expect(page).to have_link("Back to Log #{lettings_log.id}", href: "/lettings-logs/#{lettings_log.id}") expect(page).to have_link("Back to Log #{lettings_log.id}", href: "/lettings-logs/#{lettings_log.id}")
expect(DuplicateLogReference.count).to eq(0)
expect(lettings_log.duplicates.count).to eq(0)
end end
it "allows changing answers on remaining original log" do it "allows changing answers on remaining original log" do
@ -483,6 +491,11 @@ RSpec.describe "Lettings Log Features" do
end end
it "allows keeping the duplicate log and deleting the original one" do it "allows keeping the duplicate log and deleting the original one" do
expect(DuplicateLogReference.count).to eq(2)
duplicate_log.reload
expect(duplicate_log.duplicates.count).to eq(1)
expect(duplicate_log.duplicates).to include(lettings_log)
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}")
click_link("Keep this log and delete duplicates", href: "/lettings-logs/#{duplicate_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}") click_link("Keep this log and delete duplicates", href: "/lettings-logs/#{duplicate_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}")
expect(page).to have_current_path("/lettings-logs/#{duplicate_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}") expect(page).to have_current_path("/lettings-logs/#{duplicate_log.id}/delete-duplicates?original_log_id=#{lettings_log.id}")
@ -495,6 +508,9 @@ RSpec.describe "Lettings Log Features" do
expect(page).not_to have_content("These logs are duplicates") expect(page).not_to have_content("These logs are duplicates")
expect(page).not_to have_link("Keep this log and delete duplicates") expect(page).not_to have_link("Keep this log and delete duplicates")
expect(page).to have_link("Back to lettings logs", href: "/lettings-logs") expect(page).to have_link("Back to lettings logs", href: "/lettings-logs")
expect(DuplicateLogReference.count).to eq(0)
expect(duplicate_log.duplicates.count).to eq(0)
end end
it "allows changing answers to remaining duplicate log" do it "allows changing answers to remaining duplicate log" do
@ -507,6 +523,11 @@ RSpec.describe "Lettings Log Features" do
end end
it "allows deduplicating logs by changing the answers on the duplicate log" do it "allows deduplicating logs by changing the answers on the duplicate log" do
expect(DuplicateLogReference.count).to eq(2)
lettings_log.reload
expect(lettings_log.duplicates.count).to eq(1)
expect(lettings_log.duplicates).to include(duplicate_log)
expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}") 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?first_remaining_duplicate_id=#{lettings_log.id}&original_log_id=#{lettings_log.id}&referrer=duplicate_logs") click_link("Change", href: "/lettings-logs/#{duplicate_log.id}/tenant-code?first_remaining_duplicate_id=#{lettings_log.id}&original_log_id=#{lettings_log.id}&referrer=duplicate_logs")
fill_in("lettings-log-tenancycode-field", with: "something else") fill_in("lettings-log-tenancycode-field", with: "something else")
@ -516,6 +537,9 @@ RSpec.describe "Lettings Log Features" do
expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
expect(page).to have_content("Log #{duplicate_log.id} is no longer a duplicate and has been removed from the list") expect(page).to have_content("Log #{duplicate_log.id} is no longer a duplicate and has been removed from the list")
expect(page).to have_content("You changed the tenant code.") expect(page).to have_content("You changed the tenant code.")
expect(DuplicateLogReference.count).to eq(0)
expect(duplicate_log.duplicates.count).to eq(0)
end end
it "allows deduplicating logs by changing the answers on the original log" do it "allows deduplicating logs by changing the answers on the original log" do
@ -527,6 +551,8 @@ RSpec.describe "Lettings Log Features" do
expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
expect(page).to have_content("Log #{lettings_log.id} is no longer a duplicate and has been removed from the list") expect(page).to have_content("Log #{lettings_log.id} is no longer a duplicate and has been removed from the list")
expect(page).to have_content("You changed the tenant code.") expect(page).to have_content("You changed the tenant code.")
expect(DuplicateLogReference.count).to eq(0)
expect(duplicate_log.duplicates.count).to eq(0)
end end
end end
end end

Loading…
Cancel
Save