- <%= govuk_panel(
- classes: "app-panel--interruption",
- ) do %>
-
These logs are duplicates
-
These logs have the same values for the following fields. Choose one to keep or correct the answers.
+ <% if @all_duplicates.count > 1 %>
+ <%= govuk_panel(
+ classes: "app-panel--interruption",
+ ) do %>
+
These logs are duplicates
+
These logs have the same values for the following fields. Choose one to keep or correct the answers.
+ <% end %>
<% end %>
<% @all_duplicates.each_with_index do |log, index| %>
<%= render partial: "duplicate_log", locals: { log: log } %>
<%= render partial: "duplicate_log_check_answers", locals: { log: log } %>
- <%= govuk_button_link_to "Keep this log and delete duplicates", log.lettings? ? lettings_log_delete_duplicates_path(log) : sales_log_delete_duplicates_path(log) %>
+ <%= duplicate_logs_continue_button(@all_duplicates, log, @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 60fffc48f..3ee368164 100644
--- a/app/views/logs/delete_duplicates.html.erb
+++ b/app/views/logs/delete_duplicates.html.erb
@@ -26,12 +26,12 @@
<%= govuk_button_to @duplicate_logs.count == 1 ? "Delete this log" : "Delete these logs",
- delete_logs_lettings_logs_path,
+ send("delete_logs_#{@log.class.name.underscore}s_path"),
method: "delete",
- params: { ids: @duplicate_logs.map(&:id) } %>
+ params: { ids: @duplicate_logs.map(&:id), original_log_id: @original_log_id } %>
<%= govuk_button_link_to(
"Cancel",
- @log.lettings? ? lettings_log_duplicate_logs_path(@log) : sales_log_duplicate_logs_path(@log),
+ send("#{@log.class.name.underscore}_duplicate_logs_path", @log),
secondary: true,
) %>
diff --git a/spec/features/lettings_log_spec.rb b/spec/features/lettings_log_spec.rb
index bee9bea9c..020910672 100644
--- a/spec/features/lettings_log_spec.rb
+++ b/spec/features/lettings_log_spec.rb
@@ -390,7 +390,7 @@ RSpec.describe "Lettings Log Features" do
end
end
- context "when there are duplicate logs" do
+ context "when a log becomes a duplicate" do
let(:lettings_log) { create(:lettings_log, :completed, owning_organisation: user.organisation, created_by: user) }
let!(:duplicate_log) do
duplicate = lettings_log.dup
@@ -399,13 +399,41 @@ RSpec.describe "Lettings Log Features" do
duplicate
end
- it "is possible to delete duplicate logs" do
- visit lettings_log_delete_duplicates_path(lettings_log)
+ before do
+ lettings_log.update!(tenancycode: "different")
+ visit("/lettings-logs/#{lettings_log.id}/tenant-code")
+ fill_in("lettings-log-tenancycode-field", with: duplicate_log.tenancycode)
+ click_button("Save and continue")
+ end
+
+ it "allows keeping the original log and deleting duplicates" do
+ expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs")
+ 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}")
click_button "Delete this log"
duplicate_log.reload
expect(duplicate_log.status).to eq("deleted")
expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
expect(page).to have_content("Log #{duplicate_log.id} has been deleted")
+ expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}")
+ 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("Continue editing Log #{lettings_log.id}", href: "/lettings-logs/#{lettings_log.id}")
+ end
+
+ it "allows keeping the duplicate log and deleting the original one" do
+ expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/duplicate-logs")
+ 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}")
+ click_button "Delete this log"
+ lettings_log.reload
+ expect(lettings_log.status).to eq("deleted")
+ expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
+ expect(page).to have_content("Log #{lettings_log.id} has been deleted")
+ expect(page).to have_current_path("/lettings-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{lettings_log.id}")
+ 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")
end
end
end
diff --git a/spec/features/sales_log_spec.rb b/spec/features/sales_log_spec.rb
index 890c82786..301f8e648 100644
--- a/spec/features/sales_log_spec.rb
+++ b/spec/features/sales_log_spec.rb
@@ -137,4 +137,54 @@ RSpec.describe "Sales Log Features" do
end
end
end
+
+ context "when a log becomes a duplicate" do
+ let(:user) { create(:user, :data_coordinator) }
+ let(:sales_log) { create(:sales_log, :completed, owning_organisation: user.organisation, created_by: user) }
+ let!(:duplicate_log) do
+ duplicate = sales_log.dup
+ duplicate.id = nil
+ duplicate.save!
+ duplicate
+ end
+
+ before do
+ allow(user).to receive(:need_two_factor_authentication?).and_return(false)
+ sign_in user
+ sales_log.update!(purchid: "different")
+ visit("/sales-logs/#{sales_log.id}/purchaser-code")
+ fill_in("sales-log-purchid-field", with: duplicate_log.purchid)
+ click_button("Save and continue")
+ end
+
+ it "allows keeping the original log and deleting duplicates" do
+ expect(page).to have_current_path("/sales-logs/#{sales_log.id}/duplicate-logs")
+ click_link("Keep this log and delete duplicates", href: "/sales-logs/#{sales_log.id}/delete-duplicates?original_log_id=#{sales_log.id}")
+ expect(page).to have_current_path("/sales-logs/#{sales_log.id}/delete-duplicates?original_log_id=#{sales_log.id}")
+ click_button "Delete this log"
+ duplicate_log.reload
+ expect(duplicate_log.status).to eq("deleted")
+ expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
+ expect(page).to have_content("Log #{duplicate_log.id} has been deleted")
+ expect(page).to have_current_path("/sales-logs/#{sales_log.id}/duplicate-logs?original_log_id=#{sales_log.id}")
+ 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("Continue editing Log #{sales_log.id}", href: "/sales-logs/#{sales_log.id}")
+ end
+
+ it "allows keeping the duplicate log and deleting the original one" do
+ expect(page).to have_current_path("/sales-logs/#{sales_log.id}/duplicate-logs")
+ click_link("Keep this log and delete duplicates", href: "/sales-logs/#{duplicate_log.id}/delete-duplicates?original_log_id=#{sales_log.id}")
+ expect(page).to have_current_path("/sales-logs/#{duplicate_log.id}/delete-duplicates?original_log_id=#{sales_log.id}")
+ click_button "Delete this log"
+ sales_log.reload
+ expect(sales_log.status).to eq("deleted")
+ expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
+ expect(page).to have_content("Log #{sales_log.id} has been deleted")
+ expect(page).to have_current_path("/sales-logs/#{duplicate_log.id}/duplicate-logs?original_log_id=#{sales_log.id}")
+ 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 sales logs", href: "/sales-logs")
+ end
+ end
end
diff --git a/spec/requests/duplicate_logs_controller_spec.rb b/spec/requests/duplicate_logs_controller_spec.rb
index 7eb4a2461..b9b5c0dd7 100644
--- a/spec/requests/duplicate_logs_controller_spec.rb
+++ b/spec/requests/duplicate_logs_controller_spec.rb
@@ -75,9 +75,9 @@ RSpec.describe DuplicateLogsController, type: :request do
it "displays buttons to delete" do
expect(page).to have_link("Keep this log and delete duplicates", count: 3)
- expect(page).to have_link("Keep this log and delete duplicates", href: "/lettings-logs/#{lettings_log.id}/delete-duplicates")
- expect(page).to have_link("Keep this log and delete duplicates", href: "/lettings-logs/#{duplicate_logs.first.id}/delete-duplicates")
- expect(page).to have_link("Keep this log and delete duplicates", href: "/lettings-logs/#{duplicate_logs.second.id}/delete-duplicates")
+ expect(page).to have_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_link("Keep this log and delete duplicates", href: "/lettings-logs/#{duplicate_logs.first.id}/delete-duplicates?original_log_id=#{lettings_log.id}")
+ expect(page).to have_link("Keep this log and delete duplicates", href: "/lettings-logs/#{duplicate_logs.second.id}/delete-duplicates?original_log_id=#{lettings_log.id}")
end
end
@@ -107,9 +107,9 @@ RSpec.describe DuplicateLogsController, type: :request do
it "displays buttons to delete" do
expect(page).to have_link("Keep this log and delete duplicates", count: 3)
- expect(page).to have_link("Keep this log and delete duplicates", href: "/sales-logs/#{sales_log.id}/delete-duplicates")
- expect(page).to have_link("Keep this log and delete duplicates", href: "/sales-logs/#{duplicate_logs.first.id}/delete-duplicates")
- expect(page).to have_link("Keep this log and delete duplicates", href: "/sales-logs/#{duplicate_logs.second.id}/delete-duplicates")
+ expect(page).to have_link("Keep this log and delete duplicates", href: "/sales-logs/#{sales_log.id}/delete-duplicates?original_log_id=#{sales_log.id}")
+ expect(page).to have_link("Keep this log and delete duplicates", href: "/sales-logs/#{duplicate_logs.first.id}/delete-duplicates?original_log_id=#{sales_log.id}")
+ expect(page).to have_link("Keep this log and delete duplicates", href: "/sales-logs/#{duplicate_logs.second.id}/delete-duplicates?original_log_id=#{sales_log.id}")
end
end
end
@@ -118,7 +118,7 @@ RSpec.describe DuplicateLogsController, type: :request do
describe "GET sales delete-duplicates" do
let(:headers) { { "Accept" => "text/html" } }
let(:id) { sales_log.id }
- let(:request) { get "/sales-logs/#{id}/delete-duplicates" }
+ let(:request) { get "/sales-logs/#{id}/delete-duplicates?original_log_id=#{id}" }
before do
allow(user).to receive(:need_two_factor_authentication?).and_return(false)
@@ -207,7 +207,7 @@ RSpec.describe DuplicateLogsController, type: :request do
describe "GET lettings delete-duplicates" do
let(:id) { lettings_log.id }
- let(:request) { get "/lettings-logs/#{id}/delete-duplicates" }
+ let(:request) { get "/lettings-logs/#{id}/delete-duplicates?original_log_id=#{id}" }
before do
allow(user).to receive(:need_two_factor_authentication?).and_return(false)