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. 27
      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))
discard logs
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))
else
redirect_to lettings_logs_path, notice: I18n.t("notification.logs_deleted", count: logs.count)

27
app/controllers/form_controller.rb

@ -171,8 +171,18 @@ private
return correcting_duplicate_logs_redirect_path
end
if @log.lettings? && current_user.lettings_logs.duplicate_logs(@log).count.positive?
return send("lettings_log_duplicate_logs_path", @log, original_log_id: @log.id)
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)
end
end
end
if @log.sales? && current_user.sales_logs.duplicate_logs(@log).count.positive?
@ -252,9 +262,13 @@ private
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?
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])
else
remove_fixed_duplicate_log_references(original_log)
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])
end
@ -275,4 +289,11 @@ private
I18n.t("notification.duplicate_logs.deduplication_success_banner", log_link: deduplicated_log_link, changed_question_label:).html_safe
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

26
spec/features/lettings_log_spec.rb

@ -459,6 +459,11 @@ RSpec.describe "Lettings Log Features" do
end
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}")
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}")
@ -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_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(DuplicateLogReference.count).to eq(0)
expect(lettings_log.duplicates.count).to eq(0)
end
it "allows changing answers on remaining original log" do
@ -483,6 +491,11 @@ RSpec.describe "Lettings Log Features" do
end
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}")
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}")
@ -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_link("Keep this log and delete duplicates")
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
it "allows changing answers to remaining duplicate log" do
@ -507,6 +523,11 @@ RSpec.describe "Lettings Log Features" do
end
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}")
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")
@ -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_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(DuplicateLogReference.count).to eq(0)
expect(duplicate_log.duplicates.count).to eq(0)
end
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_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(DuplicateLogReference.count).to eq(0)
expect(duplicate_log.duplicates.count).to eq(0)
end
end
end

Loading…
Cancel
Save