diff --git a/app/controllers/bulk_upload_lettings_resume_controller.rb b/app/controllers/bulk_upload_lettings_resume_controller.rb index 4c21d39e2..7041051ba 100644 --- a/app/controllers/bulk_upload_lettings_resume_controller.rb +++ b/app/controllers/bulk_upload_lettings_resume_controller.rb @@ -9,6 +9,7 @@ class BulkUploadLettingsResumeController < ApplicationController def show @bulk_upload = current_user.bulk_uploads.find(params[:id]) + @soft_errors_only = params[:soft_errors_only] == "true" render form.view_path end diff --git a/app/controllers/bulk_upload_sales_resume_controller.rb b/app/controllers/bulk_upload_sales_resume_controller.rb index f38bf24bf..e120620a2 100644 --- a/app/controllers/bulk_upload_sales_resume_controller.rb +++ b/app/controllers/bulk_upload_sales_resume_controller.rb @@ -9,6 +9,7 @@ class BulkUploadSalesResumeController < ApplicationController def show @bulk_upload = current_user.bulk_uploads.find(params[:id]) + @soft_errors_only = params[:soft_errors_only] == "true" render form.view_path end diff --git a/app/models/forms/bulk_upload_lettings_soft_validations_check/soft_errors_valid.rb b/app/models/forms/bulk_upload_lettings_soft_validations_check/soft_errors_valid.rb index b2eee2488..ecb9e8cf2 100644 --- a/app/models/forms/bulk_upload_lettings_soft_validations_check/soft_errors_valid.rb +++ b/app/models/forms/bulk_upload_lettings_soft_validations_check/soft_errors_valid.rb @@ -24,7 +24,7 @@ module Forms def next_path case soft_errors_valid when "yes" - page_bulk_upload_lettings_resume_path(bulk_upload, page: "fix-choice") + page_bulk_upload_lettings_resume_path(bulk_upload, page: "fix-choice", soft_errors_only: true) when "no" page_bulk_upload_lettings_soft_validations_check_path(bulk_upload, page: "confirm") else diff --git a/app/views/bulk_upload_lettings_resume/fix_choice.html.erb b/app/views/bulk_upload_lettings_resume/fix_choice.html.erb index cc8e33eaa..ac79167ea 100644 --- a/app/views/bulk_upload_lettings_resume/fix_choice.html.erb +++ b/app/views/bulk_upload_lettings_resume/fix_choice.html.erb @@ -30,7 +30,12 @@ :name, legend: { hidden: true } %> - <%= f.govuk_submit %> +
+ <%= f.govuk_submit %> + <% if @soft_errors_only %> + <%= govuk_button_link_to "Cancel", bulk_upload_lettings_soft_validations_check_url(@bulk_upload, page: "soft-errors-valid"), secondary: true %> + <% end %> +
<% end %> diff --git a/app/views/bulk_upload_sales_resume/fix_choice.html.erb b/app/views/bulk_upload_sales_resume/fix_choice.html.erb index d646d531c..b5cca7fa2 100644 --- a/app/views/bulk_upload_sales_resume/fix_choice.html.erb +++ b/app/views/bulk_upload_sales_resume/fix_choice.html.erb @@ -30,7 +30,12 @@ :name, legend: { hidden: true } %> - <%= f.govuk_submit %> +
+ <%= f.govuk_submit %> + <% if @soft_errors_only %> + <%= govuk_button_link_to "Cancel", bulk_upload_sales_soft_validations_check_url(@bulk_upload, page: "soft-errors-valid"), secondary: true %> + <% end %> +
<% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index bb88fdce5..eefe3c34a 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -81,6 +81,11 @@ en: attributes: soft_errors_valid: blank: You must select if there are errors in these fields + forms/bulk_upload_sales_resume/fix_choice: + attributes: + choice: + blank: You must select how would you like to fix errors + inclusion: You must select one of the following options for how would like to fix errors activerecord: errors: diff --git a/spec/requests/bulk_upload_lettings_resume_controller_spec.rb b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb index 5529a13db..85e80f96d 100644 --- a/spec/requests/bulk_upload_lettings_resume_controller_spec.rb +++ b/spec/requests/bulk_upload_lettings_resume_controller_spec.rb @@ -27,6 +27,18 @@ RSpec.describe BulkUploadLettingsResumeController, type: :request do expect(response.body).to include("2022/23") expect(response.body).to include("How would you like to fix 2 errors?") expect(response.body).to include(bulk_upload.filename) + expect(response.body).not_to include("Cancel") + end + end + + describe "GET /lettings-logs/bulk-upload-resume/:ID/fix-choice?soft_errors_only=true" do + it "displays a cancel button" do + get "/lettings-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice?soft_errors_only=true" + + expect(response).to be_successful + + expect(response.body).to include("Bulk upload for lettings") + expect(response.body).to include("Cancel") end end diff --git a/spec/requests/bulk_upload_sales_resume_controller_spec.rb b/spec/requests/bulk_upload_sales_resume_controller_spec.rb new file mode 100644 index 000000000..409e89f3a --- /dev/null +++ b/spec/requests/bulk_upload_sales_resume_controller_spec.rb @@ -0,0 +1,96 @@ +require "rails_helper" + +RSpec.describe BulkUploadSalesResumeController, type: :request do + let(:user) { create(:user) } + let(:bulk_upload) { create(:bulk_upload, :sales, user:, bulk_upload_errors:) } + let(:bulk_upload_errors) { create_list(:bulk_upload_error, 2) } + + before do + sign_in user + end + + describe "GET /sales-logs/bulk-upload-resume/:ID/start" do + it "redirects to choice page" do + get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/start" + + expect(response).to redirect_to("/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice") + end + end + + describe "GET /sales-logs/bulk-upload-resume/:ID/fix-choice" do + it "renders the page correctly" do + get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice" + + expect(response).to be_successful + + expect(response.body).to include("Bulk upload for sales") + expect(response.body).to include("2022/23") + expect(response.body).to include("How would you like to fix 2 errors?") + expect(response.body).to include(bulk_upload.filename) + expect(response.body).not_to include("Cancel") + end + end + + describe "GET /sales-logs/bulk-upload-resume/:ID/fix-choice?soft_errors_only=true" do + it "displays a cancel button" do + get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice?soft_errors_only=true" + + expect(response).to be_successful + + expect(response.body).to include("Bulk upload for sales") + expect(response.body).to include("Cancel") + end + end + + describe "PATCH /sales-logs/bulk-upload-resume/:ID/fix-choice" do + context "when no option selected" do + it "renders error message" do + patch "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice" + + expect(response).to be_successful + + expect(response.body).to include("You must select") + end + end + + context "when upload again selected" do + it "sends them to relevant report" do + patch "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice", params: { form: { choice: "upload-again" } } + + expect(response).to redirect_to("/sales-logs/bulk-upload-results/#{bulk_upload.id}") + end + end + + context "when fix inline selected" do + it "sends them to confirm choice" do + patch "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/fix-choice", params: { form: { choice: "create-fix-inline" } } + + expect(response).to redirect_to("/sales-logs/bulk-upload-resume/#{bulk_upload.id}/confirm") + end + end + end + + describe "GET /sales-logs/bulk-upload-resume/:ID/confirm" do + it "renders page" do + get "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/confirm" + + expect(response).to be_successful + + expect(response.body).to include("Are you sure") + end + end + + describe "PATCH /sales-logs/bulk-upload-resume/:ID/confirm" do + let(:mock_processor) { instance_double(BulkUpload::Processor, approve: nil) } + + it "approves logs for creation" do + allow(BulkUpload::Processor).to receive(:new).with(bulk_upload:).and_return(mock_processor) + + patch "/sales-logs/bulk-upload-resume/#{bulk_upload.id}/confirm" + + expect(mock_processor).to have_received(:approve) + + expect(response).to redirect_to("/sales-logs/bulk-upload-results/#{bulk_upload.id}/resume") + end + end +end