From 6c8d5146180ddbe988df910fae94d3cf1a82c471 Mon Sep 17 00:00:00 2001 From: Phil Lee Date: Thu, 24 Nov 2022 15:14:06 +0000 Subject: [PATCH] add year page to bulk upload journey --- .../bulk_upload_lettings_logs_controller.rb | 27 ++++++++++++++++ .../bulk_upload_sales_logs_controller.rb | 27 ++++++++++++++++ .../bulk_upload_lettings/prepare_your_file.rb | 27 ++++++++++++++++ app/models/forms/bulk_upload_lettings/year.rb | 26 +++++++++++++++ .../bulk_upload_sales/prepare_your_file.rb | 25 +++++++++++++++ app/models/forms/bulk_upload_sales/year.rb | 26 +++++++++++++++ .../forms/prepare_your_file.html.erb | 15 +++++++++ .../forms/year.html.erb | 16 ++++++++++ .../bulk_upload_lettings_logs/show.html.erb | 1 - .../forms/prepare_your_file.html.erb | 15 +++++++++ .../forms/year.html.erb | 16 ++++++++++ .../bulk_upload_sales_logs/show.html.erb | 1 - config/locales/en.yml | 12 +++++++ .../bulk_upload_lettings_logs_spec.rb | 32 +++++++++++++++++++ spec/features/bulk_upload_sales_logs_spec.rb | 31 ++++++++++++++++++ spec/rails_helper.rb | 1 + 16 files changed, 296 insertions(+), 2 deletions(-) create mode 100644 app/models/forms/bulk_upload_lettings/prepare_your_file.rb create mode 100644 app/models/forms/bulk_upload_lettings/year.rb create mode 100644 app/models/forms/bulk_upload_sales/prepare_your_file.rb create mode 100644 app/models/forms/bulk_upload_sales/year.rb create mode 100644 app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb create mode 100644 app/views/bulk_upload_lettings_logs/forms/year.html.erb delete mode 100644 app/views/bulk_upload_lettings_logs/show.html.erb create mode 100644 app/views/bulk_upload_sales_logs/forms/prepare_your_file.html.erb create mode 100644 app/views/bulk_upload_sales_logs/forms/year.html.erb delete mode 100644 app/views/bulk_upload_sales_logs/show.html.erb create mode 100644 spec/features/bulk_upload_lettings_logs_spec.rb create mode 100644 spec/features/bulk_upload_sales_logs_spec.rb diff --git a/app/controllers/bulk_upload_lettings_logs_controller.rb b/app/controllers/bulk_upload_lettings_logs_controller.rb index 56d35da38..af857fc88 100644 --- a/app/controllers/bulk_upload_lettings_logs_controller.rb +++ b/app/controllers/bulk_upload_lettings_logs_controller.rb @@ -9,9 +9,36 @@ class BulkUploadLettingsLogsController < ApplicationController end end + def show + render form.view_path + end + + def update + if form.valid? + redirect_to bulk_upload_lettings_log_path(id: "prepare-your-file", form: { year: form_params[:year] }) + else + render form.view_path + end + end + private def in_crossover_period? FormHandler.instance.forms.values.any?(&:in_crossover_period?) end + + def form + @form ||= case params[:id] + when "year" + Forms::BulkUploadLettings::Year.new(form_params) + when "prepare-your-file" + Forms::BulkUploadLettings::PrepareYourFile.new(form_params) + else + raise "Page not found for path #{params[:id]}" + end + end + + def form_params + params.fetch(:form, {}).permit(:year) + end end diff --git a/app/controllers/bulk_upload_sales_logs_controller.rb b/app/controllers/bulk_upload_sales_logs_controller.rb index 100dff40d..b96573925 100644 --- a/app/controllers/bulk_upload_sales_logs_controller.rb +++ b/app/controllers/bulk_upload_sales_logs_controller.rb @@ -9,9 +9,36 @@ class BulkUploadSalesLogsController < ApplicationController end end + def show + render form.view_path + end + + def update + if form.valid? + redirect_to bulk_upload_sales_log_path(id: "prepare-your-file", form: { year: form_params[:year] }) + else + render form.view_path + end + end + private def in_crossover_period? FormHandler.instance.forms.values.any?(&:in_crossover_period?) end + + def form + @form ||= case params[:id] + when "year" + Forms::BulkUploadSales::Year.new(form_params) + when "prepare-your-file" + Forms::BulkUploadSales::PrepareYourFile.new(form_params) + else + raise "Page not found for path #{params[:id]}" + end + end + + def form_params + params.fetch(:form, {}).permit(:year) + end end diff --git a/app/models/forms/bulk_upload_lettings/prepare_your_file.rb b/app/models/forms/bulk_upload_lettings/prepare_your_file.rb new file mode 100644 index 000000000..6791b6238 --- /dev/null +++ b/app/models/forms/bulk_upload_lettings/prepare_your_file.rb @@ -0,0 +1,27 @@ +module Forms + module BulkUploadLettings + class PrepareYourFile + include ActiveModel::Model + + attr_accessor :year + + def view_path + "bulk_upload_lettings_logs/forms/prepare_your_file" + end + + def back_path + if in_crossover_period? + Rails.application.routes.url_helpers.bulk_upload_lettings_log_path(id: "year", form: { year: }) + else + Rails.application.routes.url_helpers.lettings_logs_path + end + end + + private + + def in_crossover_period? + FormHandler.instance.forms.values.any?(&:in_crossover_period?) + end + end + end +end diff --git a/app/models/forms/bulk_upload_lettings/year.rb b/app/models/forms/bulk_upload_lettings/year.rb new file mode 100644 index 000000000..1939a2d71 --- /dev/null +++ b/app/models/forms/bulk_upload_lettings/year.rb @@ -0,0 +1,26 @@ +module Forms + module BulkUploadLettings + class Year + include ActiveModel::Model + + attr_accessor :year + + validates :year, presence: true + + def view_path + "bulk_upload_lettings_logs/forms/year" + end + + def options + [ + OpenStruct.new(id: "2022", name: "2022/2023"), + OpenStruct.new(id: "2021", name: "2021/2022"), + ] + end + + def back_path + Rails.application.routes.url_helpers.lettings_logs_path + end + end + end +end diff --git a/app/models/forms/bulk_upload_sales/prepare_your_file.rb b/app/models/forms/bulk_upload_sales/prepare_your_file.rb new file mode 100644 index 000000000..71d6c7f48 --- /dev/null +++ b/app/models/forms/bulk_upload_sales/prepare_your_file.rb @@ -0,0 +1,25 @@ +module Forms + module BulkUploadSales + class PrepareYourFile + include ActiveModel::Model + + attr_accessor :year + + def view_path + "bulk_upload_sales_logs/forms/prepare_your_file" + end + + def back_path + if in_crossover_period? + Rails.application.routes.url_helpers.bulk_upload_sales_log_path(id: "year", form: { year: }) + else + Rails.application.routes.url_helpers.sales_logs_path + end + end + + def in_crossover_period? + FormHandler.instance.forms.values.any?(&:in_crossover_period?) + end + end + end +end diff --git a/app/models/forms/bulk_upload_sales/year.rb b/app/models/forms/bulk_upload_sales/year.rb new file mode 100644 index 000000000..aff1f188d --- /dev/null +++ b/app/models/forms/bulk_upload_sales/year.rb @@ -0,0 +1,26 @@ +module Forms + module BulkUploadSales + class Year + include ActiveModel::Model + + attr_accessor :year + + validates :year, presence: true + + def view_path + "bulk_upload_sales_logs/forms/year" + end + + def options + [ + OpenStruct.new(id: "2022", name: "2022/2023"), + OpenStruct.new(id: "2021", name: "2021/2022"), + ] + end + + def back_path + Rails.application.routes.url_helpers.sales_logs_path + end + end + end +end diff --git a/app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb b/app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb new file mode 100644 index 000000000..6e943c7a9 --- /dev/null +++ b/app/views/bulk_upload_lettings_logs/forms/prepare_your_file.html.erb @@ -0,0 +1,15 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> + +<%= form_with model: @form, scope: :form, url: bulk_upload_lettings_log_path(id: "prepare-your-file"), method: :patch do |f| %> +
+ prepare file goes here +
+ +
+ year selected <%= @form.year %> +
+ + <%= f.govuk_submit %> +<% end %> diff --git a/app/views/bulk_upload_lettings_logs/forms/year.html.erb b/app/views/bulk_upload_lettings_logs/forms/year.html.erb new file mode 100644 index 000000000..8ba1c280f --- /dev/null +++ b/app/views/bulk_upload_lettings_logs/forms/year.html.erb @@ -0,0 +1,16 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> + +<%= form_with model: @form, scope: :form, url: bulk_upload_lettings_log_path(id: "year"), method: :patch do |f| %> + <%= f.govuk_error_summary %> + + <%= f.govuk_collection_radio_buttons :year, + @form.options, + :id, + :name, + legend: { text: "Which year are you uploading data for?", size: "l" }, + caption: { text: "Upload lettings logs in bulk", size: "l" } %> + + <%= f.govuk_submit %> +<% end %> diff --git a/app/views/bulk_upload_lettings_logs/show.html.erb b/app/views/bulk_upload_lettings_logs/show.html.erb deleted file mode 100644 index 6f03ef508..000000000 --- a/app/views/bulk_upload_lettings_logs/show.html.erb +++ /dev/null @@ -1 +0,0 @@ -Find me in app/views/bulk_upload_lettings_logs/show.html.erb diff --git a/app/views/bulk_upload_sales_logs/forms/prepare_your_file.html.erb b/app/views/bulk_upload_sales_logs/forms/prepare_your_file.html.erb new file mode 100644 index 000000000..5aa215ebc --- /dev/null +++ b/app/views/bulk_upload_sales_logs/forms/prepare_your_file.html.erb @@ -0,0 +1,15 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> + +<%= form_with model: @form, scope: :form, url: bulk_upload_sales_log_path(id: "prepare-your-file"), method: :patch do |f| %> +
+ prepare file goes here +
+ +
+ year selected <%= @form.year %> +
+ + <%= f.govuk_submit %> +<% end %> diff --git a/app/views/bulk_upload_sales_logs/forms/year.html.erb b/app/views/bulk_upload_sales_logs/forms/year.html.erb new file mode 100644 index 000000000..d8aa09172 --- /dev/null +++ b/app/views/bulk_upload_sales_logs/forms/year.html.erb @@ -0,0 +1,16 @@ +<% content_for :before_content do %> + <%= govuk_back_link href: @form.back_path %> +<% end %> + +<%= form_with model: @form, scope: :form, url: bulk_upload_sales_log_path(id: "year"), method: :patch do |f| %> + <%= f.govuk_error_summary %> + + <%= f.govuk_collection_radio_buttons :year, + @form.options, + :id, + :name, + legend: { text: "Which year are you uploading data for?", size: "l" }, + caption: { text: "Upload sales logs in bulk", size: "l" } %> + + <%= f.govuk_submit %> +<% end %> diff --git a/app/views/bulk_upload_sales_logs/show.html.erb b/app/views/bulk_upload_sales_logs/show.html.erb deleted file mode 100644 index 86facd42c..000000000 --- a/app/views/bulk_upload_sales_logs/show.html.erb +++ /dev/null @@ -1 +0,0 @@ -Find me in app/views/bulk_upload_sales_logs/show.html.erb diff --git a/config/locales/en.yml b/config/locales/en.yml index f839ccf7e..4ea4af8cc 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -38,6 +38,18 @@ en: create_password: "Create a password to finish setting up your account" reset_password: "Reset your password" + activemodel: + errors: + models: + forms/bulk_upload_lettings/year: + attributes: + year: + blank: You must select a collection period to upload for + forms/bulk_upload_sales/year: + attributes: + year: + blank: You must select a collection period to upload for + activerecord: errors: models: diff --git a/spec/features/bulk_upload_lettings_logs_spec.rb b/spec/features/bulk_upload_lettings_logs_spec.rb new file mode 100644 index 000000000..f5832c3a3 --- /dev/null +++ b/spec/features/bulk_upload_lettings_logs_spec.rb @@ -0,0 +1,32 @@ +require "rails_helper" + +RSpec.describe "Bulk upload lettings log" do + let(:user) { create(:user) } + + before do + sign_in user + end + + context "when during crossover period" do + it "shows journey with year option" do + Timecop.freeze(2023, 6, 1) do + visit("/lettings-logs") + expect(page).to have_link("Upload lettings log in bulk") + click_link("Upload lettings log in bulk") + + expect(page).to have_content("Which year") + click_button("Continue") + + expect(page).to have_content("You must select a collection period to upload for") + choose("2022/2023") + + click_button("Continue") + + expect(page).to have_content("prepare file goes here") + click_link("Back") + + expect(page.find_field("form-year-2022-field")).to be_checked + end + end + end +end diff --git a/spec/features/bulk_upload_sales_logs_spec.rb b/spec/features/bulk_upload_sales_logs_spec.rb new file mode 100644 index 000000000..95c9b8a4f --- /dev/null +++ b/spec/features/bulk_upload_sales_logs_spec.rb @@ -0,0 +1,31 @@ +require "rails_helper" + +RSpec.describe "Bulk upload sales log" do + let(:user) { create(:user) } + + before do + sign_in user + end + + context "when during crossover period" do + it "shows journey with year option" do + Timecop.freeze(2023, 6, 1) do + visit("/sales-logs") + expect(page).to have_link("Upload sales log in bulk") + click_link("Upload sales log in bulk") + + expect(page).to have_content("Which year") + click_button("Continue") + + expect(page).to have_content("You must select a collection period to upload for") + choose("2022/2023") + click_button("Continue") + + expect(page).to have_content("prepare file goes here") + click_link("Back") + + expect(page.find_field("form-year-2022-field")).to be_checked + end + end + end +end diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb index cdeb71092..e25631df7 100644 --- a/spec/rails_helper.rb +++ b/spec/rails_helper.rb @@ -82,6 +82,7 @@ RSpec.configure do |config| config.include Devise::Test::ControllerHelpers, type: :controller config.include Devise::Test::ControllerHelpers, type: :view config.include Devise::Test::IntegrationHelpers, type: :request + config.include Devise::Test::IntegrationHelpers, type: :feature config.include ViewComponent::TestHelpers, type: :component config.include Capybara::RSpecMatchers, type: :component config.include ActiveJob::TestHelper