From f24ed0271d72f38149ee46de570fa711e6728ca6 Mon Sep 17 00:00:00 2001 From: Phil Lee Date: Wed, 1 Feb 2023 16:29:02 +0000 Subject: [PATCH] different CYA treatment when for bulk upload --- Gemfile | 1 + Gemfile.lock | 5 ++++ app/controllers/form_controller.rb | 7 ++++++ app/services/filter_service.rb | 18 ++++++++++++++ app/views/form/check_answers.html.erb | 2 +- spec/controllers/form_controller_spec.rb | 31 ++++++++++++++++++++++++ 6 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 spec/controllers/form_controller_spec.rb diff --git a/Gemfile b/Gemfile index 02bcdf3b7..22461ee2a 100644 --- a/Gemfile +++ b/Gemfile @@ -91,6 +91,7 @@ group :test do gem "capybara-lockstep" gem "factory_bot_rails" gem "faker" + gem "rails-controller-testing" gem "rspec-rails", require: false gem "selenium-webdriver", require: false gem "simplecov", require: false diff --git a/Gemfile.lock b/Gemfile.lock index cb46ee64a..423fc26f1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -289,6 +289,10 @@ GEM activesupport (= 7.0.4.1) bundler (>= 1.15.0) railties (= 7.0.4.1) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) rails-dom-testing (2.0.3) activesupport (>= 4.2.0) nokogiri (>= 1.6) @@ -467,6 +471,7 @@ DEPENDENCIES rack-attack rack-mini-profiler (~> 2.0) rails (~> 7.0.2) + rails-controller-testing redis roo rspec-rails diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 24e3d1b32..276faf8f6 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -4,6 +4,8 @@ class FormController < ApplicationController before_action :find_resource_by_named_id, except: %i[submit_form review] before_action :check_collection_period, only: %i[submit_form show_page] + before_action :extract_bulk_upload_from_session_filters, only: [:check_answers] + def submit_form if @log @page = form.get_page(params[@log.model_name.param_key][:page]) @@ -63,6 +65,11 @@ class FormController < ApplicationController private + def extract_bulk_upload_from_session_filters + filter_service = FilterService.new(current_user:, session:) + @bulk_upload = filter_service.bulk_upload + end + def restore_error_field_values if session["errors"] JSON(session["errors"]).each do |field, messages| diff --git a/app/services/filter_service.rb b/app/services/filter_service.rb index 4ef3a582c..affe31f02 100644 --- a/app/services/filter_service.rb +++ b/app/services/filter_service.rb @@ -27,4 +27,22 @@ class FilterService logs end end + + attr_reader :current_user, :session + + def initialize(current_user:, session:) + @current_user = current_user + @session = session + end + + def bulk_upload + id = ((logs_filters["bulk_upload_id"] || []).reject(&:blank?))[0] + @bulk_upload ||= current_user.bulk_uploads.find_by(id:) + end + +private + + def logs_filters + JSON.parse(session[:logs_filters] || "{}") || {} + end end diff --git a/app/views/form/check_answers.html.erb b/app/views/form/check_answers.html.erb index 46a945017..bf7f68e82 100644 --- a/app/views/form/check_answers.html.erb +++ b/app/views/form/check_answers.html.erb @@ -19,7 +19,7 @@ <% if any_questions_have_summary_card_number?(subsection, @log) %> <% subsection.applicable_questions(@log).group_by(&:check_answers_card_number).values.each do |question_group| %> - <%= render CheckAnswersSummaryListCardComponent.new(questions: question_group, log: @log, user: current_user) %> + <%= render CheckAnswersSummaryListCardComponent.new(questions: question_group, log: @log, user: current_user, bulk_upload: @bulk_upload) %> <% end %> <% else %> <%= render partial: "form/check_answers_summary_list", locals: { diff --git a/spec/controllers/form_controller_spec.rb b/spec/controllers/form_controller_spec.rb new file mode 100644 index 000000000..3b9e5c016 --- /dev/null +++ b/spec/controllers/form_controller_spec.rb @@ -0,0 +1,31 @@ +require "rails_helper" + +RSpec.describe FormController do + before do + sign_in user + end + + describe "GET #check_answers /lettings-logs/:ID/:SECTION_ID/check-answers" do + let(:user) { create(:user) } + let(:bulk_upload) { create(:bulk_upload, :lettings, user:) } + let(:log) { create(:lettings_log, bulk_upload:) } + + context "when checking answers without bulk upload " do + it "assigns @bulk_upload to nil" do + get :check_answers, params: { lettings_log_id: log.id } + + expect(assigns(:bulk_upload)).to be_nil + end + end + + context "when checking answers with bulk upload " do + it "assigns @bulk_upload" do + session[:logs_filters] = { bulk_upload_id: [bulk_upload.id.to_s] }.to_json + + get :check_answers, params: { lettings_log_id: log.id } + + expect(assigns(:bulk_upload)).to eql(bulk_upload) + end + end + end +end