diff --git a/app/controllers/bulk_upload_lettings_resume_controller.rb b/app/controllers/bulk_upload_lettings_resume_controller.rb index 7041051ba..29a7c90aa 100644 --- a/app/controllers/bulk_upload_lettings_resume_controller.rb +++ b/app/controllers/bulk_upload_lettings_resume_controller.rb @@ -11,6 +11,8 @@ class BulkUploadLettingsResumeController < ApplicationController @bulk_upload = current_user.bulk_uploads.find(params[:id]) @soft_errors_only = params[:soft_errors_only] == "true" + return redirect_to form.preflight_redirect unless form.preflight_valid? + render form.view_path end @@ -30,6 +32,8 @@ private @form ||= case params[:page] when "fix-choice" Forms::BulkUploadLettingsResume::FixChoice.new(form_params.merge(bulk_upload: @bulk_upload)) + when "chosen" + Forms::BulkUploadLettingsResume::Chosen.new(form_params.merge(bulk_upload: @bulk_upload)) when "confirm" Forms::BulkUploadLettingsResume::Confirm.new(form_params.merge(bulk_upload: @bulk_upload)) else diff --git a/app/models/forms/bulk_upload_lettings_resume/chosen.rb b/app/models/forms/bulk_upload_lettings_resume/chosen.rb new file mode 100644 index 000000000..6a6f670c4 --- /dev/null +++ b/app/models/forms/bulk_upload_lettings_resume/chosen.rb @@ -0,0 +1,31 @@ +module Forms + module BulkUploadLettingsResume + class Chosen + include ActiveModel::Model + include ActiveModel::Attributes + include Rails.application.routes.url_helpers + + attribute :bulk_upload + + def view_path + "bulk_upload_lettings_resume/chosen" + end + + def back_path + lettings_logs_path + end + + def next_path + lettings_logs_path + end + + def save! + true + end + + def preflight_valid? + true + end + end + end +end diff --git a/app/models/forms/bulk_upload_lettings_resume/confirm.rb b/app/models/forms/bulk_upload_lettings_resume/confirm.rb index 7760ab2e8..abbece643 100644 --- a/app/models/forms/bulk_upload_lettings_resume/confirm.rb +++ b/app/models/forms/bulk_upload_lettings_resume/confirm.rb @@ -20,11 +20,23 @@ module Forms end def save! - processor = BulkUpload::Processor.new(bulk_upload:) - processor.approve + ApplicationRecord.transaction do + processor = BulkUpload::Processor.new(bulk_upload:) + processor.approve + + bulk_upload.update!(choice: "create-fix-inline") + end true end + + def preflight_valid? + bulk_upload.choice != "create-fix-inline" + end + + def preflight_redirect + page_bulk_upload_lettings_resume_path(bulk_upload, :chosen) + end end end end diff --git a/app/models/forms/bulk_upload_lettings_resume/fix_choice.rb b/app/models/forms/bulk_upload_lettings_resume/fix_choice.rb index e554f6bb9..2cbf15902 100644 --- a/app/models/forms/bulk_upload_lettings_resume/fix_choice.rb +++ b/app/models/forms/bulk_upload_lettings_resume/fix_choice.rb @@ -46,7 +46,17 @@ module Forms end def save! - bulk_upload.update(choice:) + bulk_upload.update!(choice:) if choice == "upload-again" + + true + end + + def preflight_valid? + bulk_upload.choice != "create-fix-inline" + end + + def preflight_redirect + page_bulk_upload_lettings_resume_path(bulk_upload, :chosen) end end end diff --git a/app/views/bulk_upload_lettings_resume/chosen.html.erb b/app/views/bulk_upload_lettings_resume/chosen.html.erb new file mode 100644 index 000000000..47ed9bbfd --- /dev/null +++ b/app/views/bulk_upload_lettings_resume/chosen.html.erb @@ -0,0 +1,14 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> + +
+
+ Bulk upload for lettings (<%= @bulk_upload.year_combo %>) +

You need to fix logs from your bulk upload

+ +

You have chosen to create logs from your recent bulk upload. To view and complete these logs, return to the list of lettings logs.

+ + <%= govuk_button_link_to "Return to lettings logs", lettings_logs_path %> +
+
diff --git a/spec/requests/bulk_upload_lettings_resume_controller_spec.rb b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb index fbb55fac8..0197a79cc 100644 --- a/spec/requests/bulk_upload_lettings_resume_controller_spec.rb +++ b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb @@ -29,6 +29,16 @@ RSpec.describe BulkUploadLettingsResumeController, type: :request do expect(response.body).to include(bulk_upload.filename) expect(response.body).not_to include("Cancel") end + + context "and previosuly told us to fix inline" do + let(:bulk_upload) { create(:bulk_upload, :lettings, user:, bulk_upload_errors:, choice: "create-fix-inline") } + + it "redirects to chosen" do + get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice" + + expect(response).to redirect_to("/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/chosen") + end + end end describe "GET /lettings-logs/bulk-upload-resume/:ID/fix-choice?soft_errors_only=true" do @@ -68,6 +78,8 @@ RSpec.describe BulkUploadLettingsResumeController, type: :request do patch "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice", params: { form: { choice: "create-fix-inline" } } expect(response).to redirect_to("/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/confirm") + + expect(bulk_upload.reload.choice).to be_blank end end end @@ -80,6 +92,16 @@ RSpec.describe BulkUploadLettingsResumeController, type: :request do expect(response.body).to include("Are you sure") end + + context "and previosuly told us to fix inline" do + let(:bulk_upload) { create(:bulk_upload, :lettings, user:, bulk_upload_errors:, choice: "create-fix-inline") } + + it "redirects to chosen" do + get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/confirm" + + expect(response).to redirect_to("/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/chosen") + end + end end describe "PATCH /lettings-logs/bulk-upload-resume/:ID/confirm" do @@ -92,6 +114,8 @@ RSpec.describe BulkUploadLettingsResumeController, type: :request do expect(mock_processor).to have_received(:approve) + expect(bulk_upload.reload.choice).to eql("create-fix-inline") + expect(response).to redirect_to("/lettings-logs/bulk-upload-results/#{bulk_upload.id}/resume") end end